Каталог файлов

Главная » Все файлы » Книги по электронике (Электронная библиотека)

Выберите файл!!!


ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8 М.Гладштейн г.Рыбинск Часть 6. Программирование прерываний
17.12.2009, 01:28
загрузка...
ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8
М.Гладштейн г.Рыбинск
Часть 6. Программирование прерываний

Микроконтроллеры (МК) Z8 распознают 6 различных прерываний от внутренних и внешних источников, включая входные линии порта Р3, таймеры/счетчики, последовательный интерфейс. Прерывания могут быть индивидуально или глобально разрешены или запрещены с использованием регистра маски прерывания IMR (FBH). Если прерывания разрешены, то активный запрос прерывания с наивысшим приоритетом вызывает автоматический вызов подпрограммы обслуживания прерывания путем исполнения машинного цикла подтверждения прерывания (векторные прерывания). Если прерывания запрещены, запросы прерывания могут последовательно опрашиваться программой (поллинг) для определения необходимости обработки.

6.1. Инициализация прерываний

Прежде чем МК сможет распознать прерывания, необходимо сразу после сброса выполнить определенную инициализацию. Инициализация должна обеспечить разрешение/запрет определенных запросов прерывания, установить определенный приоритет прерываний в соответствии с требованиями решаемой задачи. Запрос прерывания будет разрешен, если соответствующий бит регистра IMR [1] будет установлен в 1. Глобальное разрешение прерываний достигается установкой в 1 бита D7 регистра IMR. Сброс в 0 соответствующих битов приводит к запрещению прерываний.
В результате сброса МК содержимое регистра запросов прерываний IRQ (FAH) будет удерживаться в нулевом состоянии до тех пор, пока не будет выполнена команда разрешения прерываний EI. Прерывания от источников, пока регистр IRQ МК удерживается в начальном состоянии, не распознаются, поскольку соответствующие биты IRQ не могут быть установлены. Команда EI разрешает прием запросов в регистр IRQ. Просто установка бита D7 регистра IMR в 1 без исполнения команды EI после сброса не означает разрешения прерываний. Однако в дальнейшем прерывания могут глобально разрешаться либо
командой EI , либо командой установки бита D7 регистра IMR:

OR IMR,#80H.

Глобальное запрещение прерываний обеспечивается выполнением команды DI, которая сбрасывает бит D7 регистра IMR. Прерывания должны быть глобально запрещены перед любым изменением содержимого регистров IMR, IPR или установкой битов регистра IRQ (это соответствует выставлению запросов прерываний), если нельзя гарантировать, что разрешенное прерывание не появится в период выполнения этих команд. Поскольку прерывания представляют собой проявление событий асинхронных по отношению к выполнению программы, весьма маловероятно, чтобы такая гарантия была надежной.

6.2. Обработка векторных прерываний

Разрешенные запросы прерывания обрабатываются в автоматическом векторном режиме, при котором адреса подпрограмм обслуживания прерываний извлекаются из первых 12 байт программой памяти [2]. Когда запрос разрешенного прерывания распознается МК, выполняется машинный цикл подтверждения прерывания, в течение которого сначала содержимое программного счетчика PC загружается в стек, затем состояние флагового регистра загружается в стек. Затем сбрасывается бит регистра IRQ, соответствующий обрабатываемому запросу, и прерывания глобально запрещаются путем сброса бита D7 регистра IMR. Затем осуществляется переход по косвенному адресу 2х (х номер запроса прерывания 0  х  5), т.е. в программный счетчик PC загружается слово, старший байт которого находится в ячейке 2х, а младший - в ячейке 2х+1. Например, если байты по адресам 0004Н и 0005Н содержат 05Н и 78Н соответственно, то машинный цикл подтверждения прерывания IRQ2 приведет к продолжению выполнения программы с адреса 0578Н.
При проверке прерываний можно ожидать более одного запроса. Регистр IPR управляет выбором из ожидающих запросов прерывания с наивысшим приоритетом. Пока это прерывание обслуживается, может появиться запрос с еще более высоким приоритетом. Таким прерываниям может быть представлено обслуживание в период работы подпрограммы обслуживания (гнездование или вложение прерываний), либо они будут ожидать окончания текущей подпрограммы обслуживания прерываний (не вложенные прерывания).
Для обеспечения вложения прерывания должны быть выборочно разрешены сразу после начала подпрограммы обслуживания. Обычно только прерывания с более высоким приоритетом, чем текущее, разрешаются для вложения. Для выполнения этого подпрограмма обслуживания прерывания должна “знать”, какие прерывания имеют более высокий приоритет, чем текущей. Выбор таких приоритетов вложения является обычно отражением приоритетов, установленных в регистре IPR. С учетом этого, первые команды подпрограммы обслуживания прерывания должны обеспечивать сохранение (как правило, в стеке) текущего состояния регистра IMR, маскирование всех запросов с более низким или равным приоритетом и глобальное разрешение прерываний (EI). Пусть, например, обслуживание запросов прерываний IRQ4 и IRQ5 вкладывается в подпрограмму обслуживания запроса прерывания IRQ3. Ниже дается последовательность команд для обеспечения заданного вложения прерываний:

