MSP430 Timer_A 计数模式(原创)
0赞
初接触定时器的时候可能会有些糊涂,因为定时器A由三个模块组成,而使用也是三个模块相互协调来完成的。当一开始的时候就把它们混在一起,理解起来会有点障碍。我可人认为是需要对每个模块进行单体认识,然后遇到实际问题时候,根据问题的需要来选择、组合每个模块的工作方式,达到一个比较理想的效果,当然实现同一个问题的方式不是唯一的。
上图贴出了定时器A的计数模块,定时器A时钟源的选择、分频,计数器的模式、控制寄存器、中断、输出,应该就这么些部分。
定时器的时钟源可以是内部时钟源ACLK,SMCLK,或者是外部的时钟源TACLK,INCLK。时钟源的选择由TASSELx位来决定,选择的时钟信号可以通过IDx位进行1、2、4、8分频,当TACLK置位时,分频器也随之复位。
定时器的启动有两种方式。一种是在时钟源处于活动状态时,定时器模式选为非停止模式(单增模式、连续模式、增减模式)中的一种时,定时器将会启动;另一种是当定时器模式是单增模式或者是增减模式的时候,我们可以通过想寄存器TACCRO中写入0来停止定时器计数。然后我们也可以通过向其写入非零值来重新开启计数器。在这种情况下,定时器是从0开始进行重新增计数的。
定时器计数模式
停止模式:用于定时器暂停,但并不发生复位,所有寄存器现存的内容在停止模式结束后都可以再使用。也就是说定时器暂停后重新计数时,定时器将从暂停时的值开始以暂停前的计数方向计数。
单增模式:单增模式用于计数周期不是0FFFFH的情况。定时器将反复的计数到比较寄存器TACCR0中存储的值,这个值就决定了定时器的周期。单增模式下定时器周期为TACCR0+1,当定时器的计数值等于TACCR0的值时,定时器将从0开始重新计数。如果在定时器的值大于TACCR0的时候,选择增计数模式,那么定时器将立即从0开始重新计数。
上图为单增计数模式下的图示,当定时器计数到TACCR0的值的时候,中断标志位CCIFG将会置位,而当定时器由TACCR0返回0时,TAIFG中断表示位将置位。
我们可能在定时器运行的时候要修改定时器的周期,那么对于增计数模式而言,如果新的周期大于等于原来的计数周期值,或者大于当前的定时器计数值,那么定时器将会立即开始执行新的周期计数。如果新周期小于当前的计数值,那么定时器会从0 开始重新以新的周期开始计数,但是在回到0之前会多一个额外的计数。
连续模式:连续模式和增计数模式相似,只是定时器是重复计数到0FFFFH。连续计数模式可以用于产生一个统一的时间间隔和输出频率。
增减模式:增减模式的定时周期不是0FFFFH并且需要产生对称的脉冲时使用。在此模式下,定时器先增计数到TACCR0,然后再从TACCR0减计数到0,周期是TACCR0值的两倍。
在增减计数模式下,CCIFG中断标志和TAIFG中断标志在一个周期内只置位一次,由1/2定时器周期隔开。当定时器计数值由TACCR0-1变到TACCR0时候,CCIFG置位;而定时器完成减计数从0001h到0000h时,TAIFG置位。
在增减模式下要改变TACCR0周期寄存器的值状况比较多。前提都是在定时器运行的状态下,如果是在减计数的情况下,那么定时器会继续减到0,然后开始新的计数周期;如果正处于增计数状态下,新的周期大于原来的周期,或者要比当期计数值要打时,定时器将马上执行新的计数周期,否则定时器立刻进行减计数,但是,定时器在开始减计数前会多记一个数。