您的位置 首页 国产IC

s3c2410的timer定时器的运用

2410共有5个定时器,其中timer4没有引脚输出,其余都可以用作pwm。0、1共用一个预分频器2、3、4共用一个预分频器TCFG0[0:7][8:15]分别

2410共有5个定时器,其间timer4没有引脚输出,其他都可以用作pwm。

0、1共用一个预分频器

2、3、4共用一个预分频器

TCFG0 [0:7][8:15] 别离对应这两个预分频器,分频值不要忘了+1,由于分频值不能为0

TCFG1[0:3][][][][][] 别离对应这每个定时器自己的分频值

TCNTB0 定时器的计数值

TCMPB0 定时器的比较值

我了解的PWM,在一个固定的时刻周期中,也便是TCNTB0这个值,一个周期开端后,TCNTB0开端减1计数,当减到和TCMPB0 持平时,TOUT0输出回转,当TCNTB0减到0时,TOUT0输出再次回转,一个新的计数周期开端。

TCNTO0 定时器监听寄存器

TCON0 操控寄存器

在第一次运用定时器时,需求手动更新位1以使TCNTB0/TCMPB0 装入内部寄存器。CNT0/TCMP0中。下一次假如还要设置这一位,需求先将它清0.

DMA形式

给出一个完成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; //将中止函数赋值
}

void Timer0_init()
{
//rTCFG0设置预分频器
//PCLK 50M/200 = 250KHz
rTCFG0 = (rTCFG0 & (~(0xFF << 0))) | (200 << 0);

//rTCFG1设置作业在哪种分频 2、4、8、16或者是TCLK0/TCLK1
rTCFG1 = (rTCFG1 & (~(0xF << 0))) | (3 << 0);//16分频

rTCNTB0 = 30000; //计数值

rTCON |=(1 << 1); //手动将计数值装入TCNT0中
rTCON &= ~(1 << 1);// 这位一定要再次清零,不然,定时器不会主动装载
rTCON |=(1 << 3) | (1 << 0);//敞开定时器,并主动装载
}

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/262300.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部