绝对精确做不到,比较精确还是可以的,首先,中断的触发模式是“异步”的话,没法精确确定该中断的起始时间,要改为使用“同步”模式的中断,而 cortex-m 的同步中断只有一个,就是 svc。
然后要使用一个测量的硬件timer,在保证精度的前提下,使用 systick 或者外设定时器都可以。
具体步骤:
1、启动 timer。
2、读取并记下 timer 当前值
3、触发同步中断
4、再次读取并记下 timer 当前值(此时中断已返回)
两次 timer 的数值相减,就是中断触发直到返回所需的时间。不是绝对精确之处在于: “读取和记录 timer” 的这个操作最少需要 2 条 CPU 指令,还有用于触发中断的指令 svc 一条,总共 5 条指令,花费大概 10 周期左右。相比整个中断过程的时间,这个开销应该可以忽略了。 |