各位好。
參考CH32V307的RTThread 例程中發(fā)現,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();
}