参考资料《ARM Cortex-M0权威指南》
SysTick为24位的定时器,并且向下计数。
定时器的计数减至0后,就会重新装载一个可编程的数值,并且同时产生SysTick异常(异常编号为15)
只要不把它在 SysTick控制及状态寄存器中的使能位清除,就永不停息。
SysTick由四个寄存器控制
校准寄存器
在cmsdk_mcu_stclkctrl.v中即CM0内核中有如下定义
再来看看顶层
可以看到输入的时钟为FCLK自由运行时钟
SKEW 没有用到 这与MCU的设计有关
本次设计我们将系统时钟作为FCLK和HCLK
当前值寄存器
重装载值寄存器
控制和状态寄存器
实例
再来看看实例——延时中断
void delay(uint32_t time)
{
Set_SysTick_CTRL(0); //复位
Set_SysTick_LOAD(time); //需要等待的时间
Set_SysTick_VALUE(0); //当前值清零
Set_SysTick_CTRL(0x7); //0111 内核时钟/中断使能/定时器使能
__WFI(); //进入休眠,并且在发生中断时被唤醒
}
进入中断
中断函数
void SysTickHandler(void) {
Set_SysTick_CTRL(0); //复位
SCB->ICSR = SCB->ICSR | (1 << 25); //清除挂起状态
}
使用注意点
24位寄存器
就是说最大值为16,777,216