Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ARM7 вопрос
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
emerg_reanimator
Добрый день

Подскажите при каких условиях ЦПУ попдает в этот режим? Углубление в описание на архитектуру (DDI0210B ARM7TDMI Rev.4) ясности не прибавило.
d__
как правило ЦПУ состоит из ядра(в данном случае это arm7tdmi) и обвязки (генераторы чип селектов внешней памяти, менеджеры памяти и периферии). Ну так вот, когда обвязка определяет, что ядро планирует цикл обмена по адресу памяти, который данная обвязка не поддерживает иди адрес попадает в "запрещенный" регион(это решение принимает как правило MMU)обвязка генерирует сигнал abort для ядра. Вот цитата из пдф-ки от AT91M40XXX:
Abort Control The abort signal providing a Data Abort or a Prefetch Abort exception to the ARM7TDMI
is asserted in the following cases:
• When accessing an undefined address in the EBI address space
• When writing to a write-protected internal memory area on the AT91R40807
Здесь четко определены два случая при каких может возникнуть аборт:
1. Когда доступ происходит по неизвесному для EBI (обвязка) адресным пространствам.
2. Когда запись происходит в защищенный от записи регион AT91R40807...
emerg_reanimator
Точно!

Вспомнил. В описании на LPC2124 тоже указывается в каких ситуациях ЦПУ попадает в это исключения.

Но вопрос возник по другому поводу.

На Olimex LPC E2124 происходит ошибочное измениение указателя стэка.
Код
...
OSStartHighRdy  

       MSR     CPSR_cxsf,#0xDF        ; Switch to SYS mode with IRQ and FIQ disabled
       
       BL      OSTaskSwHook           ; OSTaskSwHook();
...


После выполнения инструкции загрузки CPSR происходит обновление R14(SP). В стэк записывается значение адресса который указывает на несуществующую область памяти. И в итоге я попдаю в исключение по данным.

Такая ситуация происходит когда ЦПУ не нагрелся до рабочей температуры smile.gif
d__
Наверняка имеет место недопонимание некоторых особенностей архитектуры платформы ARM. Всегда необходимо помнить что для каждого режима работы процессора необходимо проинициализировать отдельную область стека и КАЖДЫЙ указатель стека, а они разные для каждого режима работы. Если этого не выполнить, тогда и появляются вышеописанные глюки...
emerg_reanimator
Именно так уважаемый d__

Не инициализировался стэк в режиме System. После добавления инициализации ситуация исчезла.

Но обнаружилась другая фича. Под IAR 3.21a на Olimex LPC E2124 пытается крутится uCOS-II 2.76 + uCOS-View 1.10. Помаргивает диодами до момента пока я не открываю в отладчике C-spy окошко с регистрами контроллера прерываний (КП, VIC). После этого дейтвия, прерывания ЦПУ игнорируются (прерывания в ЦПУ разрешены, флаг готовности в регистре статуса КП установлен). Установленны два прерывания от TIMER0 и UART0.
d__
Не могу сказать ничего хорошего. Скорее всего если отладчик влезает в регистры управления контроллером прерывания, то возможно нарушение нормальной работы изза того что некоторые регистры во время считывания могут изменить состояние контроллера прерывания(сдвиг приоритетов или сброс каких-либо битов состояния). Другая версия звучит примерно так, при вводе процессора в режим отладки процессор прекращает выполнение программы...
emerg_reanimator
Я не совсем правильно описал проблему.

Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде.
iit
Цитата(emerg_reanimator @ May 28 2005, 12:41)
Я не совсем правильно описал проблему.

Отладка с использованием внутрисхемного эмулятора проходит норамально (тоесть я могу смотреть состояние регистров, делать пошаговае выполнение и т.п., но после того как я ознакомился с содержанием регистров КП, ЦПУ не воспринимает прерывания хотя выполнение инструкций продолжается). Я думаю это скрое связано с самим ЦПУ нежели с отладчиком. Надо попрбывать что-нибудь подобное в другой среде.
*


Навряд-ли. Скорее C-SPY после режима отладки "забывает" вновь рзарешить прерывания в ячейке Embedded ICE. Для выяснения попробуйте другой отладчик.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.