
- •Тема 6 порты ввода/вывода и периферийные устройства
- •6.1 Порты ввода/вывода
- •6.3. Перезагружаемый таймер/счётчик
- •6.4.3. Модуль захвата входных событий
- •6.5. Программируемый генератор импульсов
- •6.6. Модуль звукового генератора
- •6.7. Модуль управления шаговым двигателем
- •6 .8. Модуль аналого-цифрового преобразователя
- •6.9. Система прерываний микроконтроллера
- •6.9.1. Аппаратные прерывания
- •6.9.2. Прерывания по сервису ei2os
- •6.9.3 Внешние прерывания
6.9.1. Аппаратные прерывания
Аппаратные прерывания формируются встроенными периферийными модулями или сигналами, поступающими на внешние выводы микроконтроллера (внешние прерывания).
Для управления запросами в управляющих регистрах периферийных устройств размещаются флаги появления события, вызывающего запрос, и биты разрешения формирования запроса. Если бит разрешения сброшен, то, с появлением события, запрос не формируется, хотя флаг события устанавливается.
Для разрешения конфликтных ситуаций при одновременном поступлении запросов от нескольких источников, контроллер поддерживает 8-уровневую систему приоритетов: высший проритет- 0002, низший- 1112. Каждому аппаратному прерыванию должен быть задан уровень приоритета.
Заданные уровни приоритетов запоминаются в регистрах управления прерываниями (ICR).
Каждый регистр ICR управляет прерываниями от двух источников. Уровень приоритетов у обоих источников одинаков, и, при одновременном появлении запросов, преимущество отдаётся источнику с меньшим номером прерывания. Формат регистра управления прерываниями приведён на рис.
З
апросы
аппаратных прерываний поступают на
контроллер прерываний. В контроллере
оцениваются приоритеты поступивших
запросов и, наиболее приоритетный
запрос, передаётся в процессор. Для того
чтобы процессор начал обработку запроса
прерывания, необходимо, чтобы, во-первых,
прерывания вообще были разрешены
(установлен в «1» бит I
регистра состояния процессора PS)
и, во-вторых, содержимое маски уровня
приоритета (ILM)
было больше уровня приоритета поступившего
запроса.
Перед началом обработки прерывания значения специальных регистров (A, DPR, ADB, DTB, PCB, PC и PS –всего 12 байтов) сохраняются в системном стеке. Затем вектор прерывания загружается в счётчик команд (PCB, PC), в регистр маски уровня приоритета (ILM) заносится уровень приоритета обрабатываемого прерывания (биты IL2IL0 регистра управления прерывания ICR). Флаг выбора стека S регистра PS устанавливается в «1», т.е. выбирается системный стек.
После этого выполняются команды процедуры обработки прерывания. Перед выходом из процедуры следует очистить флаг запроса прерывания ресурса. Последней командой в процедуре должна быть команда RETI. По этой команде из стека восстанавливается содержимое специальных регистров, и работа по прерванной программе возобновляется.
Если запрос прерывания не может быть обслужен (аппаратные прерывания запрещены или мал уровень приоритета), то запрос откладывается до появления условий, необходимых для удовлетворения запроса.
Чтобы микроконтроллер мог обслуживать запросы прерывания нужно выполнить следующие действия:
задать область системного стека;
инициировать работу соответствующего источника прерываний;
настроить режим обслуживания прерывания с помощью ICR;
установить бит разрешения прерывания в регистре управления источника;
установить регистр маски уровня прерывания (ILM) и бит разрешения (I) прерываний в регистре состояния PS.
6.9.2. Прерывания по сервису ei2os
Сервис EI2OS выполняет автоматическую пересылку массива данных между регистрами данных ресурсов (I/O) и памятью. После завершения пересылки данных формируется аппаратное прерывание. Механизм пересылки данных сервисом подобен механизму прямого доступа к памяти. При использовании EI2OS, пользователю необходимо создать программу запуска и завершения сервиса, но не нужно разрабатывать программу пересылки данных.
Преимуществами сервиса EI2OS являются:
исключение процедур пересылок данных, что уменьшает объём программы;
внутренние регистры не используются, и нет необходимости их сохранения;
адреса источников и приёмников данных могут инкрементироваться или оставаться неизменными.
Работа сервиса завершается после пересылки заданного числа данных или программным путём. Условия завершения можно определить по значению битов S0 и S1 в регистре ICR. Нулевое состояние битов означает, что сервис либо не запущен, либо его работа еще не завершена.
Для организации работы ресурса с использованием сервиса EI2OS нужно, как и при организации обычного прерывания, разрешить прерывание от ресурса, установить уровень приоритета, разрешить аппаратные прерывания (PS:I=1). Кроме этого, нужно в регистре управления прерыванием ICR установкой битов ICS3ICS0 выбрать один из 16 каналов сервиса.
Характеристики
каждого канала определяются 8-байтным
дескриптором. С
чётчик
данных является 16-разрядным регистром,
в который записывается количество
пересылаемых данных. После каждой
пересылки содержимое регистра уменьшается
на 1. При нулевом значении счетчика
сервис EI2OS
завершается.
Указатель адреса I/O содержит 16-битный адрес регистра данных ресурса, участвующего в обмене. Указатель содержит два младших байта адреса. Старший байт содержит нули и определяет размещение регистра данных в нулевом банке памяти. После каждой пересылки содержимое указателя может увеличиваться или оставаться неизменным.
Р
егистр
состояния сервиса EI2OS
(ISCS)
содержит биты управления сервисом.