Использование прерываний. Таймеры ЦПУ, страница 2

Уровень блока PIE

Блок PIE мультиплексирует 8 физических линий периферийных и внешних источников прерываний в одну линию ЦПУ. Все возможные прерывания делятся на 12 групп и в пределах группы уплотняются на одну линию прерывания ЦПУ. Например, группа 1 PIE мультиплексируется на линию INT1 ЦПУ, а группа 12 – на линию INT12. Часть источников прерываний не мультиплексируется и соединяется непосредственно к линиям ЦПУ.

Каждой мультиплексированной группе прерываний соответствуют два регистра: регистр флагов прерываний (PIEIFRx) и регистр разрешения прерываний (PIEIERx) (x – номер группы PIE). Каждый разряд этих регистров, обозначаемый далее как y, соответствует одному из прерываний группы. Например, запись PIEIFRx.y и PIEIERx.y означает обращение к прерыванию y (y = 1 – 8) группы x (x = 1 – 12). Кроме того, каждой группе прерываний соответствует бит подтверждения регистра PIEACK (обозначается как PIEACKx, x = 1 – 12) (рис. 1.1).

При возникновении прерывания устанавливается соответствующий разряд регистра флагов прерываний PIEIFRx.y. Если данное прерывания разрешено (разряд PIEIERx.y установлен), контроллер PIE проверяет соответствующий прерыванию бит подтверждения PIEACKx, который сигнализирует о готовности ЦПУ к обработке прерывания от данной группы. Если разряд PIEACKxсброшен (равен 0), контроллер PIE посылает сигнал запроса на прерывание ЦПУ, в противном случае контроллер PIEожидает сбросаPIEACKx и только после этого генерирует запрос на прерывание.

Уровень ЦПУ

Как только ЦПУ получает запрос на прерывание, в регистре флагов прерываний ЦПУ IFR устанавливается соответствующий разряд. После того, как флаг установлен, прерывание от данной линии не обслуживается до тех пор, пока оно не будет разрешено с помощью регистра разрешения прерываний ЦПУ IERили регистра разрешения прерываний в режиме отладки DBGIER и разряда маски глобальных прерываний INTM.

1.3. Источники прерываний

Распределение памяти под таблицу векторов прерываний

Адрес подпрограммы обработки определенного прерывания извлекается непосредственно из таблицы векторов прерываний блока PIE. Для каждого из 96 возможных прерываний в таблице предусмотрен один 32-разрядный вектор. При извлечении вектора прерываний из таблицы флаги прерываний модуля PIE (PIEIFRx.y) автоматически очищаются. Бит подтверждения группы прерываний в случае, если ЦПУ готово к обработке прерываний от данной группы, очищается программно.

В процессорах семейства 28xx таблица векторов прерываний может располагаться в 5 определенных спецификацией областях памяти. Более подробная информация об управлении распределением памяти под таблицу векторов прерываний в [1].

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

Источники прерываний

На рис. 1.2 показано как происходит мультиплексирование различных источников прерываний в процессорах семейства 28xx. Схема является общей и в деталях может не соответствовать конкретной модели процессора. Более точные сведения содержаться в документации на конкретный процессор.

Таблица векторов прерываний

Таблица векторов прерываний блока PIE представляет собой область ОЗУ размером 256 x 16 [1]; если блок PIE не используется, эта область может быть использована под хранение данных. При сбросе содержимое таблицы не определено.