|
Расширение прерываний с периферии
(Peripheral Interrupt Expansion (PIE))
Оглавление
1. Расширение прерываний с периферии (Peripheral Interrupt Expansion (PIE)) 3
1.1. Описание контроллера прерываний. 3
1.1.1. Последовательность работы прерываний. 3
1.2. Разметка таблицы вектора прерываний. 6
1.3. Источники прерываний. 9
1.3.1. Процедуры для работы с мультиплексированными прерываниями. 11
1.3.2. Процедуры для разрешения и запрещения мультиплексированных прерываний. 12
1.3.3. Поток требований мультиплексированных прерываний от периферии к центральному процессору. 13
1.3.4. Таблица вектора прерывания PIE.. 15
1.4. Регистры конфигурации PIE.. 22
1.5. Регистры прерываний PIE.. 23
1.5.1. Регистры флагов прерываний PIE.. 25
1.5.2. Регистры разрешения прерываний PIE.. 26
1.5.3. Регистр флагов прерываний центрального процессора. 27
1.5.4. Регистр разрешения прерываний (IER) и регистр отладки разрешения прерываний (DBGIER) 31
1.6. Управление регистрами внешних прерываний. 36
1. Расширение прерываний с периферии
(Peripheral Interrupt Expansion (PIE))
Расширение прерываний с периферии (PIE) – блок элементов, объединяющих многочисленные источники прерываний в меньший набор входных прерываний устройства. Блок PIE может поддерживать 96 индивидуальных прерываний, которые объединены в группы по восемь. Каждая группа попадает в одну из 12 основных линий прерываний (INT1..INT12). Каждое из 96 прерываний имеет свой собственный вектор, записанный в специальной области RAM которую можно модифицировать. Центральный процессор после обслуживания прерывания выполняет соответствующий вектор прерывания. Требуется всего девять тактовых импульсов центрального процессора для выполнения вектора прерывания и записи в регистры памяти. Поэтому процессор может быстро среагировать на прерывания. Приоритетность прерываний контролируется как аппаратно, так и программно. Каждое индивидуальное прерывание может быть разрешено или запрещено в блоке PIE.
1.1. Описание контроллера прерываний
Устройства 28 серии поддерживают одно немаскируемое прерывание (NMI) и 16 маскируемых прерываний, расположенные по приоритетам на уровне центрального процессора (INT1-INT14, RTOSINT, и DLOGINT). Устройства 28 серии имеют множество периферийных модулей и каждый из модулей способен к производству одного или более прерываний в ответ на многочисленные события на уровне периферии. Поскольку у центрального процессора нет достаточной мощности для работы со всеми периферийными прерываниями на уровне центрального процессора, централизованный контроллер расширения периферийных прерываний требует разделять требуемые прерывания с разных источников, таких как периферия или другие отдельные выводы.
Таблица вектора прерываний используется чтобы запомнить адрес (вектор) функции обслуживания каждого прерывания (ISR) в системе. Есть один вектор на источник прерываний, включающий все мультиплексированные и немультиплексированные прерывания. Вы заполняете таблицу вектора во время инициализации прибора, а так же вы можете обновить ее во время работы.
1.1.1. Последовательность работы прерываний
Рисунок 1.1.1.1 показывает краткий обзор последовательности работы прерываний всех мультиплексированных прерываний PIE. Источники немультиплексированных прерываний передаются непосредственно на центральный процессор.
Рис. 1.1.1.1 Последовательность работы прерываний
· Уровень периферии
Прерывание происходит в периферии. Бит флага прерывания (IF), соответствующий этому случаю, установлен в регистре для этого периферического модуля
Если соответствующий бит разрешения прерывания (IE) установлен, периферический модуль генерирует требуемое для PIE-контроллера прерывание. Если прерывания запрещены на уровне периферии, тогда бит флага прерывания (IF) остается установленным, пока не будет сброшен программно. Если прерывания разрешаются позже, и бит флага прерывания при этом остается установленным, то прерывание поступает к PIE
Флаги прерываний в зоне регистров периферических модулей должны быть сброшены вручную. Смотри руководство пользователя для большей информации об особенностях периферических модулей.
· Уровень PIE
Блок PIE объединяет восемь мультиплексированных периферийных прерываний от выводов и одно прерывание центрального процессора. Эти прерывания делятся на 12 групп: группа PIE_1 – группа PIE_12. Прерывания в группе объединяются в одно прерывания центрального процессора. Например, прерывания в группе PIE_1 объединены в прерывание процессора INT1, в то время, как прерывания в группе PIE_12 объединены в прерывание процессора INT12. Источники прерываний, связанные с оставшимися прерываниями центрального процессора немультиплексированы. Для немультиплексированных прерываний PIE обращается непосредственно к центральному процессору.
Для источников мультиплексированных прерываний каждая группа в блоке PIE имеет соответствующий регистр флагов (PIEIFRx) и регистр разрешений прерываний (PIEIERx), где x – это номер соответствующей группы PIE_1..PIE_12. Каждый бит, называемый y, соответствует одному из 8 мультиплексированных прерываний в пределах группы. Таким образом PIEIFRx.y и PIEIERx.y соответствуют прерыванию y (y=1..8) в группе PIE_x (x=1..12). На рисунке 1.1.1.2 показано поведение PIE при различных состояниях PIEIFR и PIEIER.
Как только запрос передан контроллеру PIE, соответствующий бит флага прерывания PIE (PIEIFRx.y) установлен. Если так же установлен бит разрешения прерывания (PIEIERx.y), PIEACKx проверяет, готов ли центральный процессор к прерыванию от этой группы. Если бит PIEACKx не установлен для этой группы, тогда PIE отправляет прерывание непосредственно в центральный процессор. Если бит PIEACKx установлен, тогда PIE ждет пока он очистится для передачи его требуемому INTx. Для большей информации смотри секцию 1.3.
· Уровень центрального процессора
Как только запрос пришел в центральный процессор, бит флага уровня прерывания центрального процессора (IFR) устанавливается в соответствующей INTx. Как только флаг защелкнулся в IFR, соответствующее прерывание не обслуживается пока это соответственно не разрешено в регистре прерывания центрального процессора (IER) или регистре разрешения отладки прерываний (DBGIER) а так же битом глобального разрешения маскируемых прерываний (INTM).
Рис. 1.1.1.2 Обычный ответ прерываний PIE/CPU – INTx.y
Заметьте: Для мультиплексированных, которые разрешены и установлены, прерывания PIE отвечает самым высоким приоритетом. Если нет разрешенных и установленных прерываний, тогда наивысший приоритет отдается группе прерываний. Для большей информации смотри секцию 1.3.3. |
Как показано в таблице 1.1.1.1, требования для разрешения маскируемых прерываний на уровне центрального процессора, зависят от используемого процесса работы прерываний. В стандартном процессе, который встречается чаще всего, регистр DBGIER не используется. Если устройства 28 серии в режиме эмуляции в реальном времени и процессор выключен, используются различные процессы. В особых случаях DBGIER используется и бит INTM игнорируется. Если DSP в режиме реального времени и процессор запущен, применяется стандартный процесс прерываний.
Таблица 1.1.1.1: Разрешение прерываний
Используемый процесс прерываний | Разрешение прерываний |
Стандартный | INTM = 0 и бит в IER равен 1 |
DSP в режиме реального времени и процессор выключен | Бит в IER равен 1 и бит в DBGIER равен 1 |
Центральный процессор тогда готовится к обслуживанию этого прерывания. Процесс подготовки описан подробно в руководстве пользователя «TMS320C28x DSP CPU and Instruction Set Reference Guide» (код документа SPRU430). При подготовке, соответствующие регистры центрального процессора IFR и IER очищаются, EALLOW и LOOP очищаются, INTM и DBGM устанавливаются в 1, конвейерная обработка останавливается и адрес остановки записывается и автоматическое контекстное сохранение выполняется. Далее вектор ISR передается в модуль PIE. Если произошло мультиплексированное прерывание, PIE используется для групп PIEIERx и PIEIFRx регистров для определения, какое прерывание необходимо обслужить. Процесс определения описан подробно в 1.3.3.
Адрес для функции обслуживания выполненного прерывания определяется непосредственно из таблицы вектора прерываний. Есть один 32-битный вектор для каждого из доступных 96 прерываний. Флаги прерываний в модуле PIE (PIEIFRx.y) автоматически очищаются, когда вектор прерываний выполнен. Бит подтверждения выдается соответствующей группе прерывания, однако он должен быть очищен вручную, для готовности получения новых прерывания от групп PIE.
1.2. Разметка таблицы вектора прерываний
В устройствах 28 серии таблица вектора прерываний может располагаться в четырех различных областях памяти. На практике используется только разметка таблицы вектора PIE.
Этот вектор контролируется следующим режимом битов/сигналов:
VMAP: | VMAP определена в первом регистре статусов ST1 (бит 3). Устройство перезагружается установкой этого бита в 1. Состояние этого бита можно изменить записав значении в регистр ST1 или командами SETC/CLRC VMAP. Для нормального режима оставьте этот бит установленным. |
M0M1MAP: | M0M1MAP определен в первом регистре статусов ST1 (бит 11). Устройство перезагружается установкой этого бита в 1. Состояние этого бита можно изменить записав значении в регистр ST1 или командами SETC/CLRC M0M1MAP. Для нормального режима работы устройств 28 серии оставьте этот бит установленным. M0M1MAP = 0 зарезервирован только для тестовых работ Texas Instruments. |
ENPIE: | ENPIE определен в регистре PIECTRL (бит 0). Значение по-умолчанию этого бита при перезагрузке равно 0 (PIE отключен). Значение этого бита может быть изменено после перезагрузки записью 1 в регистр PIECTRL (адрес 0x0000 0CE0) |
При использовании этих битов и сигналов, возможная разметка таблицы вектора прерываний представлена в таблице 1.2.1.
Таблица 1.2.1: Разметка таблицы вектора прерываний
Разметка векторов | Форма представления векторов | Диапазон адресов | VMAP | M0M1MAP | ENPIE |
Вектор M1 | блок M1 SARAM | 0x000000 - 0x00003F | x | ||
Вектор M0 | блок M0 SARAM | 0x000000 - 0x00003F | x | ||
BROM вектор | блок Boot ROM | 0x3FFFC0 - 0x3FFFFF | x | ||
вектор PIE | блок PIE | 0x000D00 - 0x000DFF | x |
Таблицы векторов M1 и M0 зарезервированы только для тестовых работ Texas Instruments. Когда используется другая разметка таблиц векторов, блоки памяти M1 и M0 обрабатываются как блоки SARAM и могут использоваться свободно без любых ограничений.
В таблице 1.2.2 представлена таблица разметки векторов прерываний после перезагрузки устройства.
Таблица 1.2.2: Разметка таблицы вектора прерываний после перезагрузки устройства
Разметка векторов | Форма представления перезагрузки | Диапазон адресов | VMAP | M0M1MAP | ENPIE |
BROM вектор | блок Boot ROM | 0x3FFFC0 - 0x3FFFFF |
После завершения перезагрузки и загрузки, таблица вектора PIE должна быть инициализирована кодом пользователя. Тогда приложение примет таблицу вектора прерываний. С этого пункта вектора прерываний будут выполняться из таблицы вектора PIE. Запомните: когда произошла перезагрузка, перезагруженный вектор всегда выполняется из таблицы 1.2.2. После перезагрузки таблица вектора PIE всегда неактивна.
На рисунке 1.2.1 показан процесс выбора вектора из таблицы.
Рис. 1.2.1.????
1.3. Источники прерываний
Рисунок 1.3.1 и 1.3.2 показывают, как различные источники прерываний объединены в пределах устройств. Эта схема мультиплексирования, возможно не совсем точна для всех устройств 28 серии. Смотри руководство своего конкретного прибора для больших деталей.
Рис. 1.3.1 Источники прерываний PIE и внешние прерывания XINT1/XINT2
Рис. 1.3.2 Источники прерываний PIE и внешние прерывания XINT3 – XINT7
1.3.1. Процедуры для работы с мультиплексированными прерываниями
Модуль PIE объединяет восемь периферических внешних прерываний в в одно прерывание центрального процессора. Эти прерывания делятся на 12 групп: группа PIE_1 – группа PIE_12. Каждая группа ассоциирована с соответствующим PIEIER и PIEIFR регистрами. Эти группы используются для контролирования доступа прерываний к центральному процессору. Так же эти регистры PIE модуля используются для определения к какой функции обслуживания этого прерывания должен обратится центральный процессор.
Есть три главных правила, которым необходимо следовать при очистке битов в регистрах PIEIER и PIEIFR:
Правило 1: Никогда не очищайте бит PIEIFR программно
Входящее прерывание может быть потеряно если имело место операция записи или операции чтение/инвертирования/очищения регистра PIEIFR. Чтобы очистить бит PIEIFR, поступающее прерывание должно быть обслужено. Если Вы хотите очистить бит PIEIFR, не выполняя нормальную программу обслуживания, то используйте следующий порядок действий:
а) Установите бит EALLOW для разрешения модификации таблицы вектора прерываний PIE;
б) Измените таблицу вектора прерываний PIE таким образом, чтобы периферические функции обслуживания указывали на временный ISR. Этот временный ISR только выполнит возвращение из операции прерывания (IRET);
в) Разрешите прерывания таким образом, чтобы они выполнялись временным ISR;
г) После выполнения функции обработки временного прерывания, PIEIFR будет очищен;
д) Измените таблицу вектора PIE для переразметки периферических функций обслуживания на надлежащие функции обслуживания;
е) Очистите EALLOW бит.
Правило 2: Процедура для программно-приоритетных прерываний
Используйте метод, определенный в «C2833x C/C++ Header Files and Peripheral Examples in C» (код документа SPRC530).
а) Используйте IER регистр центрального процессора для глобального приоритета и регистры PIEIER для приоритетов соответствующих групп. В этом случае, только PIEIER для этой же группы будет обслуживаться как прерывание. Это изменение сделано, в то время как бит PIEACK сдерживает дополнительные прерывания центрального процессора;
б) Никогда запрещайте бит в регистре PIEIER для группы, когда выполняется прерывание от несвязанных групп.
Правило 3: Запрещение прерываний, используя PIEIER
Если регистры PIEIER используются сначала для разрешения прерываний, а затем для их запрещения – следуйте процедуре, описанной в секции 1.3.2.
1.3.2. Процедуры для разрешения и запрещения
мультиплексированных прерываний
Процедура разрешения или запрещения прерывания выполняется с помощью использования флагов регистра PIEIER. Первичная цель регистров PIEIER и IER – программное установление приоритетов прерываний внутри группы PIE. Пакет программ «C280x C/C++ Header Files and Peripheral Examples in C» (код документа SPRC191) содержит пример, в котором описан этот метод.
Если бы биты в регистрах PIEIER необходимо бы было очистить извне, то необходимо бы было воспользоваться одной из следующих процедур. Первый метод сохраняет содержимое регистра флагов PIE, поэтому прерывания не потеряются. Второй метод очищает содержимое регистра флагов PIE.
Метод 1: Используйте PIEIERx регистр для запрещения прерываний и сохранения содержимого PIEIFRx.
Для очищения битов в пределах регистра PIEIERx пока сохраняется содержимое PIEIFRx, необходимо выполнить следующую процедуру:
а) Отключите глобальные прерывания (INTM = 1);
б) Очистите бит PIEIERx.y, чтобы запретить прерывания для данного периферийного модуля. Это может быть сделано для одной или нескольких периферий в пределах той же самой группы;
в) Ждите 5 циклов. Эта задержка требуется, чтобы убедиться, что любое прерывание, которое поступала к центральному процессору, установлено в регистре флагов IFR;
г) Очистите бит IFRx для группы. Это безопасная операция в регистре IFRx центрального процессора;
д) Очистите бит PIEACKx для группы;
е) Разрешите глобальные прерывания (INTM = 0).
Метод 2: Используйте PIEIERx регистр для запрещения прерываний и очистки содержимого PIEIFRx.
Чтобы обеспечить программную перезагрузку периферических прерываний и очистки содержимого PIEIFRx, необходимо выполнить следующую процедуру:
а) Отключите глобальные прерывания (INTM = 1);
б) Установите бит EALLOW;
в) Измените таблицу вектора прерываний во временную разметку вектора специфических периферийных прерываний для очистку функции обслуживания прерывания (ISR). Выполнится только очистка ISR и возврат из прерывания командой IRET. Это безопасный способ очистить единственный бит PIEIFRx.y без потери прерываний от другой периферии в пределах группы;
г) Отключите прерывания в регистре прерываний;
д) Разрешите глобальные прерывания (INTM = 0);
е) Подождите пока любое наступившее прерывание будет обслужено функцией ISR;
ж) Отключите глобальные прерывания (INTM = 1);
з) Очистите бит EALLOW;
и) Измените таблицу вектора прерываний назад к оригинальной ISR;
к) Очистите бит PIEIER для данной периферии;
л) Очистите бит IFR для данной группы (это безопасная операция для IFR регистра);
ж) Очистите бит PIEACKx для группы;
з) Разрешите глобальные прерывания (INTM = 0).
1.3.3. Поток требований мультиплексированных прерываний
от периферии к центральному процессору
Рис. 1.3.3.1 Диаграмма потока требований мультиплексированных прерываний
шаг 1: Любое периферийное или внешнее прерывание в пределах группы PIE генерирует прерывание. Если прерывания разрешены в периферическом модуле, тогда запрос на прерывание отправляется на PIE модуль.
шаг 2: Модуль PIE определил, что прерывание y в группе x (INTx.y) было утверждено как прерывание и соответствующий бит флага прерываний защелкнулся: PIEIFRx.y-1.
шаг 3: Для того, чтобы запрос на прерывание от PIE был отправлен в центральный процессор, должны быть удовлетворены два следующих условия:
а) Бит разрешения прерывания должен бытьустановлен (PIEIERx.y=1);
б) Бит группы PIEACKx должен быть сброшен;
шаг 4: Если оба условия, 3а и 3б, верны, то запрос на прерывание отправляется в центральный процессор и бит PIEACKx снова устанавливается в 1. Бит PIEACKx останется установленным до тех пор, пока вы не сбросите его, чтобы указать, что дополнительные прерывания от группы могут быть отправлены из модуля PIE в центральный процессор.
шаг 5: Бит флага прерывания центрального процессора (CPU IFRx) устанавливается для того, чтобы указать, что произойдет прерывание x на уровне центрального процессора.
шаг 6: Если прерывания центрального процессора разрешены (CPU IERx=1 или DBGIERx=1) и глобальные маскируемые прерывания запрещены (INTM=0), то централный процессор будет обслуживать INTx.
шаг 7: Центральный процессор определяет прерывание и выполняет автоматическое контекстное сохранение, очищает бит IER, устанавливает бит INTM и очищает EALLOW. Все шаги, которые процессор выполняет для подготовни к обслуживанию прерываний описаны в руководстве пользователя TM S320C28x DSP CPU and Instruction Set Reference Guide (литературный код SPRU430).
шаг 8: Затем центральный процессор затребует соответствующий вектор прерывания от PIE.
шаг 9: Для мультиплексированных прерываний модуль PIE использует текущее значение регистров PIEIERx и PIEIFRx для определения какой адрес вектора прерываний должен быть обслужен. Есть два возможных случая:
а) Вектор для прерывания с наивысшим приоритетом в группе, для которого одновременно разрешено прерывание в PIEIERx регистре и защелкнут бит флага PIEIFRx и используется как адрес ветви. В этой манере, если даже бит флага прерывания с более высоким приоритетом был установлен после шага 6, оно будет обслуживаться первым;
б) Если нет прерываний разрешенных в группе, биты флагов которых были установлены, тогда PIE отошлет вектор для прерываний с более высоким приоритетом в группе. Это адрес ветви используемой для INTx.1. Это поведение соответствует для команд TRAP и INT устройств 28 серии.
Заметьте: Поскольку регистр PIEIERx используют для определения, какой вектор будет использоваться для данной ветви, вы должны заботится о том, когда сбросить биты регистра PIEIERx. Процедура для сбора битов в регистре PIEIERx описана в секции 1.3.2. Несоответствие этим действиям может привести к изменениям происходящим в регистре PIEIERx после того, как прерывание будет передано центральному процессору на шаге 5 на рисунке 1.3.3.1. В этом случае PIE будет вести себя так же, как если произошли команды TRAP или INT, если других произошедших разрешенных прерываний. |
В этом пункте бит PIEIFRx.y сброшен и ветви центрального процессора к вектору перерыва, полученного от PIE.
1.3.4. Таблица вектора прерывания PIE
Таблица вектора прерывания PIE состоит из 256x16 SARAM блоков, которые могут так же использоваться как RAM (только в диапазоне данных), если блок PIE не используется. Содержание таблицы вектора прерываний неопределенно при перезагрузке. Центральный процессор определяет приоритет для INT1 до INT12. PIE контролирует приоритет для каждой из восьми групп прерываний. Например, если INT1.1 должен произойти одновременно с INT8.1, оба прерывания передаются в центральный процессор одновременно от модуля PIE, и центральный процессор первым обслуживает INT1.1. Если INT1.1 должен произойти одновременно с INT1.8, тогда INT1.1 отправляется в центральный процессор первым, а INT1.8 за ним. Приоритетность прерываний устанавливается во время the vector fetch portion of the interrupt processing.
Когда PIE разрешен, TRAP#1 до TRAP#12 или INTR INT1 до INTR INT12 команды передают контроль программы функции обслуживания прерывания соответствующей первому вектору в группе PIE. Например, TRAP#1 забирает вектор от INT1.1, TRAP#2 забирает вектор от INT2.1 и так далее. Так же OR IFR, #16-битные операции вызывают вектор, взятый от INTR1.1 до INTR12.1 области, если флаг соответствующего прерывания установлен. Все другие TRAP, INTR, OR IFR, #16-битные операции забирают вектор с соответствующей области таблицы. Таблица вектора прерываний защищена EALLOW.
Из 96 возможных мультиплексированных прерываний в настоящее время используются 43 прерывания. Остальные прерывания зарезервированы для будущих устройств. Эти зарезервированные прерывания могут использоваться как программные прерывания, если они разрешены на уровне PIEIFRx, если ни один из прерываний в группе не используется на периферии. Иначе, прерывания, поступающие с периферии могут быть потеряны случайным очищением их флагов при модификации PIEIFR.
Обобщая, есть два безопасных случая, когда зарезервированные прерывания могут использоваться как программные:
1. Нет периферии в группе, утверждающей прерывание;
2. Нет периферических прерываний, назначенных для группы. Например, группы 11 и 12 не имеют никакой периферии, приложенной к ним.
Мультиплексированные прерывания для периферии и внешних прерываний показаны в таблице 1.3.4.1. Каждый столбец в таблице показывает 8 прерываний соединенных в специфическое прерывание центрального процессора. Вся таблица вектора прерывания PIE, включая и мультиплексированные и немультиплексированные прерывания, представлена в таблице 1.3.4.2.
Таблица 1.3.4.1: Таблица вектора мультиплексированных прерываний PIE
Таблица 1.3.4.2: Таблица вектора прерываний PIE
1.4. Регистры конфигурации PIE
Регистры, контролирующие работу блока PIE, представлены в таблице 1.4.1.
Таблица 1.4.1: Регистры, контролирующие работу PIE
Имя | Адрес | Размер | Описание |
PIECTRL | 0x0000 - 0CE0 | регистр контроля PIE | |
PIEACK | 0x0000 - 0CE1 | регистр подтверждения PIE | |
PIEIER1 | 0x0000 - 0CE2 | регистр разрешения прерываний группы INT1 | |
PIEIFR1 | 0x0000 - 0CE3 | регистр флага прерываний группы INT1 | |
PIEIER2 | 0x0000 - 0CE4 | регистр разрешения прерываний группы INT2 | |
PIEIFR2 | 0x0000 - 0CE5 | регистр флага прерываний группы INT2 | |
PIEIER3 | 0x0000 - 0CE6 | регистр разрешения прерываний группы INT3 | |
PIEIFR3 | 0x0000 - 0CE7 | регистр флага прерываний группы INT3 | |
PIEIER4 | 0x0000 - 0CE8 | регистр разрешения прерываний группы INT4 | |
PIEIFR4 | 0x0000 - 0CE9 | регистр флага прерываний группы INT4 | |
PIEIER5 | 0x0000 - 0CEA | регистр разрешения прерываний группы INT5 | |
PIEIFR5 | 0x0000 - 0CEB | регистр флага прерываний группы INT5 | |
PIEIER6 | 0x0000 - 0CEC | регистр разрешения прерываний группы INT6 | |
PIEIFR6 | 0x0000 - 0CED | регистр флага прерываний группы INT6 | |
PIEIER7 | 0x0000 - 0CEE | регистр разрешения прерываний группы INT7 | |
PIEIFR7 | 0x0000 - 0CEF | регистр флага прерываний группы INT7 | |
PIEIER8 | 0x0000 - 0CF0 | регистр разрешения прерываний группы INT8 | |
PIEIFR8 | 0x0000 - 0CF1 | регистр флага прерываний группы INT8 | |
PIEIER9 | 0x0000 - 0CF2 | регистр разрешения прерываний группы INT9 | |
PIEIFR9 | 0x0000 - 0CF3 | регистр флага прерываний группы INT9 | |
PIEIER10 | 0x0000 - 0CF4 | регистр разрешения прерываний группы INT10 | |
PIEIFR10 | 0x0000 - 0CF5 | регистр флага прерываний группы INT10 | |
PIEIER11 | 0x0000 - 0CF6 | регистр разрешения прерываний группы INT11 | |
PIEIFR11 | 0x0000 - 0CF7 | регистр флага прерываний группы INT11 | |
PIEIER12 | 0x0000 - 0CF8 | регистр разрешения прерываний группы INT12 | |
PIEIFR12 | 0x0000 - 0CF9 | регистр флага прерываний группы INT12 |
1.5. Регистры прерываний PIE
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.1. Регистр PIECTRL
Таблица 1.5.1: Регистр PIECTRL
Бит | Поле | Значение | Описание |
15-1 | PIEVECT |
| Эти биты указывают адрес в пределах таблицы вектора PIE, от которого вектор был получен. Наименьший бит адреса игнорируется, и только биты с 1 по 15 адреса показываются. Вы можете считать значения вектора для определения, какое прерывание произошло. |
ENPIE |
| Разрешение получения вектора от таблицы вектора прерываний. | |
Если бит установлен в 0, то блок PIE запрещен и векторы получаются из загрузочной ROM. Все регистры PIE (PIEACK, PIEIFR, PIEIER) могут быть доступны, даже если сам PIE запрещен | |||
Если ENPIE установлен в 1, все вектора, за исключением перезагруженного, получаются от таблицы прерываний. Перезагруженный вектор всегда берется из загрузочной ROM |
Легенда: R/W1C – доступно для чтения/ запись 1 для сброса, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.2. Регистр PIEACK
Таблица 1.5.2: Регистр PIEACK
Бит | Поле | Значение | Описание |
15-12 | Зарезервировано |
| Зарезервировано |
11-0 | PIEACK |
| Каждый бит PIEACK обращается к определенной группе PIE. Бит 0 ссылается на прерывания группы 1, которые мультиплексированы в до бита 11, который ссылается на группу 12, которая мультиплексирована в |
бит x=0 | Если бит считывается как 0, это означает, что PIE может отправлять прерывания от соответствующей группы на центральный процессор Запись 0 игнорируется | ||
бит x=1 | Считывание 1 означает, что прерывание от соответствующей группы было отправлено центральному процессору и все остальные прерывания от этой группы временно блокированы Запись 1 соответствует сбрасыванию бита флага прерывания и бита разрешения прерывания блока PIE для выполнения прерывания в центральном процессоре для данной группы |
1.5.1. Регистры флагов прерываний PIE
Есть 12 регистров флагов прерываний, по одному для каждого прерывания, используемого модулем PIE (INT1–INT12).
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.1.1 Регистры PIEIFRx (x=1 до 12)
Таблица 1.5.1.1: Таблица описания полей регистра PIEIFRx
Бит | Поле | Описание |
15-8 | Зарезервировано | Зарезервировано |
INTx.8 | Эти регистры показывают, является ли прерывание в настоящий момент активным. Они ведут себя также, как регистр флагов прерываний центрального процессора. Когда прерывание активно, соответствующий бит регистра установлен. Бит сброшен, если прерывание обслужено, или в бит регистра записан 0. Этот регистр так же может быть считан для определения, какое прерывание произошло. Бит регистра PIEIFR сброшен во время interrupt vector fetch portion of the interrupt processing. У аппаратного обеспечения есть приоритет над доступами центрального процессора к PIEIFR регистру. | |
INTx.7 | ||
INTx.6 | ||
INTx.5 | ||
INTx.4 | ||
INTx.3 | ||
INTx.2 | ||
INTx.1 |
1.5.2. Регистры разрешения прерываний PIE
Есть 12 регистров PIEIER, по одному для каждого прерывания, используемого модулем PIE (INT1–INT12).
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.2.1 Регистры PIEIERx (x=1 до 12)
Таблица 1.5.2.1: Таблица описания полей регистра PIEIERx
Бит | Поле | Описание |
15-8 | Зарезервировано | Зарезервировано |
INTx.8 | Эти регистры индивидуально разрешают прерывания в группе и ведут себя как разрешение основного прерывания. Установка бита в 1 разрешает обслуживание соответствующего прерывания. Сброс в 0 – запрещает. x=1 до 12. INTx значит INT1 до INT12 | |
INTx.7 | ||
INTx.6 | ||
INTx.5 | ||
INTx.4 | ||
INTx.3 | ||
INTx.2 | ||
INTx.1 |
1.5.3. Регистр флагов прерываний центрального процессора
Регистр флагов прерываний центрального процессора (IFR) – 16-битный регистр, он используется для того, чтобы определять и сбрасывать предстоящие прерывания. IFR содержит биты для всех маскируемых прерываний на уровне центрального процессора (INT1 – INT14, DLOGINT и RTOSINT). Когда PIE разрешен, модуль PIE мультиплексирует источники прерываний для INT1 –INT12.
Когда требуется маскируемое прерывание, бит флага соответствующего периферийного контролирующего регистра устанавливается в 1. Если соответствующий бит маски также равен 1, запрос на прерывание отправляется в центральный процессор, устанавливая соответствующий флаг в IFR. Это означает, что прерывание обрабатывается или ждет подтверждения.
Для определения обрабатываемого прерывания используется команда PUSH IFR и потом тестируется значение в стеке. Используйте команду OR IFR для установки бита в IFR, и команду AND IFR для ручного сброса бита обрабатываемого прерывания. Все обрабатываемые прерывания сбрасываются командой AND IFR#0 или аппаратной перезагрузкой.
Следующие события также сбрасывают флаг IFR:
· Центральный процессор признает прерывание;
· Устройство 28 серии перезагружается.
Заметьте: 1) Чтобы сбросить бит IFR, вы должны записать 0, а не 1; 2) Когда маскируемое прерывание признается, только бит IFR сбрасывается автоматически. Бит флага в соответствующем регистре периферии не сбрасывается. Если приложение требует, чтобы бит флага контролирующего регистра был сброшен, этот бит должен быть сброшен программно; 3) Если прерывание запрашивает команду INTR, соответствующий бит IFR устанавливается, центральный процессор не сбрасывает этот бит автоматически.. Если приложение требует, чтобы бит IFR регистра был сброшен, этот бит должен быть сброшен программно, 4) IMR и IFR регистры принадлежат прерываниям одного уровня. Все периферийные модули имеют свою собственную маску прерываний и бит флагов прерываний на их соответствующих контролирующих регистрах. Запомните, что несколько периферийных прерываний объединяются в одну группу. |
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.3.1. Регистр флага прерываний центрального процессора (IFR)
Таблица 1.5.3.1: Таблица описания полей регистра IFR
Бит | Поле | Значение | Описание |
RTOSINT |
| Системный флаг работы системы в реальном времени. Флаг прерываний RTOS | |
Нет выполняемых RTOS прерываний | |||
По крайней мере одно RTOS прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
DLOGINT |
| Флаг прерывания записи данных. Флаг прерываний DLOGINT | |
Нет выполняемых DLOGINT прерываний | |||
По крайней мере одно DLOGINT прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT14 |
| Флаг прерывания 14. INT14 – это флаг для прерываний подсоединенных к центральному процессору на уровне 14 | |
Нет выполняемых INT14 прерываний | |||
По крайней мере одно INT14 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT13 |
| Флаг прерывания 13. INT13 – это флаг для прерываний подсоединенных к центральному процессору на уровне 13 | |
Нет выполняемых INT13 прерываний | |||
По крайней мере одно INT13 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT12 |
| Флаг прерывания 12. INT12 – это флаг для прерываний подсоединенных к центральному процессору на уровне 12 | |
Нет выполняемых INT12 прерываний | |||
По крайней мере одно INT12 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT11 |
| Флаг прерывания 11. INT11 – это флаг для прерываний подсоединенных к центральному процессору на уровне 11 | |
Нет выполняемых INT11 прерываний | |||
По крайней мере одно INT11 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT10 |
| Флаг прерывания 10. INT10 – это флаг для прерываний подсоединенных к центральному процессору на уровне 10 | |
Нет выполняемых INT10 прерываний | |||
По крайней мере одно INT10 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT9 |
| Флаг прерывания 9. INT9 – это флаг для прерываний подсоединенных к центральному процессору на уровне 9 | |
Нет выполняемых INT9 прерываний | |||
По крайней мере одно INT9 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT8 |
| Флаг прерывания 8. INT8 – это флаг для прерываний подсоединенных к центральному процессору на уровне 8 | |
Нет выполняемых INT8 прерываний | |||
По крайней мере одно INT8 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT7 |
| Флаг прерывания 7. INT7 – это флаг для прерываний подсоединенных к центральному процессору на уровне 7 | |
Нет выполняемых INT7 прерываний | |||
По крайней мере одно INT7 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT6 |
| Флаг прерывания 6. INT6 – это флаг для прерываний подсоединенных к центральному процессору на уровне 6 | |
Нет выполняемых INT6 прерываний | |||
По крайней мере одно INT6 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT5 |
| Флаг прерывания 5. INT5 – это флаг для прерываний подсоединенных к центральному процессору на уровне 58 | |
Нет выполняемых INT5 прерываний | |||
По крайней мере одно INT5 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT4 |
| Флаг прерывания 4. INT7 – это флаг для прерываний подсоединенных к центральному процессору на уровне 4 | |
Нет выполняемых INT4 прерываний | |||
По крайней мере одно INT4 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT3 |
| Флаг прерывания 3. INT3 – это флаг для прерываний подсоединенных к центральному процессору на уровне 3 | |
Нет выполняемых INT3 прерываний | |||
По крайней мере одно INT3 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT2 |
| Флаг прерывания 2. INT7 – это флаг для прерываний подсоединенных к центральному процессору на уровне 2 | |
Нет выполняемых INT2 прерываний | |||
По крайней мере одно INT4 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания | |||
INT1 |
| Флаг прерывания 1. INT1 – это флаг для прерываний подсоединенных к центральному процессору на уровне 1 | |
Нет выполняемых INT1 прерываний | |||
По крайней мере одно INT1 прерывание выполняется. Запись нуля сбрасывает бит в 0 и очищает запрос прерывания |
1.5.4. Регистр разрешения прерываний (IER) и регистр
отладки разрешения прерываний (DBGIER)
IER – 16-битный регистр центрального процессора. IER содержит биты, разрешающие прерывания уровня центрального процессора (INT1-INT14, ROSINT и DLOGINT). Ни NMI, ни XRS не включены в IER; поэтому IER не имеет никакого эффекта над этими прерываниями.
Вы можете считать IER для определения разрешенных и запрещенных уровней прерывания, также вы можете записать данные в IER, для того, чтобы назначить разрешенные и запрещенные уровни прерываний. Для разрешения прерывания – установите соответствующий бит с помощью команды OR IER. Для запрещения прерывания – сбросьте соответствующий бит командой AND IER. Когда прерывание запрещено, оно не учитывается, независимо от значения бита INTM. Когда прерывание разрешено, оно признается, если соответствующий бит регистра IFR равен 1, а регистра INTM – 0.
При использовании команд OR IER и AND IER для модификации битов IER, будьте уверены, что не изменили состояние бита 15 (RTOSINT), если не присутствует операционная система реального времени.
Когда обслуживается аппаратное прерывание или выполнена команда INTR, соответствующий бит IER сбрасывается автоматически. Если прерывание запрашивается командой TRAP, бит IER не сбрасывается автоматически. В случае команды TRAP, если бит должен быть сброшен – он должен быт очищен функцией обслуживания прерываний.
При перезагрузке все биты IER сбрасываются в 0 и запрещаются все прерывания уровня центрального процессора.
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.4.1. Регистр разрешения прерываний центрального процессора (IER)
Таблица 1.5.4.1: Таблица описания полей регистра IER
Бит | Поле | Значение | Описание |
RTOSINT |
| Бит разрешения прерываний RTOS | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
DLOGINT |
| Бит разрешения прерываний DLOGINT | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
INT14 |
| Бит разрешения прерываний INT14 | |
Уровень INT14 запрещен | |||
Уровень INT14 разрешен | |||
INT13 |
| Бит разрешения прерываний INT13 | |
Уровень INT13 запрещен | |||
Уровень INT13 разрешен | |||
INT12 |
| Бит разрешения прерываний INT12 | |
Уровень INT12 запрещен | |||
Уровень INT12 разрешен | |||
INT11 |
| Бит разрешения прерываний INT11 | |
Уровень INT11 запрещен | |||
Уровень INT11 разрешен | |||
INT10 |
| Бит разрешения прерываний INT10 | |
Уровень INT10 запрещен | |||
Уровень INT10 разрешен | |||
INT9 |
| Бит разрешения прерываний INT9 | |
Уровень INT9 запрещен | |||
Уровень INT9 разрешен | |||
INT8 |
| Бит разрешения прерываний INT8 | |
Уровень INT8 запрещен | |||
Уровень INT8 разрешен | |||
INT7 |
| Бит разрешения прерываний INT7 | |
Уровень INT7 запрещен | |||
Уровень INT7 разрешен | |||
INT6 |
| Бит разрешения прерываний INT6 | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
INT5 |
| Бит разрешения прерываний INT5 | |
Уровень INT5 запрещен | |||
Уровень INT5 разрешен | |||
INT4 |
| Бит разрешения прерываний INT4 | |
Уровень INT4 запрещен | |||
Уровень INT4 разрешен | |||
INT3 |
| Бит разрешения прерываний INT3 | |
Уровень INT3 запрещен | |||
Уровень INT3 разрешен | |||
INT2 |
| Бит разрешения прерываний INT2 | |
Уровень INT2 запрещен | |||
Уровень INT2 разрешен | |||
INT1 |
| Бит разрешения прерываний INT1 | |
Уровень INT1 запрещен | |||
Уровень INT1 разрешен |
Регистр Debug Interrupt Enable Register (DBGIER) используется только когда процессор выключен и находится в режиме эмуляции в реальном времени. Разрешение прерываний в DBGIER определяется как time-critical прерывание. Когда процессор находится в режиме эмуляции в реальном времени, только прерывания, которые обслуживают time-critical прерывания доступны в IER. Когда процессор находится в режиме эмуляции в реальном времени, стандартный процесс работы с прерываниями используется, а DBGIER игнорируется.
Так же как и IER, вы можете считать DBGIER для определения разрешенных и запрещенных прерываний, и записать в него данные, для назначения разрешений. Для разрешения прерывания бит необходимо установить в 1, для запрещения – в 0. Используйте команду PUSH DBGIER для чтения DBGIER, и POP DBGIER для записи. При перезагрузке все биты DBGIER равны 0.
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.5.4.2. Регистр разрешения прерываний отладки (DBGIER)
Таблица 1.5.4.2: Таблица описания полей регистра DBGIER
Бит | Поле | Значение | Описание |
RTOSINT |
| Бит разрешения прерываний RTOS | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
DLOGINT |
| Бит разрешения прерываний DLOGINT | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
INT14 |
| Бит разрешения прерываний INT14 | |
Уровень INT14 запрещен | |||
Уровень INT14 разрешен | |||
INT13 |
| Бит разрешения прерываний INT13 | |
Уровень INT13 запрещен | |||
Уровень INT13 разрешен | |||
INT12 |
| Бит разрешения прерываний INT12 | |
Уровень INT12 запрещен | |||
Уровень INT12 разрешен | |||
INT11 |
| Бит разрешения прерываний INT11 | |
Уровень INT11 запрещен | |||
Уровень INT11 разрешен | |||
INT10 |
| Бит разрешения прерываний INT10 | |
Уровень INT10 запрещен | |||
Уровень INT10 разрешен | |||
INT9 |
| Бит разрешения прерываний INT9 | |
Уровень INT9 запрещен | |||
Уровень INT9 разрешен | |||
INT8 |
| Бит разрешения прерываний INT8 | |
Уровень INT8 запрещен | |||
Уровень INT8 разрешен | |||
INT7 |
| Бит разрешения прерываний INT7 | |
Уровень INT7 запрещен | |||
Уровень INT7 разрешен | |||
INT6 |
| Бит разрешения прерываний INT6 | |
Уровень INT6 запрещен | |||
Уровень INT6 разрешен | |||
INT5 |
| Бит разрешения прерываний INT5 | |
Уровень INT5 запрещен | |||
Уровень INT5 разрешен | |||
INT4 |
| Бит разрешения прерываний INT4 | |
Уровень INT4 запрещен | |||
Уровень INT4 разрешен | |||
INT3 |
| Бит разрешения прерываний INT3 | |
Уровень INT3 запрещен | |||
Уровень INT3 разрешен | |||
INT2 |
| Бит разрешения прерываний INT2 | |
Уровень INT2 запрещен | |||
Уровень INT2 разрешен | |||
INT1 |
| Бит разрешения прерываний INT1 | |
Уровень INT1 запрещен | |||
Уровень INT1 разрешен |
1.6. Управление регистрами внешних прерываний
Поддерживается семь внешних прерываний, XINT1–XINT7. XINT13 – мультиплексированное с одним немаскируемым прерыванием XNMI. Каждый из этих внешних прерываний может быть выбран для отрицательного или положительного уровня переключения а также может быть разрешен или запрещен (включая XNMI). Маскируемые прерывания также содержат 16-битный счетчик, который сбрасывается в ноль, когда зафиксировано прерывание. Этот счетчик может использоваться для точного определения времени прерывания.
XINT1CR до XINT7CR идентичны за исключением числа прерываний, поэтому рисунок 1.6.1 и таблица 1.6.1 представляют регистры для внешних прерываний от 1 до 7 как XINT n CR, где n – номер прерывания.
Легенда: R/W – доступно для чтения и записи, R – доступно для чтения, -n – значение после перезагрузки |
Рис. 1.6.1 Регистр управления внешними n прерываниями (XINT n CR)
Таблица 1.6.1: Описание полей регистра XINT n CR
Бит | Поле | Значение | Описание |
15-4 | Зарезервировано |
| Чтение возвращает 0; Запись не изменяет значение; |
3-2 | Полярность |
| Чтение/запись этого бита определяет как будет происходить прерывание – по спаду или по нарастанию сигнала |
Прерывание происходит при спаде сигнала (переход от высокого значения к низкому) | |||
Прерывание происходит при нарастании сигнала (переход от низкого значения к высокому) | |||
Прерывание происходит при спаде сигнала (переход от высокого значения к низкому) | |||
Прерывание происходит как при спадании, так и при нарастании сигнала | |||
Зарезервировано |
| Чтение возвращает 0; Запись не изменяет значение; | |
Разрешено |
| Чтение/запись этого бита определяет разрешение прерываний | |
Прерывания запрещены | |||
Прерывания разрешены |
Таблица 1.6.2: Описание полей регистра управления внешними NMI прерыванием (XNMICR) – адрес 7077h
Бит | Поле | Значение | Описание |
15-4 | Зарезервировано |
| Чтение возвращает 0; Запись не изменяет значение; |
3-2 | Полярность |
| Чтение/запись этого бита определяет как будет происходить прерывание – по спаду или по нарастанию сигнала |
Прерывание происходит при спаде сигнала (переход от высокого значения к низкому) | |||
Прерывание происходит при нарастании сигнала (переход от низкого значения к высокому) | |||
Прерывание происходит при спаде сигнала (переход от высокого значения к низкому) | |||
Прерывание происходит как при спадании, так и при нарастании сигнала | |||
Выбор |
| Выбор источника для INT13 | |
| Таймер 1 подсоединен к INT13 | ||
| XNMI_XINT13 подсоединен к INT13 | ||
Разрешено |
| Чтение/запись этого бита определяет разрешение прерываний NMI | |
Прерывания NMI запрещены | |||
Прерывания NMI разрешены |
Регистр XNMICR может использоваться для разрешения или запрещения прерывания NMI. Кроме того, вы можете выбирать источник для INT13 прерываний. Этим источником мож
Дата добавления: 2015-11-04; просмотров: 31 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
I met Richards ten years or more ago when I first went down to Cuba. He was a short, sharp-faced, agreeable chap, then about twenty-two. He introduced himself to me on the boat and I was surprised | | | основных мероприятий, проводимых в 2015 году |