S3C2440定時(shí)器0 的初始化程序
>>定時(shí)器比較值、計(jì)數(shù)值比較緩存寄存器TCMPBn、TCNTBn,這兩個(gè)寄存器用于存儲(chǔ)定時(shí)器的比較值和計(jì)數(shù)初始值。
>>定時(shí)器比較值、計(jì)數(shù)值比較寄存器TCMPn、TCNTn,這兩個(gè)寄存器是定時(shí)器的內(nèi)部寄存器,用戶無需進(jìn)行操作。
1. 需要配置成定時(shí)器模式時(shí)使用以下的初始化函數(shù),并且計(jì)數(shù)值到0時(shí)產(chǎn)生中斷。
//****************定時(shí)器中斷服務(wù)函數(shù)*****************
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;
//使能定時(shí)器中斷
rINTMSK = ~(1<<10);
pISR_TIMER0= (unsigned int)Timer0_isr;
}
2. 若需要配置成PWM使用如下的初始化函數(shù),不需要中斷處理函數(shù),并且有外部引腳提供輸出。此情況下,輸出電平變化兩次,一次是比較值相等時(shí),另一次是計(jì)數(shù)器減到0時(shí),所以一下初始化程序產(chǎn)生的PWM方波的頻率是62500Hz。
void Init_PWM0()
{
rGPBCON &= ~(0x03); //GPB0進(jìn)行清零
rGPBCON |= 1<<1; //設(shè)置為TOUT0輸出
rTCFG0 &= ~(0xff);
rTCFG0 |= 99; //第一級分頻器的分頻系數(shù)是100
rTCFG1 &= ~(0xf);
rTCFG1 |= 0x02;//第二級分頻器的分頻系數(shù)是8
rTCNTB0 =62;//0.001s中斷一次
rTCMPB0 = rTCNTB0/2; //占空比為50%
rTCON |= 1<<1; //加載計(jì)數(shù)值和比較值分別到各自的緩存寄存器
rTCON = 0x0d;//0位開啟定時(shí)器,2位當(dāng)TCNT0和TCMP0相等時(shí)翻轉(zhuǎn)電平,3位當(dāng)TCNT0中的值減到0時(shí),TCNTB0的值自動(dòng)加載到TCNT0中計(jì)數(shù)。
}