测试系统延时函数:
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 延时
