2014-11-05 36 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