S3C2440定时器0 的初始化程序
扫描二维码
随时随地手机看文章
>>定时器比较值、计数值比较缓存寄存器TCMPBn、TCNTBn,这两个寄存器用于存储定时器的比较值和计数初始值。
>>定时器比较值、计数值比较寄存器TCMPn、TCNTn,这两个寄存器是定时器的内部寄存器,用户无需进行操作。
1. 需要配置成定时器模式时使用以下的初始化函数,并且计数值到0时产生中断。
//****************定时器中断服务函数*****************
void __irq Timer0_isr()
{
//send_str((unsigned char *)"Timer0 interrupt is started!rn");
Led_on(0);Led_off(1);Led_off(2);Led_off(3);
dely(350);
Led_off(0);Led_on(1);Led_off(2);Led_off(3);
dely(350);
Led_off(0);Led_off(1);Led_on(2);Led_off(3);
dely(350);
Led_off(0);Led_off(1);Led_off(2);Led_on(3);
dely(350);
rSRCPND |= 1<<10;
rINTPND |= 1<<10;
//send_str((unsigned char *)"Timer0 interrupt is end!rn");
}
void Init_timer0()
{
rTCFG0 &= ~(0xff);
rTCFG0 |= 99;
rTCFG1 &= ~(0xf);
rTCFG1 |= 0x02;
rTCNTB0 =62500;//1s中断一次
rTCON |= 1<<1;
rTCON = 0x09;
//使能定时器中断
rINTMSK = ~(1<<10);
pISR_TIMER0= (unsigned int)Timer0_isr;
}
2. 若需要配置成PWM使用如下的初始化函数,不需要中断处理函数,并且有外部引脚提供输出。此情况下,输出电平变化两次,一次是比较值相等时,另一次是计数器减到0时,所以一下初始化程序产生的PWM方波的频率是62500Hz。
void Init_PWM0()
{
rGPBCON &= ~(0x03); //GPB0进行清零
rGPBCON |= 1<<1; //设置为TOUT0输出
rTCFG0 &= ~(0xff);
rTCFG0 |= 99; //第一级分频器的分频系数是100
rTCFG1 &= ~(0xf);
rTCFG1 |= 0x02;//第二级分频器的分频系数是8
rTCNTB0 =62;//0.001s中断一次
rTCMPB0 = rTCNTB0/2; //占空比为50%
rTCON |= 1<<1; //加载计数值和比较值分别到各自的缓存寄存器
rTCON = 0x0d;//0位开启定时器,2位当TCNT0和TCMP0相等时翻转电平,3位当TCNT0中的值减到0时,TCNTB0的值自动加载到TCNT0中计数。
}