新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > s3c2410的timer定時器的使用

s3c2410的timer定時器的使用

作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
2410共有5個定時器,其中timer4沒有引腳輸出,其余都可以用作pwm。

0、1共用一個預(yù)分頻器

本文引用地址:http://www.2s4d.com/article/201611/319913.htm

2、3、4共用一個預(yù)分頻器

TCFG0 [0:7][8:15] 分別對應(yīng)這兩個預(yù)分頻器,分頻值不要忘了+1,因?yàn)榉诸l值不能為0

TCFG1[0:3][][][][][] 分別對應(yīng)這每個定時器自己的分頻值

TCNTB0 定時器的計數(shù)值

TCMPB0 定時器的比較值

我理解的PWM,在一個固定的時間周期中,也就是TCNTB0這個值,一個周期開始后,TCNTB0開始減1計數(shù),當(dāng)減到和TCMPB0 相等時,TOUT0輸出反轉(zhuǎn),當(dāng)TCNTB0減到0時,TOUT0輸出再次反轉(zhuǎn),一個新的計數(shù)周期開始。

TCNTO0 定時器監(jiān)聽寄存器

TCON0 控制寄存器

在第一次使用定時器時,需要手動更新位1以使TCNTB0/TCMPB0 裝入內(nèi)部寄存器。CNT0/TCMP0中。下一次如果還要設(shè)置這一位,需要先將它清0.

DMA模式

給出一個實(shí)現(xiàn)timer0的例子

void init_irq(void)
{
rPRIORITY = (rPRIORITY & ((~0x01) | (0x03 << 7))) | (0x0 << 7);

//rINTMSK &= (~(1 << 0)) & (~(1 << 2)) & (~(1 << 5));
rINTMSK &= ((~(1 << 0)) & (~(1 << 2)));

pISR_EINT0 = (unsigned)Eint0_ISR;
pISR_EINT2 = (unsigned)Eint2_ISR;
//pISR_EINT4_7 = (unsigned)Eint4_7_ISR;
rINTMSK &= ~(1 << 10);//允許timer0的中斷
pISR_TIMER0 = (unsigned)Eint10_TIMER0_ISR; //將中斷函數(shù)賦值
}

void Timer0_init()
{
//rTCFG0設(shè)置預(yù)分頻器
//PCLK 50M/200 = 250KHz
rTCFG0 = (rTCFG0 & (~(0xFF << 0))) | (200 << 0);

//rTCFG1設(shè)置工作在哪種分頻 2、4、8、16或者是TCLK0/TCLK1
rTCFG1 = (rTCFG1 & (~(0xF << 0))) | (3 << 0);//16分頻

rTCNTB0 = 30000; //計數(shù)值

rTCON |=(1 << 1); //手動將計數(shù)值裝入TCNT0中
rTCON &= ~(1 << 1);// 這位一定要再次清零,否則,定時器不會自動裝載
rTCON |=(1 << 3) | (1 << 0);//開啟定時器,并自動裝載
}


void __irq Eint10_TIMER0_ISR(void)
{
i++;
rSRCPND = BIT_TIMER0;
rINTPND = BIT_TIMER0;
}



關(guān)鍵詞: s3c2410timer定時

評論


技術(shù)專區(qū)

關(guān)閉