测试系统延时函数:
static void _500usdelay(void) { uint32_t start = csi_coret_get_value(); uint32_t load = csi_coret_get_load(); uint32_t cur; uint32_t cnt = (soc_get_coret_freq() / 1000U / 2U) - 91; while (1) { cur = csi_coret_get_value(); if (start > cur) { if ((start - cur) >= cnt) { break; } } else { if (((load - cur) + start) > cnt) { break; } } } } /** \brief delay * * \param[in] ms: delay timer,unit: ms * \return none */ __WEAK void mdelay(uint32_t ms) { while (ms) { ms--; _500usdelay(); _500usdelay(); } }
mdelay()毫秒级别延时函数,有两个500US延时函数组成,这个是精确地。
主函数测试:
int main() { //start_system(); system_init(); board_init(); csi_pin_set_mux(PB02, PB02_OUTPUT); //PA06 output csi_pin_set_high(PB02); //PA06 output high; //my_printf("Hello World~~~~~~~\n"); //print message //user_demo(); //demo while(1) { mdelay(1); //delay 100ms csi_pin_toggle(PB02); //PA06 toggle } return 0; }
1 MS精确延时
void udelay(uint32_t us) { us /= 10U; while (us) { us--; _10udelay(); } }
uS级延时不精确,10US延时
1US 延时