INT_MASK_3 .EQU 00110000B
IRQ3_service: ;Подпрограмма обслуживания IRQ3
PUSH IMR ;Прерывания глобально запрещены
;в машинном цикле подтверждения
;прерывания, поэтому команда DI
;перед изменением IMR не требуется
AND IMR,#INI_MASK_3 ;Запретить все прерывания,
;кроме IRQ4 и IRQ5
EI
............................ ;Обслуживать прерывания IRQ3
DI ;Поскольку прерывания были глобально
;разрешены, перед модификацией IMR
;нужно их запретить
POP IMR ;Восстановить IMR
IRET

Примечание: После этой подпрограммы прерывания IRQ4 и IRQ5
будут разрешены при условии, что они были разрешены до входа
в подпрограммуIRQ3_service.

Подпрограмма обслуживания, работа которой должна быть завершена без прерываний, не допускает вложенных прерываний. Поэтому нет необходимости изменять IMR, поскольку прерывания автоматически запрещаются в машинном цикле подтверждения прерывания.
Подпрограмма обслуживания прерывания обычно завершается командой IRET, которая восстанавливает с верхушки стека регистр FLAGS, программный счетчик PC и глобально разрешает прерывания. Для возврата из подпрограммы обслуживания прерывания без разрешения прерываний необходимо использовать следующую последовательность команд:

POP FLAGS ;Восстановление флагов
RET ;Восстановление PC

Эти команды выполняют все функции команды IRET за исключением глобального разрешения прерывания.

6.3. Обработка прерываний путем программного опроса

Запрещенные прерывания могут быть обработаны путем программного опроса - поллинга (polling), при котором соответствующие биты регистра запросов прерывания IRQ проверяются программой. Когда оказывается, что бит запроса прерывания равен логической 1, прерывание будет обработано соответствующей подпрограммой обслуживания. В процессе работы этой подпрограммы бит запроса прерывания в IRQ должен быть сброшен для того, чтобы можно было отличить последующие запросы прерывания от текущего. Если более чем один запрос прерывания обрабатывается путем поллинга, то опрос должен производится в порядке убывающего приоритета. Пусть, например, путем поллинга обрабатываются запросы IRQ0, IRQ1 и IRQ4, а порядок приоритета установлен (от высокого к низкому): IRQ4, IRQ0, IRQ1. Для обслуживания прерываний можно применить следующую последовательность команд:

; Опрос запросов прерывания
TCM IRQ,#00010000B ;IRQ4 нуждается в обслуживании?
JR NZ,TEST0 ;Если нет, проверить IRQ0
CALL IRQ4_service ;Иначе вызвать подпрограмму
;обслуживания IRQ4
TEST0: TCM IRQ,#00000001B ;IRQ0 нуждается в обслуживании?
JR NZ,TEST1 ;Если нет, проверить IRQ1
CALL IRQ0_service ;Иначе вызвать подпрограмму
;обслуживания IRQ0
TEST1: TCM IRQ,#00000010B ;IRQ1 нуждается в обслуживании?
JR NZ,DONE ;Если нет, продолжить программу
CALL IRQ1_service ;Иначе вызвать подпрограмму
;обслуживания IRQ1
DONE: ;Выполнить программу
...............................................................
IRQ4_service: ;Подпрограмма обслуживания
;прерывания IRQ4
...............................................................
AND IRQ,#11101111B ;Сбросить запрос IRQ4
...............................................................
RET
IRQ0_service: ;Подпрограмма обслуживания
;прерывания IRQ0
...............................................................
AND IRQ,11111110B ;Сбросить запрос IRQ0
...............................................................
RET
IRQ1_service: ;Подпрограмма обслуживания
;прерывания IRQ1
...............................................................
AND IRQ,11111101B ;Сбросить запрос IRQ1
...............................................................
RET

Таким образом, гибкая система прерываний МК Z8 позволяет программировать процессы реального времени с учетом их скорости протекания и приоритетности.

ЛИТЕРАТУРА
1. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 5.
Прерывания.- Радио, 1998, N 11.
2. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 1.
Адресное пространство микроконтроллеров.- Радио, 1998, N 7.

Категория: Книги по электронике (Электронная библиотека) | Добавил: Администратор
Просмотров: 820 | Загрузок: 16 | Рейтинг: 0.0/0

Пожалуйста оставьте свои комментарии !!!!

Имя *:
Email:
Все смайлы
Код *:

Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов! Подробно тут!


Copyright Zloy Soft (Company) © 2008 - 2020