snifer

[原创]Cortex-M3 系统定时器(SysTick)的应用

0
阅读(4482)

Cortex-M3 包含一个集成的系统定时器SysTick。SysTick 提供了一种简单的、24位写清零、递减的、到零重装的计数器,该计数器带有灵活的控制机制。

–功能描述定时器包括以下3个寄存器:
•控制和状态计数器用来配置其时钟、使能计数器、使能SysTick中断以及确定计数器状态。
•计数器的重装值,用来提供计数器的重装值。
•计数器的当前值。
计数方式:
当使能时,定时器从重装值开始往下计数一直到0,然后在下一时钟沿重新载入SysTick 重装值寄存器中的值,接着又在下一时钟开始递减计数。向重装值寄存器写入0会在下次重装时禁止计数器。当计数器到达0时,COUNTFLAG 状态位置位。COUNTFLAG 位在读操作时清零。
如果内核处于调试状态(中止),那么计数值将不会递减。
定时器是根据参考时钟来计时的。参考时钟可以是内核时钟或外部时钟源。
•SysTick 控制和状态寄存器
使用SysTick 控制和状态寄存器来使能SysTick 特性。复位是0x0000.0000。
–COUNTFLAG
如果上次读取计数器计数值为0,则返回1。通过应用进行读操作时清零。如果调试器使用DAP读取,那么只要AHB-AP控制寄存器中的MasterType位被设为0,该位就会在只读操作时清零。否则,COUNTFLAG位不会因为调试器的读操作而改变。
–CLKSOURCE
0 = 外部参考时钟(Stellaris微控制器没有执行。)
1 = 内核时钟。
如果没有提供参考时钟,那么CLKSOURCE会保持为1,并且提供和内核时钟一样的时间。内核时钟必须至少是参考时钟的2.5倍。如果不是这样,那么计数值将不可预知。
–TICKINT
1 = 计数到0会挂起SysTick处理程序。
0 = 计数到0不会挂起SysTick处理程序。
–ENABLE
1 = 计数器在多次触发(multi-shot)方式下操作。也就是说,计数器装载重装值,然后递减计数。当计数到0时,它将COUNTFLAG置位,并且可以根据TICKINT的值来选择是否将SysTick处理程序挂起。然后又重新装载重装值并开始计数。
0 = 计数器被禁能。
•SysTick 重装值寄存器
SysTick 重装值寄存器用于指定当计数器计数到达0时装入当前值寄存器的起始值。它可以是1到0x00FF.FFFF之间的任意值。
作为多次触发(multi-shot)定时器,它每N+1个时钟脉冲就会触发。如果在每个节拍中断时写入新值,那么它就被当作单次触发,这样就必须写入实际的递减值。
•SysTick 当前值寄存器
使用SysTick 当前值寄存器来查找该寄存器的当前值。
该寄存器是写清零。向该寄存器写入任意值都会将寄存器清零。清零该寄存器也会将SysTick控制和状态寄存器的COUNTFLAG位清零。

系统定时器在嵌入式中的应用非常广泛,今天在此写下来,与大家共勉。

Baidu
map