各位好。
参考CH32V307的RTThread 例程中发现,WCH提供的Delay_Us函数,对SysTick进行了操作;而RT Thread中也对systick进行了操作。
在线程中使用了Delay_Us函数的时候可能会一直没有返回。请确认下,谢谢。
void Delay_Us(uint32_t n)
{
uint32_t i;
SysTick->SR &= ~(1 << 0);
i = (uint32_t)n * p_us;
SysTick->CMP = i;
SysTick->CTLR |= (1 << 4);
SysTick->CTLR |= (1 << 5) | (1 << 0);
while((SysTick->SR & (1 << 0)) != (1 << 0))
;
SysTick->CTLR &= ~(1 << 0);
}
void SysTick_Handler(void)
{
GET_INT_SP();
/* enter interrupt */
rt_interrupt_enter();
SysTick->SR=0;
rt_tick_increase();
/* leave interrupt */
rt_interrupt_leave();
FREE_INT_SP();
}