Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Разное / АВС. Сигнал о прерывании

.pdf
Скачиваний:
12
Добавлен:
02.11.2020
Размер:
222.09 Кб
Скачать

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

организован стек;

Состояние регистра текущего статуса (CPSR) копируется в специально организованный стек (SPSR);

Всоответствии с кодом команды прерывания записывается новое состояние режима в битах 4—0 CPSR, устанавливаются флажки I и F, не дающие возможности приема любого запроса до завершения обработки перехода на подпрограмму (пояснение ниже).

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

Адрес

Причина

 

 

Приоритет

Режим

0x000

Сигнал RESET

 

1

Supervisor

0x004

Неизвестный код

6

Undefined

 

операции

 

 

 

 

0x008

Программное

 

-

Supervisor

 

прерывание

 

 

 

0x00C

Команда

 

 

5

Abort

 

записана

не

в

 

 

 

своей

области

 

 

 

памяти

 

 

 

 

0x010

Данные

 

 

2

Abort

 

записаны

не

в

 

 

 

своей

области

 

 

 

памяти

 

 

 

 

0x018

Аппаратное

 

4

IRQ

 

прерывание

по

 

 

 

запросу IRQ

 

 

 

0x01C

Аппаратное

 

3

FIQ

 

прерывание

по

 

 

 

запросу FIQ

 

 

 

Из адреса, полученного в таблице, в программный счетчик записывается адрес подпрограммы прерывания или адрес дополнительной развязки, где будет храниться адрес искомой подпрограммы;

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

Запись состояния режима.

В состав регистра CPSR входит 5-разрядный регистр статуса

Этот регистр содержит код текущего режима работы процессора. Таких режимов семь.

В зависимости от типа прерывания процессор должен установиться в определенный режим: Supervisor – программные прерывания или reset – выход на начальное состояние; Abort и Undefined – прерывания компилятора (ошибки); IRQ и FIQ – аппаратные прерывания. Прерывания отладчика (ловушки) обычно организуются в программе отладчика с помощью установки флажка трассировки.

Для изменения режима на режим, соответствующий типу прерывания, необходимо переписать младший байт регистра CPSR. При этом также маскируются запросы на аппаратные прерывания на время описания процесса. Команды обмена между общими регистрами и регистром статуса – MRS и MSR.

Копирование статуса в регистр - MRS Rd, CPSR Обратное копирование делать так просто нельзя. Регистр текущего статуса разделен на 4 поля:

Поле разрядов 31-24 - _f; Поле разрядов 23-16 -_ s; Поле разрядов 15 – 8 - _x; Поле разрядов 7 – 0 - _c.

Таким образом, командой MSR CPSR_c, Rd

из регистра в текущий статус копируются только статусные биты и установки масок на прерывания, а командой MSR CPSR_cxsf, Rd - весь текущий статус. Например, если необходимо установить статус IRQ (10010) и при этом замаскировать дальнейшие запросы, используя ARMкодирование, запишем следующие команды, используя R1:

MOV R1, #0b11010010 MSR CPSR_c, R1

Основные регистры распределителя контроллера GIC

Основные регистры CPU-интерфейса GIC.