大家好,最近我在AArch32的Non-secure EL1下使用PMU的overflow功能,在溢出中断中读取PMOVSR和PMOVSSET的值时得到的值为0,这样的话我就不能确定是哪个事件计数器触发的中断。大家有碰到这样的情况吗?怎么解决的?(ps:可以确定的是对这两个寄存器的写入是有效的。)
抱歉,查到原因了。是我的疏忽,我读取PMOVSSET的指令是:asm(" MRC p15,0,%0,c9,c14,3 " ::"r"(gudPMOVSSET));
因为查看手册,这个寄存器肯定是可以读写访问的。今天特地看了一下asm(" MRC p15,0,%0,c9,c14,3 " ::"r"(gudPMOVSSET))的反汇编,反汇编如下:
MOV r3,#0x1398MOVT r3,#0x700LDR r3,[r3,#0]MRC p15,#0x0,r3,c9,c14,#3
也是醉了!
正确的写法应该是:asm(" MRC p15,0,%0,c9,c14,3 " :"=r"(gudPMOVSSET))
测试确认对上述寄存器的读写访问没有问题。
Glad to see that!