2014-11-05 80 views
0

我正在使用以下CPU:Stellaris LM4F120H5QR微控制器。这个CPU包含一个MPU,我想要这个东西。但是在非特权模式下,许多寄存器不再可访问,我似乎无法找到指示系统处于中断内的寄存器,并且可以从非特权模式读取。ARM Cortex M4:如果内部中断,则从无引脚模式进行测试

我需要这个,因为有代码可能会采取从中断调用时不同的路线。如果我从非特权模式执行错误检查,则系统将立即跳转到访问错误。

那么,如何检查一个函数是否被中断调用,从非特权模式调用时不会产生错误?

回答

0

根据ARM's documentationCONTROLISR寄存器可能正是你所需要的。

因此,使用CMSIS原型,代码可能看起来像:

if (__get_IPSR() || !(__get_CONTROL() & 0x1)) 
{ 
    /* Privilged code */ 
} 
else 
{ 
    /* Unprivileged code */ 
} 

据我所知,读那些应该被允许甚至一个用户线程。

+0

根据该页面,两个寄存器只能在特权模式下访问。还是我误读? – Cheiron 2014-11-05 20:15:17

+0

ARM手册确实将这些寄存器指示为特权,但至少从CONTROL读取应该也可以在非特权模式下使用。在“Cortex M3权威指南”一书中有一个示例,其中此代码在用户线程上下文中使用。 – mash5 2014-11-10 09:52:33