32位滴答定时器的使用
1、SysTick滴答定时器的用途
A)裸机程序中可作为独立的延时定时器。
B)产生操作系统的时钟节拍。
C)便于不同处理器之间程序移植
SysTick定时器被捆绑在NVIC中,异常号15
D)作为一个闹铃测量时间用于测量时间,
但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。
2、配置嘀嗒定时器
我们定义的48000的装填值,
SysTick_config(48000);
嘀嗒定时器是24位,所以先判断给的装填值是否超过24位(0xFFFFFF)。
3、SysTick寄存器
我们来了解SysTick的实现,其需要4个寄存器。
SysTick->CSR 控制和状态寄存器
SysTick->RVR 重装载寄存器
SysTick->VAL 当前值寄存器
SysTick->CALIB 校准值寄存器
嘀嗒定时器的系统框图:
4、对滴答定时器的配置
SysTick异常配置步骤
1对CTRL//LOAD/VAL三个寄存器进行了配置,
2初始化SysTick使用的时钟,
3清除系统当前值,装入重装值,
4使能SysTick,使SysTick能响应中断
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
/*****************装填值是否超过最大值*******************/
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
/*****************为什减1,芯片手册给的实例,因为减到0***************/
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | //控制和状态
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
#define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */