В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > ARM > ARM7TDMI
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


7. Исключительные ситуации

Исключительные ситуации возникают всякий раз, когда нормальный ход выполнения программы необходимо временно прерывать, например, для обслуживания прерывания периферийного устройства. Перед началом обработки исключительной ситуации процессор ARM7TDMI запоминает текущее состояние процессора для того, чтобы по завершении подпрограммы обработчика возобновить нормальное выполнение программы. Если две или более исключительных ситуации возникает одновременно, то данные ситуации обрабатываются в фиксированном порядке, представленном в таблице 2.5.

В данном параграфе приводится описание обработки исключительных ситуаций процессора ARM7TDMI в следующей последовательности:

7.1 Краткое описание по входу и выходу из исключительных ситуаций

В таблице 2.3 приведена итоговая информация по значениям счетчика программы PC, значение которого запоминается в r14 при входе в исключительную ситуацию, и рекомендованная инструкция для выхода из обработчика исключительной ситуации.

Таблица 2.3. Вход и выход из исключительных ситуаций

Исключительная ситуация или вход Инструкция возврата Предыдущее состояние ARM r14_x Thumb r14_x Примечания
BL MOV PC, R14 PC+4 PC+2 PC - адрес BL, SWI или выборки неопределенной инструкции, которая вызвала авар. выборку
SWI MOVS PC, R14_svc PC+4 PC+2
UDEF MOVS PC, R14_und PC+4 PC+2
PABT SUBS PC, R14_abt, #4 PC+4 PC+4
FIQ SUBS PC, R14_fiq, #4 PC+4 PC+4 PC - адрес инструкции, которая не могла быть выполнена, т.к. FIQ или IRQ взяли приоритет
IRQ SUBS PC, R14_irq, #4 PC+4 PC+4
DABT SUBS PC, R14_abt, #8 PC+8 PC+8 PC - адрес инструкции чтения или записи, которая сгенерировала авар. данные
RESET не применима - - Значение, записанное в r14_svc, во время сброса имеет непредсказуемое значение

7.2 Вхождение в исключительную ситуацию

Процессор ARM7TDMI обрабатывает исключительную ситуацию следующим образом:

  1. Запоминание адреса следующей инструкции в соответствующем LR. При входе в исключительную ситуацию из состояния ARM процессор ARM7TDMI копирует адрес следующей инструкции в LR, текущее значение PC+4 или PC+8 зависит от исключительной ситуации.

    При входе в исключительную ситуацию из состояния Thumb процессор ARM7TDMI записывает значение PC в LR, смещение а также текущее значение PC+4 или PC+8 зависят от исключения, которое после возврата вызывает возобновление программы с корректного места.

    Обработчик исключительной ситуации не должен определять состояние, в котором находился процессор в момент возникновения исключительной ситуации. Например, при возникновении SWI инструкция MOVS PC, r14_svc всегда возвращает к следующей инструкции независимо от того, в каком состоянии возникло SWI, ARM или Thumb.

  2. Копирование CPSR в соответствующий SPSR.
  3. Принудительная установка бит режима CPSR к значению, зависящего от исключительной ситуации.
  4. Принудительное изменение PC для выборки следующей инструкции по адресу, соответствующего вектору исключительной ситуации.

Процессор ARM7TDMI может также установить флаги отключения прерывания, чтобы предотвратить возникновение неуправляемых вложенных исключительных ситуаций.

Прим.: исключительные ситуации всегда вводятся в состоянии ARM. Когда процессор находится в состоянии Thumb и возникает исключительная ситуация, переход в состояние ARM происходит автоматически после загрузки адреса вектора исключительной ситуации в счетчик программы PC. Обработчик исключительной ситуации может перейти к состоянию Thumb, но для корректного завершения своей работы он должен вернуться к состоянию ARM.

7.3 Выход из исключительной ситуации

После завершения исключительной ситуации процедура ее обработки должна выполнить следующие действия:

  1. Копирование LR с учетом вычета смещения в PC. Смещение варьируется в соответствии с типом исключительной ситуации, как показано в таблице 2.3.
  2. Копирование содержимого SPSR обратно в CPSR.
  3. Сброс флагов отключения прерывания, которые были установлены при входе.

Прим.: при восстановлении содержимого CPSR из SPSR происходит автоматическая переустановка бита T к значению, которое предшествовало исключительной ситуации.

7.4 Запрос быстрого прерывания

