Шрифт:
• Прерывание от модулей контроллеров последовательного ввода/вывода SCI и SPI. Каждый модуль последовательного ввода/вывода формирует целую группу запросов на прерывание: при завершении передачи слова, при приеме слова, при обнаружении различного рода нарушений в протоколе передачи информации.
• Прерывание от модуля АЦП. Модуль аналого-цифрового преобразователя формирует запрос на прерывание, когда процесс оцифровки очередного сигнала завершен, и двоичный код сигнала может быть считан в память МК.
• Прерывание при выходе МК из энергосберегающих режимов. Это прерывание позволяет вывести МК из состояния STOP или WAIT, в котором он находился с целью снижения потребляемой энергии. Такие прерывания очень полезны при объединении нескольких МК в информационную сеть. Мы рассмотрим этот тип прерывания более подробно в следующем параграфе.
1. Каковы различия между прерыванием и сбросом?
Ответ: И прерывание, и сброс МК вызывают принудительный останов выполнения текущей прикладной программы. Поэтому эти два состояния МК характеризуют общим термином «исключение». Сброс МК обычно вызывается нарушениями в работе узлов МК или ошибках при исполнении прикладной программы. Когда такие неисправности возникают, состояние сброса переводит МК в некоторое начальное состояние, из которого и аппаратные средства и программа могут начать правильное функционирование. Таким образом, возникшая не фатальная неисправность будет устранена. В отличие от сброса, запросы на прерывание генерируются при штатной работе микропроцессорной системы. Они используются для организации работы системы в реальном времени. Запросы могут генерироваться встроенными в МК периферийными модулями или внешними сигналами. В отличие от сброса, при обслуживании запроса на прерывание выполняется специальная подпрограмма прерывания.
2. Каково различие между маскируемыми и немаскируемыми прерываниями?
Ответ: Немаскируемое прерывание не может быть запрещено программистом. Напротив, маскируемое прерывание может быть многократно разрешено и запрещено в ходе исполнения прикладной программы.
3. Каково различие между прерываниями по входам
Ответ: И
4. Как организовать подсистему прерывания с несколькими внешними запросами для МК семейства 68HC12/HCS12, используя лишь один вход внешнего прерывания
Ответ: Вход внешнего прерывания
4.10.3. Вектора исключений
При переходе микроконтроллера в состояние прерывания или сброса должна реализовываться некоторая внутренняя последовательность действий, которая приведет к изменению текущего состояния счетчика команд центрального процессора, т.е. к исключению. Последнее вызовет исполнение подпрограммы прерывания или программного фрагмента начального запуска МК. Причем и подпрограмма прерывания, и программный фрагмент начального запуска должны быть разными и соответствовать тому событию, которое вызвало конкретное исключение. Другими словами, МК должен обладать аппаратными средствами, которые позволят ему начать программу с адреса, который определяется источником исключения.
В МК семейства 68HC12/HCS12 начальные адреса подпрограмм прерывания и начального запуска располагаются в специальной области памяти, которая называется таблицей векторов прерывания. Таблица векторов прерывания размещается в последних 128 ячейках резидентной линейно адресуемой Flash памяти программ. Это означает, что независимо от того, каким реальным объемом резидентного ПЗУ обладает конкретная модель МК, имеет или не имеет этот МК страничную адресацию памяти программ, таблица векторов прерывания будет помещена в адресном пространстве $FF80…$FFFF. Причем, не все 128 ячеек памяти могут быть заняты векторами исключений. Объем таблицы векторов определяется числом источников прерываний и сброса в конкретной модели МК.
Адреса вектора | Источник исключения | Глобальная маска в регистре CCR | Биты разрешения прерывания в регистрах специальных функций | Значение регистра HPRIO для установления наивысшего уровня приоритета | |
---|---|---|---|---|---|
Регистр | Бит | ||||
$FFFE, $FFFF | Внешний сброс | нет | нет | нет | — |
$FFFC, $FFFD | Сброс от системы тактирования нет | COPCTL | CME, FCME | — | |
$FFFA, $FFFB | COP | нет | нет | COP rate selected | — |
$FFF8, $FFF9 | Сброс по несуществующему коду команды | нет | нет | нет | — |
$FFF6, $FFF7 | Программное прерывание SWI | нет | нет | нет | — |
$FFF4, $FFF5 | Внешнее прерывание XIRQ | X | нет | нет | — |
$FFF2, $FFF3 | Внешнее прерывание IRQ | I | INTCR | IRQEN | $F2 |
$FFF0, $FFF1 | Метки реального времени RTI | I | RTICTL | RTIE | $F0 |
$FFEE, $FFEF | Канал 0 таймера | I | TMSK1 | C0I | $EE |
$FFEC, $FFED | Канал 1 таймера | I | TMSK1 | C1I | $EC |
$FFEA, $FFEB | Канал 2 таймера | I | TMSK1 | C2I | $EA |
$FFE8, $FFE9 | Канал 3 таймера | I | TMSK1 | C3I | $E8 |
$FFE6, $FFE7 | Канал 4 таймера | I | TMSK1 | C4I | $E6 |
$FFE4, $FFE5 | Канал 5 таймера | I | TMSK1 | C5I | $E4 |
$FFE2, $FFE3 | Канал 6 таймера | I | TMSK1 | C6I | $E2 |
$FFE0, $FFE1 | Канал 7 таймера | I | TMSK1 | C7I | $E0 |
$FFDE, $FFDF | Переполнение счетчика таймера | I | TMSK1 | TOI | $DE |
$FFDC, $FFDD | Переполнение счетчика внешних событий | I | PACTL | PAOVI | $DC |
$FFDA, $FFDB | Событие на входе счетчика внешних событий | I | PACTL | PAI | $DA |
$FFD8, $FFD9 | Контроллер SPI | I | SP0CR1 | SPIE | $D8 |
$FFD6, $FFD7 | Контроллер SCI | I | SP0CR2 | TIE, TCIE, RIE, ILIE | $D6 |
$FFD4, $FFD5 | зарезервирован | I | — | — | $D4 |
$FFD2, $FFD3 | Модуль ATD | I | ATDCTL2 | ASCIE | $D2 |
$FFD0, $FFD1 | Модуль BDLC | I | BCR1 | IE | $D0 |
$FF80, $FFC1 | зарезервирован | I | — | — | $80–$C0 |
$FFC2, $FFC9 | зарезервирован | I | — | — | $C2–$C8 |
$FFCA, $FFCB | Переполнение счетчика внешних событий B | I | PBCTL | PBOVI | $CA |
$FFCC, $FFCD | Переполнение счетчика | I | MCCTL | MCZI | $CC |
$FFCE, $FFCF | зарезервирован | I | — | — | $CE |
Рис. 4.17. Таблица векторов сброса и прерывания для МК MC68HC912B32
На рис. 4.17 приведен формат таблицы векторов прерываний для МК B32. В первой колонке приведены адреса двух ячеек памяти, в которых должен располагаться двухбайтовый адрес начала подпрограммы прерывания или сброса. Во второй колонке указан источник события исключения, подпрограмма обслуживания которого должна начинаться с адреса, записанного в соответствующих ячейках памяти. Если, например, на входе внешнего запроса