3. Система прерываний
Все прерывания микроконтроллера MC68HC11E9 делятся на маскируемые или I-прерывания, которые могут быть запрещены установкой в 1 бита I в регистре признаков CCR, и немаскируемые, обработка которых производится независимо от состояния бита I. К I-прерываниям относятся 14 внутренних прерываний (прерывания от последовательного интерфейса связи SCI, последовательного периферийного интерфейса SPI и 12 прерываний от подсистемы таймера), а также внешнее прерывание по входу IRQ. Все внутренние прерывания помимо бита I могут быть замаскированы локально посредством регистров управления соответствующих подсистем. К немаскируемым прерываниям относятся внешнее прерывание по входу XIRQ (может быть замаскировано только в течение первых 64 E-циклов после сброса установкой бита X=1 в регистре CCR, в остальное время запись в этот бит игнорируется), программное прерывание по команде SWI, прерывание по неверному коду операции, прерывание по переполнению Watchdog-таймера, прерывание от монитора тактовой частоты и прерывание по системному сбросу.
При возникновении внешнего или внутреннего прерывания после завершения текущей команды бит I автоматически устанавливается в единицу (для прерываний XIRQ также устанавливается в 1 бит X), в стеке сохраняется содержимое регистров микроконтроллера и текущее значение счетчика команд, как показано на рис.3.1, а затем в счетчик команд заносится значение соответствующего вектора прерываний. По команде RTI биты I и X восстанавливаются в исходное состояние, из стека извлекается содержимое регистров на момент прерывания и выполнение прерванной программы продолжается.
|
|
СТЕК |
|
|
SP |
PCL |
SP до предоставления прерывания |
|
SP-1 |
PCH |
|
|
SP-2 |
IYL |
|
|
SP-3 |
IYH |
|
|
SP-4 |
IXL |
|
|
SP-5 |
IXH |
|
|
SP-6 |
ACCA |
|
|
SP-7 |
ACCB |
|
|
SP-8 |
CCR |
|
|
SP-9 |
|
SP после предоставления прерывания |
Рис.3.1
В табл.3.1 приведены все источники прерываний, адреса соответствующих им векторов и указаны регистры, с помощью которых соответствующие прерывания могут быть замаскированы локально. В режиме загрузки вектора прерываний инициализируются значениями, приведенными в колонке "Адрес обработчика в режиме загрузки". Разместив по этим адресам команды перехода к собственным обработчикам прерываний можно реализовать обработку прерываний в режиме загрузки.
Векторы прерываний
Таблица 3.1
Адрес вектора |
Адрес обработчика в режиме загрузки |
Источник прерывания |
Общая маска |
Регистр локальной маски |
$FFC0,C1 |
- |
Зарезервировано |
- |
- |
. |
|
. |
|
|
. |
|
. |
|
|
. |
|
. |
|
|
$FFD4,D5 |
- |
Зарезервировано |
- |
- |
$FFD6,D7 |
$00C4 |
SCI |
Бит I |
SCCR2 |
$FFD8,D9 |
$00C7 |
SPI |
Бит I |
SPCR |
$FFDA,DB |
$00CA |
Активный фронт счетчика импульсов |
Бит I |
TMSK2 |
$FFDC,DD |
$00CD |
Переполнение счетчика импульсов |
Бит I |
TMSK2 |
$FFDE,DF |
$00D0 |
Переполнение таймера |
Бит I |
TMSK2 |
$FFE0,E1 |
$00D3 |
Выходное сравнение 5 |
Бит I |
TMSK1 |
$FFE2,E3 |
$00D6 |
Выходное сравнение 4 |
Бит I |
TMSK1 |
$FFE4,E5 |
$00D9 |
Выходное сравнение 3 |
Бит I |
TMSK1 |
$FFE6,E7 |
$00DC |
Выходное сравнение 2 |
Бит I |
TMSK1 |
$FFE8,E9 |
$00DF |
Выходное сравнение 1 |
Бит I |
TMSK1 |
$FFEA,EB |
$00E2 |
Входной захват 3 |
Бит I |
TMSK1 |
$FFEC,ED |
$00E5 |
Входной захват 2 |
Бит I |
TMSK1 |
$FFEE,EF |
$00E8 |
Входной захват 1 |
Бит I |
TMSK1 |
$FFF0,F1 |
$00EB |
Прерывание реального времени |
Бит I |
TMSK2 |
$FFF2,F3 |
$00EE |
IRQ/параллельный ввод-вывод |
Бит I |
Нет/PIOC |
$FFF4,F5 |
$00F1 |
XIRQ |
Бит X |
Нет |
$FFF6,F7 |
$00F4 |
SWI |
Нет |
Нет |
$FFF8,F9 |
$00F7 |
Неверный код операции |
Нет |
Нет |
$FFFA,FB |
$00FA |
RESET Watchdog-таймера |
Нет |
CONFIG |
$FFFC,FD |
$00FD |
RESET монитора тактовой частоты |
Нет |
OPTION |
$FFFE,FF |
$BF40 |
RESET |
Нет |
Нет |