AlexandrY (24.11.2006 18:42, просмотров: 1) ответил IV на знатокам связки арм7 и укоса посвящается
В uCOS все корректно, там искать нечего. То, что указатель стека надо смещать на несколько байт в зависимости от природы прерывания написано на первых же листах мануала по ARM7TDMI.
Природа spurior interrupts тоже хорошо описана.
Особенно в мануале по LPC контроллерам.
Кратко эффект в том, что прерывание возникает в течении прохождения по конвееру команды запрета прерываний. Фиксация прерывания происходит на одном этапе конвеера а выборка адреса из VIC на пару этапов позже, в течении которых прерывания могут быть запрещены выполняющейся командой. У VIC от этого едет крыша и он выдает дефолтный вектор по которому и передается управление.
Если дефолтный вектор установлен не корректно, то может быть все что угодно. Слышал что у некоторых бывает переход даже не по дефолтному вектору в LPC. В STR91x сам наблюдал такой же эффект хотя ядро там ARM9.
Ясно, что эффект очень редкий в правильно написанной программе. Если же прерывания валят без остановки, то тогда эти грабли и появляются во всей красе.