我正在使用以下 CPU:Stellaris LM4F120H5QR 微控制器。这个 CPU 包含一个 MPU,我想利用这个东西。但是在非特权模式下,许多寄存器不再可访问,而且我似乎找不到指示系统处于中断内并且可以从非特权模式读取的寄存器。
我需要这个,因为当从中断调用时,有些代码可能会采用不同的路径。如果我在非特权模式下进行错误检查,系统将立即跳转到访问故障。
那么如何检查一个函数是否从中断中调用,并且在非特权模式下调用时不会产生错误呢?
根据ARM 的文档,CONTROL
andISR
寄存器可能正是您所需要的。
因此,使用 CMSIS 原型,代码可能如下所示:
if (__get_IPSR() || !(__get_CONTROL() & 0x1))
{
/* Privilged code */
}
else
{
/* Unprivileged code */
}
据我所知,即使是用户线程也应该允许阅读这些内容。