2013-06-12 4 views
0

В настоящее время я работаю с Cortex-M3, и у меня возникли проблемы с пониманием использования xPSR. Я не уверен, почему номер ISR хранится в младших 8 бит.Статус регистрации программы ARM

Источники в Интернете и таблицы данных не дают понять, почему номер должен храниться в xPSR. На ARM7-TDMI текущий режим (FIQ, IRQ, SVC, USR, ABT, UND) сохраняется в младших 8 бит CPSR. Я предполагаю, что он хранится там, поэтому, когда возникает исключение и режим переключается, процессор знает, какой банк регистров должен сохранить состояние CPSR. Однако Cortex-M3 не имеет банковских регистров, и xPSR сохраняется в стеке, когда требуется ISR для обслуживания.

Может ли кто-нибудь просветить меня?

+0

Где вы это видите? Я не вижу cpsr в armv7m, я вижу APSR и по отношению к исключениям xPSR помещается в стек, чтобы сохранить флаги запущенного кода, который был прерван (не редкость, что или программное обеспечение должно это сделать). –

+0

Извините, что в моем вопросе я неправильно назвал терминологию. Регистр статуса текущей программы присутствует в ARM7-TDMI и сохраняется в соответствующем регистре состояния сохраненной программы в зависимости от текущего режима работы. Однако мой вопрос заключается в том, почему на Cortex-M3 есть номер ISR, присутствующий в xPSR. – user2476983

ответ

1

Ну, я не совсем уверен, что я понимаю вопрос - вы спрашиваете: «Почему это иначе» или «в чем смысл»?

В первом случае ответ такой же, как и для «почему он не поддерживает набор инструкций ARM», «почему существуют только два режима выполнения», «почему таблица векторов огромна и содержит адреса, а не инструкции "и" почему есть только 2 возможных указателя стека ":" потому что ". Поскольку M-профиль имеет совершенно другую модель исключений. (И поскольку модель исключений различна, то, что было битами режима в CPSR, было свободно использовать для чего-то еще.)

Во втором случае ... ну, это зависит от разработчика, не так ли? ? Существует регистр, который содержит текущий активный идентификатор прерывания. Если это полезно для вас, используйте его. Вы можете (например) использовать его, чтобы иметь один адрес обработчика прерываний, хранящийся в нескольких местах в векторной таблице, а затем использовать идентификатор прерывания, чтобы определить, какое конкретное устройство инициировало прерывание.

Он также звучит удобно с точки зрения обработки повторных ошибок.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CHDBIBGJ.html

1

Является ли это то, что вы говорите?

The IPSR 
The processor writes to the IPSR on exception entry and exit. Software can use an MRS instruction, to read 
the IPSR, but the processor ignores writes to the IPSR by an MSR instruction. The IPSR Exception Number 
field is defined as follows: 
• in Thread mode, the value is 0 
• in Handler mode, holds the exception number of the currently-executing exception. 
An exception number indicates the currently executing exception and its entry vector, see Exception number 
definition on page B1-633 and The vector table on page B1-634. 
On reset, the processor is in Thread mode and the Exception Number field of the IPSR is cleared to 0. As a 
result, the value 1, the exception number for reset, is a transitory value, that software cannot see as a valid 
IPSR Exception Number. 

я хотел бы видеть, что как аналог CPSR в ARMV4/ARM7TDMI, поскольку это дает вам состояние, в котором вы выполняете. если вы выполняете исключение и если да, то какой. Вероятно, это имеет смысл для разработчиков чипов по тем же причинам, и именно там хранится эта информация или копия этой информации. Возможно, чтобы не вводить обработчик исключений, если он уже включен в этот режим исключения. Или, если второе исключение какого-то типа, скажем, префикс прервется при выполнении префикса, возможно, процессор зависает по назначению или выбирает другое исключение.

+0

Да, спасибо, это именно то, о чем я говорил. ISR-номер, очевидно, находится в IPSR по какой-то причине, но я точно не знаю, почему/что не будет работать без него. Ваши предложенные причины хороши, но я уверен, что для этого должна быть более четкая причина. – user2476983

+0

Может ли потребоваться препретация прерывания? I.e NVIC может прочитать, какой ISR (если какой-либо из них работает) и решить на основе определенных пользователем приоритетов, если прерывание должно быть предварительно упущено? – user2476983