原创 S3C2440的定时器设置

2010-4-22 15:55 2977 8 8 分类: MCU/ 嵌入式

S<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3C2440516位定时器,定时器0-3PWM功能,定时器4有一个没有输出引脚的内部定时器,定时器0有一个用于大电流设备的死区生成器。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


28位预分频器和24位分频器。定时器0和定时器1共用一个8位预分频器。定时器2,定时器3,定时器4共用另一个8位预分频器。


定时器的时钟源是PCLK,首先经过预分频器降低频率后,进入第二个分频,可以生成5种不同的分频信号(1/2,1/4,1/8,1/16TCLK)。其中TCLK0TCLK1S3C2440的外部时钟信号输入管脚。


 


所有定时器都是递减计数。


预分频器值(prescaler valueTCFG0(0X5100 0000)中设置


0-7位设置TIMER0,TIMER1的预分频值。


8-15位设置TIMER2,3,4的预分频值。


第二个分频器的值(divider valueTCFG10X5100 0004)中设置


0-3位设置TIMER0的分频值


4-7位设置TIMER1的分频值


8-11位设置TIMER2的分频值


12-15位设置TIMER3的分频值


16-19位设置TIMER4的分频值


定时器输入频率的计算公式是:


Timer input clock Frequency = PCLK / {prescaler value+1} / {divider value}


{prescaler value} = 0~255


{divider value} = 2, 4, 8, 16


 


TCON(0X5100 0008)5个定时器的控制位寄存器,以TIMER0为例:


0-4位是TIMER0的控制位


Bit0:停止或开始TIMER0计时


Bit1:手动更新TCNTB0TCMPB0


Bit2TOUT0逻辑电平是否翻转


Bit30-一次性脉冲模式,1-自动装载模式


Bit4:使能或禁止死区功能


 


Timer0-3各有TCNTBnTCNTnTCMPBnTCMPnTCNTOn5个寄存器,其中TCNTnTCMPn是内部寄存器,没有对应的地址,通过读TCNTOn的值可以得到TCNTn的值。当定时器计数到0TCNTBnTCMPBn的值装入TCNTnTCMPn,如果中断使能,同时产生中断。在计数过程中,TCNTBnTCMPBn的值是不变的,变的是TCNTn的值。Timer0-3各有一个对应的输出脚TOUT0-3


 


Timer4TCNTB4,TCNT4,TCNTO43个寄存器,其中TCNT4是内部寄存器,Timer4没有对应的输出脚。


 


按下面的步骤启动一个定时器:


1、  初始化TCNTBnTCMPBn


2、  把相应定时器的手动更新位置1,不管是否使用TOUTn极性转换功能,推荐都配置下极性转换功能位。


3、  设置相应定时器的启动位启动定时器,同时清除手动更新位。


不管定时器是否运行,只要TOUTn极性转换位改变,TOUTn逻辑电平也会变改变。所以推荐极性转换位和人工加载位一起设置。


定时器运行时,当TCNTn等于TCMPBn时,TOUTn输出的电平会翻转,而当TCNTn减为0时,产生中断,TOUTn的电平又会翻转过来。


 


S3C2440datasheet里举了一个例子,很好的说明的定时器的工作过程,我把它翻译出来。过程图如下:


点击看大图


1、使能自动装载功能,TCNTBn设为16050+110),TCMPBn设为110,置为手动更新标志,把TCNTBnTCMPBn的值装入TCNTnTCMPnTOUTn翻转功能关闭,然后把TCNTBn设为8040+40),TCMPBn设为40,这是为下一次装载设置的。


2、使能定时器开始计时位,清零手动更新位,定时器开始向下计时。


3、当TCNTn的值和TCMPn的值相等时,TOUTn从低变高。


4、当TCNTn等于0时,产生中断,TCNTBnTCMPBn重新装载进TCNTnTCMPn,这次的值是8040TOUTn从高变低。


5、在定时器中断程序中,TCNTBnTCMPBn的值设置成8020+60)和60,这是为下一次装载准备的。


6、当TCNTn的值和TCMPn相等时,TOUTn从低变高。


7、当TCNTn等于0,产生中断,TCNTBnTCMPBn重新装载进TCNTnTCMPn,这次的值是8060.


8、在定时器中断程序中,关闭定时器自动装载和中断功能。


9、当TCNTn的值和TCMPn相等时,TOUTn从低变高。


10TCNTn等于0TCNTn不在自动装载,定时器停止计时。


11、不会有中断产生。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条