Freescale MC9S08单片机芯定时器
定时器是主管定时的系统。MCS08AW60内部包括两个独立的定时器。
定时器的核心是一个16位计数器。该计数器的时钟由外部晶振时钟或者锁相环模块总线时钟经过预定的分频因子分频得到,相互独立的定时器可以使用不同的分频因子。同一个定时器的所有动作都以分频后的时钟作为参考,相互之间都有确定的关系。从单片机的角度看,一个单位时间就是定时器的自由运行计数器计数的时间间隔,所以在任何时候都可以通过读取计数器的值而判断经过了多少时间。
使用预置计数功能可以得到精确的溢出时间,可以在任何时候暂停或清除计数器的计数。通过定时器的溢出功能可以进行长时间的定时。
定时器具有定时溢出、输入捕捉、输出比较、PWM脉冲输出和DMA直接存储器访问等功能。定时器应用很广,如利用输入捕捉测量脉宽和频率;输出特定的波形;直接输出脉宽调制波(PWM);使用输入捕捉配合输出比较来输出同步波形以及用于延时等。下面就以MCS08AW60为例,详细阐述定时器的功能及应用。
MCS08AW60定时器的功能结构图如图8-1所示。每个定时器具有两路独立的输入捕捉和输出比较通道;可以实现带缓冲(Buffered)和不带缓冲(Unbuffered)的脉宽调制波;可以得到8种可编程选择的分频因子;可以自由运行计数或预置计数;可以停止或清除计数器计数;定时器溢出可以引发中断,每路通道的输入捕捉和输出比较也可以引发中断。
每一路定时器都由以下寄存器控制:
一个8位状态和控制寄存器——TPMxSC;
一个16位计数器寄存器——TPMxCNTH:TPMxCNTL;
一个16位预置计数器寄存器——TPMxMODH:TPMxMODL;
控制每个通道的8位状态和控制寄存器——TPMxCnSC;
每个通道计数器值的16位寄存器——TPMxCnVH:TPMxCnVL。
注:寄存器命名中的“x”表示定时器模块标志。MCS08AW60具有两个定时器,因此x表示1或2.而n表示通道数。
用8位总线访问16位计数器时必须进行两次操作,在两次操作之间计数器仍然在继续计数。如果直接读取,则高低字节不是同一个时刻的计数值。S08使用缓冲机制解决这一问题。当读取16位计数器的高字节时,其低字节同时被自动锁存到缓冲区中;后面对低字节的读取实际是读取这个缓冲区。而在读取低字节之前,这个缓冲区的内容将保持不变,即使后面又多次读取高字节,该缓冲区仍将保持其原有内容。因此,一个完整的读计数器操作,只要读取了高字节就应该读取低字节。高字节也有对应的缓冲区机制。如果先读取计数器的低字节,也一定要读取其高字节。对16位计数器进行写入操作时,实际的写入数都被存放在缓冲区中,只有这个16位计数器进行写入操作后,该缓冲区的数值才会被实际写入计数器中。
注:整理自网络