时钟始终是数字系统的心脏,而操作系统的心脏system tick(也称系统滴答)则是由承载它的硬件(CPU)提供。通常system tick“跳动”比系统硬件的时钟“跳动”要慢得多,硬件时钟可以是几MHz,几十MHz,几百MHz,甚至上GHz。而systick仅仅是两到三位数的量级。另外硬件的时钟是物理上的电信号,而systick则是系统的逻辑信号,前者用硬件实现,后者则由CPU的逻辑产生。
STM32为支持操作系统所特有的systick中断功能,为操作系统在STM32上的移植铺平了道路。systick是STM32的核cortexM3所拥有的。对其操作只要通过它的4个寄存器组(图1)来进行就行了。
图1、CortexM3 systick 寄存器组(选自The.Definitive.Guide.to.the.ARM.Cortex.M3)。
systickCSR 控制及状态寄存器
systickRVR 重载计数值寄存器
systickCVR 当前计数值寄存器
systickCALVR 校准寄存器
关于寄存器的功能和位作用参看The.Definitive.Guide.to.the.ARM.Cortex.M3一书,第13章。
systickCSR 中有三个控制位bit0使能sysTick计数器,bit1使能systick中断,bit2为sysTick计数器的输入源选择位。
systick定时器实际上就是个倒数计数器,倒数计数所选的输入时钟,每次都从预置值开始倒数计数,一直计数到0,如果此时systick中断使能位置位了的话就会产生一个systick的系统中断,程序自动跳转到SysTickHandler处执行,你在SysTickHandler内实现操作系统所需的时间片调度函数(对于uCOS则可直接调用OSTimeTick()函数)。
使用ST的函数库使用systick的方法
1、调用SysTick_CounterCmd() 失能SysTick计数器
调用SysTick_ITConfig () 失能SysTick中断
2、调用SysTick_CLKSourceConfig() 设置SysTick时钟源。
3、调用SysTick_SetReload() 设置SysTick重装载值。
4、调用SysTick_ITConfig () 使能SysTick中断
5、调用SysTick_CounterCmd() 开启SysTick计数器
用户432338 2013-5-8 15:22