ch58x/ch59x systick使用
SysTick是一个定时器,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称嘀嗒中断)。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。SysTick是基于32M高频晶振工作,所以32M不停止,则嘀嗒定时器一直存在。(睡眠模式下32M是停止的,所以这时候嘀嗒定时器是不能使用的)
CH592的嘀嗒定时器是内核自带的64位计数器。
设置好嘀嗒时间后,计数满会进入到中断并需要手动清除标志。
SysTick参考示例代码:
#include "CH58x_common.h" void DebugInit(void){ GPIOA_SetBits(GPIO_Pin_9); GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); UART1_DefInit(); } int main(){ SetSysClock(CLK_SOURCE_PLL_60MHz); DebugInit(); /* 配置串口调试 */ PRINT("Start @ChipID=%02X\n", R8_CHIP_ID); SysTick_Config(FREQ_SYS); //设置为60M,则1s进一次中断。设置为FREQ_SYS/1000,则1ms进入一次中断。 while(1){ PRINT("SYS_GetSysTickCnt = %d\r\n", SYS_GetSysTickCnt()); //获取计数时间,计数满会进入中断并清0。 } } __INTERRUPT __HIGH_CODE void SysTick_Handler() /***嘀嗒定时器中断函数***/ { SysTick->SR = 0; //清除中断标志 }
浙公网安备 33010602011771号