Разное / АВС. Сигнал о прерывании
.pdfПервые действия процессора при поступлении сигнала о прерывании: Состояние программного счетчика копируется в регистр связи, на котором
организован стек;
Состояние регистра текущего статуса (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.