Перейти к содержанию
    

ARM7 вопрос

Добрый день

 

Подскажите при каких условиях ЦПУ попдает в этот режим? Углубление в описание на архитектуру (DDI0210B ARM7TDMI Rev.4) ясности не прибавило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как правило ЦПУ состоит из ядра(в данном случае это 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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно!

 

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

 

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

 

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

...
OSStartHighRdy  

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

 

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

 

Такая ситуация происходит когда ЦПУ не нагрелся до рабочей температуры :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно так уважаемый d__

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу сказать ничего хорошего. Скорее всего если отладчик влезает в регистры управления контроллером прерывания, то возможно нарушение нормальной работы изза того что некоторые регистры во время считывания могут изменить состояние контроллера прерывания(сдвиг приоритетов или сброс каких-либо битов состояния). Другая версия звучит примерно так, при вводе процессора в режим отладки процессор прекращает выполнение программы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не совсем правильно описал проблему.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не совсем правильно описал проблему.

 

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

 

Навряд-ли. Скорее C-SPY после режима отладки "забывает" вновь рзарешить прерывания в ячейке Embedded ICE. Для выяснения попробуйте другой отладчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...