第七章 定时器
一.通用定时器概述
定时器或计数器的逻辑电路本质上是相同的,它们之间的区别主要在用途上。它们都是主要由带有保存当前值的寄存器和当前寄存器值加1或减1逻辑组成,其内部工作原理图是以一个N位的加1或减1计数器为核心,计数器的初始值由初始化编程设置,计数脉冲的来源有两类:系统时钟和外部事件脉冲。
定时工作方式:
若编程设置定时/计数器为定时工作方式时,则N位计数器的计数脉冲来源于内部系统时钟,并经过M分频。每个计数脉冲使计数器加1或减1,当N位计数器里的数加到0或减到0时,则会产生一个“回0信号”,该信号有效时表示N位计数器里的当前值是0。因为系统时钟的频率是固定的,其M分频后所得到的计数脉冲频率也就是固定的,因此通过对该频率脉冲的计数就转换为定时,实现了定时功能。
计数工作方式:
若编程设置定时/计数器为计数方式时,则N位计数器的计数脉冲来源于外部事件产生的脉冲信号。有一个外部事件脉冲,计数器加1或减1,直到N位计数器中的值为0,产生“回0信号”。
二.S5PV210的脉宽调制定时器
1.PWM定时器概述
S5PV210有五个32位脉冲宽度调制定时器。这些定时器为ARM分系统产生内部中断。此外,定时器0、1、2、3包含一个PWM功能模块,用于驱动外部I/O信号。定时器0中的PWM可选择的死区发生器,能够支持一个大电流设备。定时器4是没有外部引脚的内部定时器。
定时器将APB—PCLK作为时钟源。定时器0和1共用一个可编程8比特分频器,该分频器为PCLK提供第一层分频。定时器2、3、4共用一个不同的8比特分频器。每个定时器有自己的专用时钟分频器,用于提供第二层的时钟分频器(分频器分为2、4、8、16分频)。
每一个定时器有自己的由定时器时钟分频得到的32比特减法计数器。减法计数器最初从定时器计数缓冲寄存器(TCNTBn)中得到初值,然后在定时器时钟控制下进行减法操作。在自动重载工作状态,如果减法计数器降到了0,TCNTBn相应的值会重载到减法计数器来启动下一个循环。
PWM功能要用到TCMPBn比较缓冲寄存器的值。如果在定时器控制逻辑下,减法计数器的值与比较寄存器的值相匹配,定时器逻辑会改变输出电平。因此,比较缓冲寄存器决定了PWM输出的开启和关闭时间。
TCNTBn和TCMPBn寄存器都是都是双缓存配置,能够使定时器参数在循环的中间得到更新。新的数值直到当前时钟循环完成后才会起作用。
定时器组成:
减法计数器、初值寄存器、比较寄存器、观察寄存器、控制逻辑等5部分构成。
输入时钟频率的公式:
Timer input clock Frequency = PCLK / {prescaler value+1} / {clockdivider }
{prescaler value} = 0~255
{ clock divider } = 2, 4, 8, 16
PWM定时器的寄存器
寄存器声明:
// define Timer register
#define rTCFG0 (*(volatile unsignedint *)0xEA000000)
#define rTCFG1 (*(volatile unsignedint *)0xEA000004)
#define rTCON (*(volatile unsignedint *)0xEA000008)
#define rTCNTB0 (*(volatile unsignedint *)0xEA00000C)
#define rTCMPB0 (*(volatile unsignedint *)0xEA000010)
#define rTCNTO0 (*(volatile unsignedint *)0xEA000014)
……
前两个是定时器配置寄存器,主要用来设置预分频值和分割器值。第三个是控制寄存器,主要用来设置各定时器功能,第四个是计数缓冲寄存器,第五个是比较缓冲寄存器,第六个是计数观察寄存器。
2. PWM定时器的寄存器
1) 定时器配置寄存器0(TCFG0)
2) 定时器配置寄存器1(TCFG1)
3) 定时器控制寄存器(TCON)
4) 定时器n计数缓冲寄存器(TCNTBn)
5) 定时器n 比较缓冲寄存器(TCMPBn)
6) 定时器n的观察寄存器(TCNTOn)
3. PWM双缓冲定时器
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定时器控制示例程序(P157)
三.看门狗定时器
1. 看门狗定时器概述
watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器。普通的定时器一般起计时作用,计时超时(Timer Out)则引起一个中断,例如触发一个系统时钟中断。watchdog本质上是一种定时器,那么普通定时器所拥有的特征它也应该具备,当它记时超时时也会引起事件的发生,只是这个事件除了可以是系统中断外,它也可以是一个系统重起信号(Reset Signal),能发送系统重起信号的定时器我们就叫它watchdog。
PCLK为系统时钟,看门狗定时器的时钟由PCLK经过预分频后再分割得到。预分频器值和频率分割因子由看门狗定时器的控制寄存器(WTCON)进行编程设定,可选范围是0~255。频率分割因子可选择的值为16、32、64、128。
下面公式计算看门狗定时器的计数时钟周期:
T_watchdog = 1/ (PCLK / (预分频器值 + 1) / 分割因子)
看门狗定时器在计数器变为0时,会产生一个宽度为128个PCLK的复位脉冲信号。程序在正常工作时,应该定期将看门狗定时器重置。如果程序跑飞,则看门狗定时器回0时会将系统复位,防止应用系统出现死机。
2. 看门狗定时器寄存器
1) 看门狗定时器控制寄存器(WTCON)
2) 看门狗定时器数据寄存器(WTDAT)
3) 看门狗定时器计数寄存器(WTCNT)
看门狗定时器参考程序(P161)
四.RTC实时时钟
实时时钟部件RTC是用于提供年、月、日、时、分、秒、星期等实时时间信息定时部件。
RTC部件可以将年、月、日、时、分、秒、星期等信息的8位数据以BCD码格式输出。它由外部时钟驱动工作,外部时钟频率为32.768kHz晶体,必须XTIrtc和XTOrtc引脚接外部晶体,并接合适的电容。同时RTC部件还可以具有报警功能。
RTC控制器
RTC编程(P165),实验指导书(P112)