Исключительная ситуация запроса быстрого прерывания (FIQ) поддерживает передачу данных или обработку канала. В состоянии ARM режим FIQ имеет 8 банкированных регистров, что исключает необходимость предварительного запоминания регистров. Этим минимизируется потеря производительности при переключении контекста.

FIQ генерируется внешне путем удержания в низком состоянии входа nFIQ. Вход поступает в ядро через синхронизатор.

Независимо от того, в каком состоянии ARM или Thumb вводится исключительная ситуация, обработчик FIQ возвращается из прерывания путем выполнения инструкции:

SUBS PC,R14_fiq,#4

Исключительные ситуации FIQ могут быть отключены в привилегированном режиме путем установки флага F в CPSR. Если флаг F сброшен, то процессор ARM7TDMI проверяет наличие низкого уровня на выходе синхронизатора FIQ в конце выполнения каждой инструкции.

7.5 Запрос на прерывание

Исключительная ситуация запроса на прерывание (IRQ) - обычное прерывание, вызванное низким уровнем на входе nIRQ. IRQ имеет более низкий приоритет по сравнению FIQ и маскируется при вызове последовательности FIQ. Также как и вход nFIQ вход nIRQ поступает в ядро через синхронизатор.

Независимо от того, в каком состоянии ARM или Thumb вводится исключительная ситуация, обработчик IRQ возвращается из прерывания путем выполнения:

SUBS PC,R14_irq,#4

Отключить прерывание можно в любой момент путем установки бита I в регистре CPSR из привилегированного режима.

7.6 Аварийная ситуация

Аварийная ситуация индицирует, что текущий доступ к памяти не может быть завершен. Аварийная ситуация сигнализируется через внешний вход ABORT. Процессор ARM7TDMI проверяет возникновение аварийной исключительной ситуации по завершении цикла доступа к памяти.

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

