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 级别的延时只能自己用延时或者空指令来调整实现, 这个需要咋实现啊, 优点不理解