Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Расширение прерываний с периферии (Peripheral Interrupt Expansion (PIE))



 

Расширение прерываний с периферии
(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 адреса показываются. Вы можете считать значения вектора для определения, какое прерывание произошло.
Например: PIECTRL = 0x0D27 тогда вектор от адреса 0x0D26 (незаконный режим) был получен.

 

ENPIE

 

Разрешение получения вектора от таблицы вектора прерываний.
Заметьте: Перезагруженный вектор никогда не будет получен от PIE, даже если он разрешен. Вектор всегда берется из загрузочной ROM

 

Если бит установлен в 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 году

mybiblioteka.su - 2015-2024 год. (0.27 сек.)