S5PV210的定时器程序模块程序

S5PV210的定时器程序模块程序

           --参考朱有鹏ARM裸机程序

1、PWM定时器的初始化:

步奏分析:

(1)因为我们是输出PWM波,所以需要将需要的GPIO口设置成PWM模式:

(2)根据上一篇博客说明的,我们需要知道驱动我们的PWM波的频率到底是多大,

所以我们需要配置我们的两个分频器

(3)接着,是PWM波的关键寄存器:

rTCNTB2 = 250;   // 频率*这个数可以得出我们需要知道的周期

rTCMPB2 = 125;   //把这个数除以上面的数,可以知道我们输出的占空比是多少。

(4)最后启动PWM波即可。


//初始化PWM timer2,使其输出PWM波形,频率是2KHZ,duty为50%
void timer2_pwm_init(void)
{
	//设置相关的寄存器
	//首先设置GPD0_CON,将其配置为xpwmTOUT_2
	//一般的寄存器实行的是读改写,三部曲
	rGPD0CON &= ~(0xf << 8);     //将这个寄存器清零
	rGPD0CON |= (2 << 8);     //将这个GPIO配置成PWM模式
	
	//设置PWM定时器的其他的寄存器使其工作,两个分频器进行分频
	rTCFG0 &= ~(0xff<<8);
	rTCFG0 |= (65<<8);
	
	rTCFG1 &= ~(0x0f<<8);
	rTCFG1 |= (1<<8);
	
	//前面的这两个确定的是得到的单位频率的多少
	rCON |= (1<<15);
	rTCNTB2 = 250;
	rTCMPB2 = 125;
	
	//第一次需要手工将TCNTB中的值刷新到TCNT中去,以后就可以自动重装载了
	rCON |= (1<<13);
	rCON &= ~(1<<13);
	
	rCON |= (1<<12);
	
	
	
}


2、使用看门狗定时器产生中断

S5PV210的定时器程序模块程序_第1张图片

步奏分析:

(1)根据上图的分析:看门狗定时器也是有两个预分频器寄存器的,用来

得到需要的频率。

(2)接着WTDAT用来把数写进去,也就是相当于设定好了周期,一旦减少到了0之后。

就会触发中断(前提是WTCON[2]已经设置好)

(3)WTCON[0]寄存器设置为复位的寄存器,写什么值都能进行复位

使用看门狗的中断程序:

void wdt_init_interrupt(void)
{
	//第一步:设置好预分频器和分频器,得到时钟周期是128US
	rWTCON &= ~(0xff<<8);
	rWTCON |= (65<<8);
	
	rWTCON &= ~(3<<3);
	rWTCON |= (3<<3);
	
	//第二步;设置中断和复位信号的使能或者禁止
	rWTCON |= (1<<2);      //enable wdt intterrupt
	rWTCON &= ~(1<<0);     //diasble wdt reset
	
	//第三步;设置定时时间
	rWTDAT = 10000;       //定时1.28S
	rWTCNT = 10000;       //定时1.28S
	
	//其实WTDAT中的值不会自动刷到WTCNT中去,如果不是显示
	//它的值就是默认值,然后以这个默认值开始计数,所以这个时间比较久
	//设置了WTCNT和WTDAT一样的值,则第一次的定时值和后面的一样的。
	rWTDAT = 1000;
	
	//第四步,先把所有的寄存器都设置好了之后,再去开看门狗
	rWTCON |= (1<<5);    //enable wdt
	
}

使用看门狗进行复位:

void wdt_init_reset(void)
{
	//第一步,设置好预分频器和分频器
	rWTCON &= ~(0xff<<8);
	rWTCON |= (65<<8);				// 1MHz
	
	rWTCON &= ~(3<<3);
	rWTCON |= (3<<3);				// 1/128 MHz, T = 128us
		
	//设置中断和复位的信号的使能或者禁止
	rWTCON &= ~(1<<2);       //disable wdt interrupt
	rWTCON |= (1<<0);        //enable WDT reset
	
	//第三步:设置定时时间
    rWTDAT = 10000;
	rWTCNT = 10000;
	
	//第四步:先把所有的寄存器设置好,再去看门狗。
	rWTCON |= (1<<5);           //enable wdt
		
}

















你可能感兴趣的:(嵌入式:裸机开发)