第7章 定时器
1、定时器或计数器的逻辑电路本质是一样的,都是通过当前寄存器中的值加1或减1实现。
2、定时器与计数器的区别在于:在应用中,定时器是对内部周期性信号进行计数,从而获得一段间隔的时间;而计数器一般是对外部事件产生的信号进行计数。
3、S5PV210提供了5个16位的Timer(Timer0~Timer4),其中Timer0~Timer3支持Pulse WidthModulation— PWM(脉宽调制)。Timer4是一个内部定时器(internal timer),没有输出引脚(output pins)。
4、PWM定时器相关寄存器
TCFG0:配置预分频器; TCFG1:配置分割器;
TCON:控制寄存器; TCNTBn:计数缓冲寄存器;
TCMPBn:比较缓冲寄存器;TCNTOn:计数观察寄存器。
5、S3C2410定时器的双缓冲机制,及利用双缓冲机制实现脉宽调制的方法。
PWM双缓冲定时器工作流程
1)程序开始,设置TCMPBn、TCNTBn这两个寄存器,表示定时器n的比较值、初始计数值。
2)设置TCON寄存器启动定时器n,这时TCMPBn、TCNTBn的值将被装入内部寄存器TCMPn、TCNTn中,在定时器n的时钟频率下,TCNTn开始减1计数,其值可以通过读取TCNTON寄存器得知。
3)当TCNTn的值等于TCMPn的值时,定时器n的输出管脚TOUTn反转,TCNTn继续减1计数。
4)当TCNTn的值到达0时,其输出管脚TOUTn再次反转,并触发定时器n的中断。
5)当TCNTn的值到达0时,如果在TCON寄存器中将定时器n设置为自动加载,则TCMPBn和TCNTBn寄存器的值被自动装入TCMPn和TCNTn寄存器中,下一次计数流程开始。
要完成如图所示的简单的PWM循环,其步骤为:
l 使用159(50+109)初始化TCNTBn寄存器,用109初始化TCMPBn。
l 启动定时器,设置开始位并手动将该位更新至关闭状态。159的TCNTBn值会被载入减法计数器,109的TCMPBn值会被载入比较计数器,然后TOUTn输出置为低电平。
l 减法计数器开始进行减法计数,TCNTn的值减至TCNTn寄存器值109,输出TOUTn从低电平变为高电平。
l 如果减法计数器到达0,它会产生一个中断请求。
l 减法计数器自动载入TCNTBn,会重启循环。
6、定时器时钟确定
Timer input clock Frequency = PCLK /
{prescaler value+1} / {clock divider }
{prescaler value} = 0~255
{ clock divider } = 16, 32, 64, 128
例题:
1)通过S5PV210微处理器定时器实现时钟,并通过UART串口打印时、分、秒等信息。
http://blog.csdn.net/u013256018/article/details/50465289
2)通过S5PV210微处理器的PWM定时器编程控制直流电机,以实现……调速控制。
7、能发送系统重起信号的定时器我们就叫它watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器。
公式计算看门狗定时器的计数时钟周期:
T_watchdog = 1/ (PCLK / (预分频器值 + 1) / 分割因子)
在系统程序正常执行情况下,应用程序必须在一定周期内(不能大于看门狗定时器所产生的时间间隔)执行重置看门狗动作,使其计数器值不会递减到0,因而也不会产生复位信号。一旦程序出现死锁,就不能周期性地重置看门狗,看门狗定时器计数溢出,产生一个“回0信号”,利用该信号复位微处理器,从而使系统程序退出死锁,重新进入正常运行状态
8、三个看门狗控制寄存器:
WTCON --watchdog控制寄存器
WTDAT--看门狗定时器数据寄存器
WTCNT――看门狗定时器计数寄存器
9、喂狗函数
void feed_dog()
{ rWTCNT=0x8000;}
例程:
void main()
{ init_system(); .....
enable_watchdog(); .....
while(1) { feed_dog(); }
}
10、实时时钟部件RTC是用于提供年、月、日、时、分、秒、星期等实时时间信息的定时部件。
11、RTC部件所使用的寄存器,其中数据以BCD码格式保存。