2014-11-05 4 views
0

Я работаю со следующим процессором: микроконтроллером Stellaris LM4F120H5QR. Этот процессор содержит MPU, и я хочу сделать это. Но многие регистры больше не доступны, когда они находятся внутри нерентифицируемого режима, и я не могу найти регистр, который указывает, что система находится внутри прерывания и читается из нерентифицируемого режима.ARM Cortex M4: тест из неискреннего режима, если внутри прерывания

Мне нужно это, потому что при вызове из прерывания может возникнуть другой код. Если я сделаю неправильную проверку из непривилегированного режима, система немедленно перейдет к ошибке доступа.

Как я могу проверить, вызвана ли функция из прерывания способом, который не будет создавать ошибку при вызове из непривилегированного режима?

ответ

0

Согласно ARM's documentation, регистры CONTROL и ISR могут быть только то, что вам нужно.

Таким образом, используя прототипы CMSIS, код может выглядеть следующим образом:

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

Насколько я знаю, чтение тех, должно быть разрешено даже в пользовательской нити.

+0

Согласно этой странице, оба регистра могут иметь доступ только в привилегированном режиме. Или я неправильно понял? – Cheiron

+0

Руководство ARM действительно указывает эти регистры как привилегированные, но чтение из CONTROL, по крайней мере, должно быть также доступно в непривилегированном режиме. В книге «Окончательное руководство к Cortex M3» есть образец, где этот код используется в контексте пользовательского потока. – mash5

Смежные вопросы