利用Cortex-M中的DWT实现高精度计时
DWT:引用《一个超级实用的单片机调试组件》
在Cortex-M里面有一个外设叫DWT(Data Watchpoint and Trace),是用于系统调试及跟踪。
它有一个32位的寄存器叫CYCCNT,它是一个向上的计数器,记录的是内核时钟运行的个数,内核时钟跳动一次,该计数器就加1,精度非常高,如果内核时钟是72M,那精度就是1/72M = 14ns,而程序的运行时间都是微秒级别的,所以14ns的精度是远远够的。
最长能记录的时间为:59.65s。计算方法为2的32次方/72000000。
想要使用DWT的CYCCNT步骤:
-
先使能DWT外设,这个由另外内核调试寄存器DEMCR的位24控制,写1使能
-
使能CYCCNT寄存器之前,先清0。
-
使能CYCCNT寄存器,这个由DWT的CYCCNTENA 控制,也就是DWT控制寄存器的位0控制,写1使能