PMU使用问题

大家好,最近我在AArch32的Non-secure EL1下使用PMU的overflow功能,在溢出中断中读取PMOVSR和PMOVSSET的值时得到的值为0,这样的话我就不能确定是哪个事件计数器触发的中断。大家有碰到这样的情况吗?怎么解决的?(ps:可以确定的是对这两个寄存器的写入是有效的。)

Parents
  • 抱歉,查到原因了。是我的疏忽,我读取PMOVSSET的指令是:asm(" MRC p15,0,%0,c9,c14,3  " ::"r"(gudPMOVSSET));

    因为查看手册,这个寄存器肯定是可以读写访问的。今天特地看了一下asm(" MRC p15,0,%0,c9,c14,3  " ::"r"(gudPMOVSSET))的反汇编,反汇编如下:

    MOV r3,#0x1398
    MOVT r3,#0x700
    LDR r3,[r3,#0]
    MRC p15,#0x0,r3,c9,c14,#3

    也是醉了!

    正确的写法应该是:asm(" MRC p15,0,%0,c9,c14,3  " :"=r"(gudPMOVSSET))

    测试确认对上述寄存器的读写访问没有问题。

Reply Children
No Data