首页 理论教育 定时器操作:如何设置计时器?

定时器操作:如何设置计时器?

时间:2023-06-26 理论教育 版权反馈
【摘要】:当T2CNF.RUN设置为1时,定时器将启动。关于同步启动和停止的描述见7.3.4节。2)正计数定时器2是一个16位定时器,在每个时钟周期递增。当一个定时器正在运行,一个定时器的delta值被写入复用寄存器T2Ml:T2M0,且寄存器T2MSEL.T2MSEL设置为000,这时16位定时器在它的当前计数值处停止计数,一个delta计数器开始计数。一旦delta计数器达到0,16位定时器重新开始计数。当捕获事件发生时,当前定时器内的数值就被送到捕获寄存器中。

定时器操作:如何设置计时器?

1)概述

定时器停止时,复位后它将进入定时器IDLE(空闲)模式。当T2CNF.RUN设置为1时,定时器将启动。然后定时器将进入定时器RUN(运行)模式,此时定时器要么立即工作,要么同步于32kHz时钟。关于同步启动和停止的描述见7.3.4节。

一旦定时器运行在RUN模式,可通过向T2CNF.RUN写入0来停止正在运行的定时器。然后定时器将进入IDLE模式,停止的定时器要么立即停止工作,要么同步于32kHz时钟。

2)正计数

定时器2是一个16位定时器,在每个时钟周期递增。计数器值可从寄存器T2Ml:T2M0中读取,寄存器T2MSEL.T2MSEL设置为000。注意:读T2M0寄存器时寄存器T2Ml的内容是锁定的,这意味着必须先读T2M0。

当定时器处于空闲模式时,计数器值可以通过写寄存器T2Ml:T2M0未修改,寄存器T2MSEL.T2MSEL设置为000。必须先写T2M0。

3)定时器溢出

当定时器的计数器值等于设置的定时器周期值时,定时器溢出。当发生定时器溢出时,定时器的计数器值被设置为0x000。如果溢出中断屏蔽位T2IRQM.TIMER2-PERM是1,将产生一个中断请求。不管中断屏蔽位是什么值,此时中断标志位T2IRQF.TIMER2-PERF都将设置为1。

4)定时器的delta递增

定时器周期可以在一个定时周期里通过写定时器的delta值进行调整。当一个定时器正在运行,一个定时器的delta值被写入复用寄存器T2Ml:T2M0,且寄存器T2MSEL.T2MSEL设置为000,这时16位定时器在它的当前计数值处停止计数,一个delta计数器开始计数。T2M0寄存器必须在T2Ml之前被写入。delta计数器从写入的delta值起开始倒计数,直到0为止。一旦delta计数器达到0,16位定时器重新开始计数。

delta计数器倒计数的速率与定时器的速率等同。当delta计数器倒计数至0时,就不再倒计数了,除非delta值再一次被写入。用这种方法,可以通过delta的值增加定时器周期,从而调整定时器的溢出值。

5)定时器比较

当定时器的计数值等于设置的16位比较值之一时,就发生了定时器比较。当发生定时器比较时,根据达到哪个比较值,中断标志位T2IRQF.TIMER2-COMPARE1F或T2IRQF.TIMER2-COMPARE2F置1。如果此时相应的中断屏蔽位T2IRQM.TIMER2-COMPARE1M或T2IRQM.TIMER2-COMPARE2M置1,还将产生一个中断请求。

6)溢出计数(www.xing528.com)

每当计数器溢出时,24位的溢出计数器加1。溢出计数器的值可以从寄存器T2MOVF2:T2MOVF1:T2MOVF0中读出。寄存器T2MSEL.T2MOVEFSEL设置为000。该寄存器的锁定如下:

(1)如果想要一个唯一的时间戳,即定时器和溢出计数器都在同一时间锁定,可读T2M0,T2MSEL.T2MSEL设置为000,T2CTRL.LATCH-MODE设置为1。这时返回定时器值的低字节,并锁定定时器的高字节和整个溢出计数器,这样时间戳的其余部分准备好被读取。

(2)如果只想要读溢出计数器,则不要首先读定时器,读T2MOVF0,T2MSEL.T2MOVFSEL设置为000,T2CTRL.LATCH-MODE设置为1。这时返回溢出计数器的低字节,并锁定溢出计数器的两个最高位字节,这样值准备好被读取。

7)溢出计数更新

溢出计数器的值可以通过写入寄存器T2MOVF2:T2MOVF1:T2MOVF0得到更新,T2MSEL.T2MOVFSEL设置为000。总是先写最低位字节,然后写其他三个字节。一旦写高字节,写入就生效。

8)溢出计数器溢出

当溢出计数器的值等于设置的溢出周期,就发生一个溢出周期事件。当发生该周期事件,溢出计数器设置为0x000000。如果溢出中断屏蔽位T2IRQM.TIMER2-OVF-PERM是1,将产生一个中断请求。中断标志位T2IRQF.TIMER2-OVF-PERF设置为1,不管中断屏蔽的值是什么。

9)溢出计数器比较

可以为溢出计数器设置两个比较值。通过写入寄存器T2MOVF2:T2MOVF1:T2MOVF0,寄存器T2MSEL.T2MOVFSEL设置为011或100,可以设置比较值。当溢出计数器的值等于溢出计数器的比较值之一时,发生溢出计数器比较事件。如果此时相应的溢出比较中断屏蔽位T2IRQM.T1MER2-OVF-COMPARE1M或T2IRQM.T1MER211-OVF-COMPARE2M是1,就立刻产生一个中断请求。不管中断屏蔽值是什么,中断标志位T2IRQF.TIMER2-OVF-COMPARE1F和T2IRQF.TIMER2-OVFCOMPARE2F置1。

10)捕获输入

定时器2具有定时器捕获功能,它在无线模块的帧起始定界符(SFD)的状态变更时捕获。

当捕获事件发生时,当前定时器内的数值就被送到捕获寄存器中。如果寄存器T2MSEL.T2MSEL设置为001,捕获值可以从寄存器T2M1:T2M0中读出。溢出计数值也可以在捕获事件发生时捕获,如果T2MSEL.T2MOVFSEL设置为001,可以从寄存器T2MOVF2:T2MOVF1:T2MOVF0中读出。

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

我要反馈