MCU 主頻設置到240Mhz, 啟用定時器,設置1us定時間隔(實際需要到100ns級別),控制IO口,測量輸出信號周期,方波信號周期為20us,離實際想要的精度差很多,請問怎麼設置,才能到1us級別
不建議設置定於5us的定時值,中斷的跳轉以及中斷函數的執行,本身也會占用時間,會導致結果和預期不符。ns級別的延時只能自己用延時或者空指令來調整實現。另外IO控制如果直接調用GPIO的接口也會導致延時增大,接口本身執行都已經超過延時時間了,可以考慮直接操作寄存器地址來控制IO
。
GPIO翻轉慢問題,封裝一個函數,通過bitband直接操作寄存器。
static void user_bitband_write(enum tls_io_name io, u8 val)
{
if(io > WM_IO_PA_15){
tls_bitband_write(HR_GPIOB_DATA, io - 16, val);
}
else{
tls_bitband_write(HR_GPIOA_DATA, io, val);
}
}
ns延時問題,通過NOP指令,讓CPU死等。
static void delay_ns(void)
{
uint32_t i;
for (i = 0; i < 13; i++)
{
__NOP();
}
}
ns級別的延時只能自己用延時或者空指令來調整實現,這個需要咋實現啊,優點不理解