首页 理论教育 单片机定时计数功能实践

单片机定时计数功能实践

时间:2023-11-19 理论教育 版权反馈
【摘要】:用这种方式复位时,计数器将被清零,定时器从0x0000重新开始计数。当外部时钟源复用TPM通道引脚时,该引脚不能被用于其他通道的定时功能。

单片机定时计数功能实践

定时/计数功能是定时器模块最基本的功能,主要使用到模块内部时钟源控制、计数器、比较器和模寄存器等,其工作过程建立在16位核心计数器基础之上,定时和计数操作的原理都是对时钟脉冲信号进行计数统计。定时器模块通过寄存器TPMxSC设置模块时钟源和分频系数,确定输入到16位计数器中时钟信号的频率,在计数器加1(或者减1)操作下将当前计数器(TPMxCNTH:TPMxCNHTL)的值与模寄存器(TPMxMODH:TPMxMODL)中的值进行比较,如果计数器中的数值没有达到模寄存器中的预置数值则计数器继续计数,如果计数器中的计数值达到或大于模寄存器中预置值则产生溢出,并在中断使能的情况下产生一个溢出中断请求。

1.定时/计数执行过程

定时功能所设定的时间是模块时钟源所确定输入到计数器的时钟脉冲间隔与模寄存器中预置数的乘积。例如,选择总线时钟频率(CLKSB:CLKSA=01,默认总线时钟为4MHz),分频因子选择64(PS2:PS1:PS0=110),那么输入到计数器中的时钟脉冲间隔为64/(4×106Hz)=16μs,即定时器每16μs计数一次。如果需要定时1秒钟则共需要计数62500次,若计数器TPMxCNT从0x0000开始计数,那么模寄存器的值即为TPMxMODH:TPMxMODL=0xF423,计数器加1计数且的当数值到达0xF423时正好定时到1秒,如中断允许,则可在定时溢出中断中执行相关操作,如中断屏蔽,则可以软件查询TOF用来标识定时器计数器的溢出。

在使用时,当模寄存器的值为0x0000或0xFFFF时定时器处于自由运行状态。定时器从0x0000开始计数到0xFFFF后的下一计数时钟内溢出并复位计数器为0x0000。如果使用模寄存器,则可以通过模寄存器随时修改计数上限,得到不同时间的定时器溢出,所以合理选择时钟源、分频因子和设置模寄存器可以得到更加准确的溢出时间。

计数器操作有两种计数模式。当选择中心对齐PWM模式时,计数器会工作在增/减模式下操作,而在其他情况下计数器仅作加1计数器。作为单增计数器时,模块从0x0000处开始计数直到终点值,然后再从0x0000重新开始计数,此处的终点计数值是TPMxMODH:TPMxMODL设定的模数值或是未设定模计数器时的自由计数终值0xFFFF。定时器溢出标记TOF在定时器从终值转变为0x0000时置1。当计数器被指定为中心对齐PWM模式操作时,定时器计数器从0x0000处开始加1计数直到终点值后再减1计数到0x0000并且循环计数。在该模式下,定时器溢出标志TOF在终点计数周期结束时被置位,即当计数器技术到终值并开始向下递减计数时置1。

在任何时候计数器可通过写任意值到计数寄存器TPMxCNTH:TPMxCNTL中的任意一个来手动复位。用这种方式复位时,计数器将被清零,定时器从0x0000重新开始计数。(www.xing528.com)

2.时钟源选择

定时器状态和控制寄存器的CLKSB:CLKSA位可用来选择3个时钟源中的一个或禁止定时器模块,见表8-2。单片机在复位后CLKSB:CLKSA=00,没有时钟源被选择TPM处于低功耗状态。当操作这些控制位或禁止定时器时(写00到CLKSB:CLKSA)不影响计数器或其他定时器寄存器中的值。

总线速率时钟是单片机的主要系统总线时钟。该时钟源无须同步用于所有内部模块活动,包括CPU和总线操作。在不带PLL电路的单片机中或不使用PLL电路时,固定系统时钟源和和总线速率时钟源相同,不需要使用同步器。当使用PLL或者FLL电路时,在二分频时钟源和定时器计数器之间需要一个同步装置,以保证计数器转换和总线时钟转换相一致。

外部时钟可被连接到TPM通道的任意引脚,该时钟源通过一个同步装置来确保计数器转换和总线时钟转换能一致。该同步装置由总线速率时钟驱动,为了满足奈奎斯特定理(Nyquist)采集信号的要求,外部时钟源的频率不得高于总线速率时钟的四分之一,理想情况下外部时钟等于总线时钟的4分频。当外部时钟源复用TPM通道引脚时,该引脚不能被用于其他通道的定时功能。例如,当TPM通道0引脚被用作定时器外部时钟源时,不能再把它配置成输入捕捉通道,但该通道仍然能在输出比较模式中使用软件定时功能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