大家好,我在读取Cortex-A7 Timer的Physical Counter Register(CNTPCT)时遇到一个问题。 根据手册这个寄存器是通过CP15进行访问的,CRm=14,op1=0,长度是64bit。
我的代码是 mcrr p15, 0, r0, r1, c14。然而在执行时却被当作了Undefined Instruction。 在手册里的确提到了Undefined Instruction是MCRR可能的一种结果,但没有具体解释。
根据手册,在访问这个寄存器之前,已经在monitor/nonscure mode中在CNTHCTL.PL1PCEN和PL1PCTEN写了1。CNTPCT访问那条是在Supervisor/nonscure mode. 这句分别编译成THUMB和ARM都试了。
希望大神指点一二。谢谢!
你好,CNTPCT是一个只读寄存器所以不能用MCRR(写操作)而是应该用MRRC(读操作)来访问。
如果在Supervisor/Nonsecure mode, 只需要把 CNTHCTL.PL1PCTEN 设成1应该就可以读CNTPCT了。
原来是这么低级的错误,非常感谢!