В этом случае обработчик аварийной ситуации должен выполнить следующее:

  1. Отработать аварийную ситуацию и сделать запрашиваемые данные доступными.
  2. Загрузить инструкцию, которая вызвала аварию с помощью инструкции LDR Rn,[R14_abt,#-8], чтобы определить допускает ли эта инструкция обратную запись основного регистра. Если допускает, то обработчик аварийной ситуации должен выполнить следующее:
    - определить по инструкции, что к основному регистру при обратной записи было добавлено смещение
    - добавить обратное смещение к значению, которое было перезагружено в основной регистр, при выходе из обработчика аварийной ситуации.

Этим гарантируется, что после восстановления инструкции, основной регистр будет иметь тоже значение, что и в момент первоначального выполнения инструкции. Прикладной программе нет необходимости знать о доступном количестве памяти, а также о состоянии, которое было подвержено воздействию аварийной ситуации.

Существует два типа аварийных ситуаций:

  • Авария предварительной выборки в процессе выборки инструкции
  • Авария данных, которая возникает при попытке доступа к данным.

Аварийная предварительная выборка

При возникновении аварийной предварительной выборки процессор ARM7TDMI маркирует загружаемую инструкцию как некорректную, но не генерирует исключительной ситуации до достижения инструкцией ступени "Исполнение" конвейера. Если инструкция не выполнена, например, по причине нарушения кодов условия или по причине возникновения перехода при нахождении на конвейере, то аварийная ситуация не возникает

После определения причины аварийной ситуации обработчик выполняет следующую инструкцию, независимо от рабочего состояния процессора:

SUBS PC,R14_abt,#4

Данная операция восстанавливает содержимое PC и CPSR, а также повторно выполняет аварийную инструкцию.

Аварийные данные

При возникновении ситуации аварийных данных необходимо выполнить действия, зависящие от типа инструкции:

  • Инструкции одиночной передачи данных (LDR и STR). Если обратная запись основного регистра задана с помощью инструкции, то обработчик аварийной ситуации должен знать об этом. В случае инструкции чтения процессор ARM7TDMI предотвращает перезапись регистра назначения считанными данными.
  • Инструкция обмена (SWP):
    - при чтении подавляется доступ к записи и запись в регистр назначения
    - при записи подавляется доступ к записи в регистр назначения.
  • Инструкции блочной передачи данных (LDM и STM). Если задана обратная запись, то выполняется обновление регистра.

Если основной регистр находится в списке передачи и уже перезаписан считанными данными за время, в течение которого сигнализировалось об аварии, то основной регистр возвращается к исходному значению. Процессор ARM7TDMI предотвращает перезапись всех регистров считанными данными после сигнализации об аварии. Это означает, что конечное значение основного регистра всегда является обратно записанным значением, если задана обратная запись, по его оригинальному значению. Это также означает, что ядро ARM7TDMI запоминает r15 в аварийной инструкции LDM, т.к. r15 всегда является последним регистром в списке регистров или вообще не представлен в списке передачи.

После фиксации причины аварии обработчик должен выполнить следующую инструкцию возврата в точке входа, независимо от рабочего состояния процессора:

SUBS PC,R14_abt,#8

Данное действие восстанавливает содержимое PC и CPSR, а также повторяет попытку исполнения аварийной инструкции.

7.7 Инструкция программного прерывания

Инструкция программного прерывания (SWI) используется для ввода супервизорного режима, как правило, для запроса специальной супервизорной функции. Обработчик SWI считывает код операции для извлечения номера функции SWI.

Возврат из обработчика SWI выполняется путем выполнения следующей инструкции, независимо от рабочего состояния процессора:

MOVS PC, R14_svc

Данное действие восстанавливает содержимое PC и CPSR, а также осуществляет возврат к инструкции, следующей за SWI.

7.8 Неопределенная инструкция

Если процессор ARM7TDMI сталкивается с инструкцией, которую ни он, ни любой сопроцессор в системе не может обработать, ядро ARM7TDMI попадает в ситуацию неопределенной инструкции. Программа может использовать этот механизм для расширения набора инструкций ARM путем эмуляции неопределенных сопроцессорных инструкций.

После эмуляции несуществующей инструкции обработчик особой ситуации выполняют следующую инструкцию, независимо от рабочего состояния процессора:

MOVS PC,R14_und

Данное действие восстанавливает содержимое CPSR и вызывает переход к следующей инструкции после неопределенной инструкции. Более подробная информация по неопределенным инструкциям приведена в "ARM Architecture Reference Manual" (справочное руководство по архитектуре ARM).

7.9 Векторы исключительных ситуаций

В таблице 2.4 приведен список адресов векторов исключительных ситуаций. В этой таблице I и F представляют предыдущие значений бит отключения прерываний IRQ и FIQ, соответственно, в регистре CPSR.

Таблица 2.4. Векторы исключительных ситуаций

Адрес Исключительная ситуация Режим при входе Состояние I при входе Состояние F при входе
0x00000000 Сброс Супервизорный Установленное Установленное
0x00000004 Неопределенная инструкция Неопределенный Установленное Неизменное
0x00000008 Программное прерывание Супервизорный Установленное Неизменное
0x0000000C Аварийная предварительная выборка Аварийный Установленное Неизменное
0x00000010 Аварийные данные Аварийный Установленное Неизменное
0x00000014 Зарезервировано Зарезервировано - -
0x00000018 Запрос прерывания (IRQ) Прерывание (IRQ) Установленное Неизменное
0x0000001C Запрос быстрого прерывания (FIQ) Быстрое прерывание (FIQ) Установленное Установленное

7.10 Приоритеты исключительных ситуаций

При одновременном возникновении нескольких исключительных ситуаций порядок их обработки определяется с помощью системы фиксированных приоритетов. Порядок приоритетов представлен в таблице 2.5.

Таблица 2.5. Приоритет исключительных ситуаций

Приоритет Исключительная ситуация
Наивысший Сброс (Reset)
  Авар. данные (Data Abort)
  Запрос быстрого прерывания (FIQ)
  Запрос прерывания (IRQ)
  Авар. выборка (Prefetch Abort)
Низший Неопределенная инструкция и программное прерывание (SWI)

Некоторые исключительные ситуации не могут возникать одновременно:

  • Неопределенная инструкция и программное прерывание SWI являются взаимно исключающими ситуациями.
  • Если быстрые прерывания (FIQ) разрешены и возникает ситуация "Авар. данные" (Data Abort) одновременно с FIQ, то процессор ARM7TDMI введет в действие обработчик авар. данных и незамедлительно перейдет на вектор FIQ.

Возврат из FIQ вызовет восстановление выполнения обработчика Авар. данных. Авар. данные должны иметь более высокий приоритет, чем FIQ, чтобы гарантировать невозможность пропуска ошибок передачи. В системах, где используется аварийные ситуации для поддержки виртуальной памяти, необходимо прибавить время для входа в данную исключительную ситуацию для вычисления наихудшего значения задержки FIQ.



<-- Предыдущая страница Оглавление Следующая страница -->