/*
Function name:SysTick_Init
Description:systick初始化函数
param:None
retval:None
Remarks:
时钟-->内核时钟 168MHz
*/
void SysTick_Init(void)
{
if(SysTick_Config(168000))//形参-->重装载值 1ms触发一次中断
{
while(1);
}
}
u32 timeout=0;
u32 Time_slice1[2]={0,1000};
u32 Time_slice2[2]={0,2000};
void SysTick_Handler(void)//中断服务函数
{
timeout++;
Time_slice1[0]++;
Time_slice2[0]++;
}
/*
Function name:Sys_Nvic_Delayms
Description:ms延时函数
param: 延时时长
retval:None
Remarks:
*/
void Sys_Nvic_Delayms(u32 mstime)
{
u32 temp=0;
temp=timeout;
while(timeout-temp<mstime);
}
SysTick_Config
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL); /* Reload value impossible */
}
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */
}
时间片:可以分别中断,互不干扰
while(1)
{
if(Time_slice1[0]>Time_slice1[1])
{
printf("1s\r\n");
Time_slice1[0]=0;
}
if(Time_slice2[0]>Time_slice2[1])
{
printf("2s\r\n");
Time_slice2[0]=0;
}
}