最近在工作中遇到了一个奇怪的事情,就是使用TSCH/TSCL拼接出来的64bit的时钟计数在计算超时的过程中会有异常,
改成只读取TSCL 32bit就能暂时规避这个问题。
为了查看这个查找这个问题的根因,还特意搭建了测试工程,但是没能复现。
然后就是查资料,发现有一个声明很有意思。
“When reading the full 64bit value,it must be ensured that no interrupts are serviced between the tow MVC instruction if an ISR is allowed to make use of the timestamp counter.There is no way for an ISR to restore the previous value of TSCH(snapshot) it it reads TSCL,since a new snapshot is performed”.
----《TMS320C66X DSP CPU and Instruction Set》
在测试工程中加入中断,发现记录的64bit的数据异常,所以获取64bit的时戳需要中断保护。
TI的手册中有两个例子,这里只列了一个,又兴趣的可以查看上面的文献
BNOP TSC_Read_Done,3
MVC TSCL,A0
MVC TSCL,A1
TSC_Read_Done: