Отладка Cortex M3 (ARM) Embedded. Как узнать, какой ISR запускается из xPSR.ISR? - PullRequest
2 голосов
/ 08 июля 2010

Я отлаживаю часть прошивки на процессоре семейства arm (Cortex M3).

Отладчик показывает регистры процессора, включая регистр xPSR, который включает в себя подполе ISR. Режим в регистрах CPU - «Mode = Handler», что означает, что процессор m3 находится в обработчике прерываний вместо режима «thread». Это я знаю.

Я вижу значение для поля xPSR.ISR = 15 там. Я думаю, что это должно быть шестнадцатеричное 15 (21 декабря). И я предполагаю, что это прерывание "System Timer Tick 0B" при просмотре комментариев таблицы векторов ISR. На самом деле, теперь я предполагаю, что это 15 десятичных знаков, и это обработчик прерываний таймера SysTick, на который я смотрю. (Обратите внимание, что, поскольку код представляет собой случайный обработчик однострочного ассемблера ассемблера, где около 100 различных меток asm попадают в одном месте Трудно сказать по коду, кто вызвал ISR.)

Тем не менее, я довольно новичок в чипах Cortex M3, и мои знания ARM7TDMI настолько блеклые от того, что я их не использую, что не могу вспомнить. И я нигде не могу найти это в своих документах.

Может кто-нибудь сказать мне, как это выяснить?

1 Ответ

3 голосов
/ 08 июля 2010

Десятичное исключение № 15 - это системное прерывание на Cortex M3.

Техническое справочное руководство ARM Cortex M3 содержит таблицу (Таблица 5-1 - Типы исключений), в которой перечислены различные номера прерываний, используемые M3.

Exception type    Position       Priority       Description
--------------    ------------   --------       ------------------------------------
Reset               1             –3 (highest)  Invoked on power up and warm reset. On first instruction, 
                                                drops to lowest priority (Thread mode). This is asynchronous.
Non-maskable Int    2             –2            Cannot be stopped or pre-empted by any exception but reset. 
                                                This is asynchronous.
Hard Fault          3             –1            All classes of Fault, when the fault cannot activate because of 
                                                priority or the Configurable Fault handler has been disabled. 
                                                This is synchronous.
Memory Management   4             Configurable  Memory Protection Unit (MPU) mismatch, including access 
                                                violation and no match. This is synchronous. This is used 
                                                even if the MPU is disabled or not present, to support the 
                                                Executable Never (XN) regions of the default memory map.
Bus Fault           5             Configurable  Pre-fetch fault, memory access fault, and other 
                                                address/memory related. This is synchronous when precise 
                                                and asynchronous when imprecise.
Usage Fault         6             Configurable  Usage fault, such as Undefined instruction executed or illegal 
                                                state transition attempt. This is synchronous.
  -                 7-10            -           Reserved
SVCall              11            Configurable  System service call with SVC instruction. This is 
                                                synchronous.
Debug Monitor       12            Configurable  Debug monitor, when not halting. This is synchronous, but 
                                                only active when enabled. It does not activate if lower priority 
                                                than the current activation.
  -                 13              -           Reserved
PendSV              14            Configurable  Pendable request for system service. This is asynchronous 
                                                and only pended by software.
SysTick             15            Configurable  System tick timer has fired. This is asynchronous.

External Interrupt  16 and above  Configurable  Asserted from outside the core, INTISR[239:0], and fed 
                                                through the NVIC (prioritized). These are all asynchronous.
...