【爱普特 APT32F110 ev board 试用测评】之二:测试系统延时函数

测试系统延时函数:

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精确延时

01.jpg

void udelay(uint32_t us)
{
    us /= 10U;
 
    while (us) {
        us--;
        _10udelay();
    }
}

uS级延时不精确,10US延时

02.jpg

1US 延时

03.jpg


最新文章