Шпаргалки по МПС / MPS_shprots / Вопрос 23
.docСистема прерываний в iMCS96
Запросы прерывания текущей программы могут поступать от внешних источников или формироваться внутри микроконтроллера в различных периферийных устройствах. Общее число источников запросов прерывания у микроконтроллеров разных типов может быть 21, 28 или 37.
Запросы прерывания могут маскироваться путем посылки кодов маски в соответствующие регистры специальных функций. В микроконтроллерах всех типов имеется программный контроллер прерываний (PIC). Обслуживание запроса прерывания с использованием PIC заключается в переходе от выполнения текущей программы к выполнению другой определенной программы, составленной разработчиком программного обеспечения.
Адрес первой команды каждой прерывающей программы (вектор прерывания) хранится в определенной паре ячеек ПЗУ в области памяти, отведенной для хранения специальных данных. После завершения выполнения прерывающей программы происходит возврат к прерванной программе.
Прерывающая программа в свою очередь может быть прервана при поступлении любого незамаскированного запроса прерывания вне зависимости от соотношения приоритетов запроса, вызвавшего переход к данной программе, и нового запроса прерывания.
В микроконтроллерах некоторых типов кроме программного контроллера прерываний имеется микропрограммный контроллер прерываний (PTS). Любой запрос прерывания, кроме нескольких особых запросов, может быть направлен для обслуживания или в PIC или в PTS. Прерывание обслуживается через PTS, если по соответствующему разряду регистра PTSSEL записана 1.
Обслуживание запроса прерывания с использованием PTS заключается в выполнении типовой микропрограммы, при этом выполнение операций по микропрограмме совмещается во времени с выполнением команд текущей программы или подпрограммы обработки обычного прерывания. Микропрограммы PTS охватывают, в основном, пересылки данных. Прерывания, обслуживаемые PTS, отрабатываются быстрее, чем те, которые обслуживаются обычным способом. Однако, программировать PTS непросто, а отлаживать еще сложнее.
Таблица источников прерывания (источники запросов на прерывание)
№ разряда |
RG |
Источники запросов |
Приоритет/адрес вектор: |
|
IRS |
PTS (KC) |
|||
0 |
INT_PEND, INT_MASK, PTSEL, 0-7, PTSSRV, 0-7 |
T1 переполнение таймера T2 переполнение таймера |
0/2000h |
15/2040h |
1 |
A/D - Аналого-цифровое преобразование завершено |
1/2002 |
16/2042 |
|
2 |
FIFO полон ( 6 значений, 7ой в резерве) HIS_RG полон |
2/2004 |
17/2044 |
|
3 |
Любая операция в HSO.0 |
3/2006 |
18/2046 |
|
4 |
HSI.0 |
4/2008 |
19/2048 |
|
5 |
Software T0,T1,T2,T3,RESET T2,начало A/D->все вызывают прерывание таймера HS0 |
5/200A |
20/204A |
|
6 |
TI,RI -> Последовательный порт |
6/200C |
21/204C |
|
7 |
EXTINT,ACH.7 – внешнее прерывание |
7/200E |
22/204E |
|
0 |
INT_PEND, INT_MASK1, PTSEL, 8-14, PTSSRV, 8-14 |
TI |
8/2030h |
23/2050h |
1 |
RI |
9/2032h |
24/2052h |
|
2 |
HSI.FIFO 4 |
10/2034 |
25/2054 |
|
3 |
T2 CAPT |
11/2036 |
26/2056 |
|
4 |
T2 переполнение |
12/2038 |
27/2058 |
|
5
|
EXTINT1 внешнее прерывание |
13/203А |
28/205А |
|
6 |
HSI.FIFO – полон |
14/203C |
29/205C |
|
7 |
NMI не маскированное прерывание |
30/203E |
|
Возрастание приоритета в таблице от начала к концу!!!
Контроллер прерываний может обрабатывать прерывания без перехода к программе. Нужно просто настроить блок
Структура контроллера прерываний
Первый раз нужно сгенерировать прерывание искусственно для этого записать единицу в соответствующий разряд регистра. Естественные прерывания сверху ловит детектор восходящий фронт.
В регистре INT_MASK - разрешение прерываний
ПШ - приоритетный шифратор
В архитектуре регистры разделены на две части, поскольку в начальной серии BH было только 8 запросов на прерывания; 15 запросов являются маскируемыми, то есть любое прерывание, чтобы оно работало, должно быть разрешено. Старший запрос – немаскируемый.
Адрес вектор – есть 16 разрядный адрес перехода на подпрограмму обработки прерываний в данном такте, либо адрес управляющего блока, если обработка прерывания происходит через PTS.
С системой прерывания связаны следующие команды:
PUSHF, POPF – добавка и извлечение флага – заносит в стек регистр - PSW, INTMASK
PUSHA, POPA – заносит в стек регистр - PSW, INTMASK и еще INTMASK1 и WSR.
После выполнения этих команд обнуляются автоматически PSW, INTMASK, INTMASK1. Данная деталь означает, что:
1) все прерывания запрещены каждое в отдельности (так как INTMASK и INTMASK1 равны 0) и запрещены все вместе (так как PSW равно 0).
2) Также позволяется программировать вложенность прерываний. Вложенность прерываний 96 серии: при входе в программу прерываний можно разрешать определенные прерывания, если это необходимо.