微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > s3c2410的timer定时器的使用

s3c2410的timer定时器的使用

时间:11-22 来源:互联网 点击:
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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top