• В момент приостанова исполнения фоновой программы, содержимое всех регистров центрального процессора должно быть сохранено в специальной области ОЗУ, которая называется «стек». В составе центрального процессора обязательно имеется регистр «указатель стека SP», который содержит адрес области памяти, в которой сохранили значения остальных регистров центрального процессора. По завершении исполнения подпрограммы прерывания этот адрес будет использован для восстановления значений регистров центрального процессора из стека, чтобы далее продолжить исполнение фоновой программы.
• Аппаратный флаг, который был установлен внешним событием для генерации запроса на прерывание, должен быть обязательно сброшен до завершения исполнения подпрограммы прерывания ISR. Если этого не будет сделано, то МК снова перейдет к исполнению подпрограммы прерывания. Таким образом, реакция МК на один и тот же запрос может получиться многократной, что не предусматривается алгоритмом управления.
• После завершения выполнения подпрограммы прерывания, содержимое счетчика команд и всех регистров центрального процессора восстанавливается из стека. В результате, исполнение фоновой программы возобновляется с того оператора, на котором она была приостановлена.
• Сразу после начального запуска МК должен выполнить процедуры инициализации (начальной установки), которые позволят настроить подсистему прерывания микроконтроллера необходимым образом. И лишь после этого можно разрешать обработку прерываний в микроконтроллере.
Отметив эти общие свойства подсистемы прерывания, обратимся к более подробному рассмотрению последней в МК семейства 68HC12/HCS12.
4.10. Состояния сброса и прерывания в МК 68HC12
МК семейства 68HC12/HCS12 обладают мощной системой обработки исключений. По способу реакции микроконтроллера на возмущающие события исключения делятся на прерывание и на сброс. В русскоязычной литературе используют следующие словосочетания с терминами «прерывание» и «сброс» (прим. переводчика):
• МК реализует прерывание или МК находится в состоянии прерывания;
• МК находится в состоянии сброса или в состоянии начального запуска.
Прерывания в свою очередь делятся на маскируемые и немаскируемые. Полный список источников исключений в МК семейства 68HC12/HCS12 с указанием способа обработки исключения по каждому источнику события приведен на рис. 4.13. В следующих параграфах мы обсудим особенности работы внутренних ресурсов МК в процессе обработки каждого упомянутого на рис. 4.13 исключения.
Рис. 4.13. Классификация исключений 68HC12
4.10.1. Состояние сброса МК
Микроконтроллер семейства 68HC12/HCS12 переходит в состояние сброса по внешнему сигналу или в при наступлении определенных внутренних событий. В состоянии сброса программный счетчик и часть битов регистра состояния центрального процессора, а также определенные в техническом описании регистры специальных функций периферийных модулей устанавливаются в начальное состояние. Это состояние однозначно определяет аппаратную конфигурацию микроконтроллера, с которого он начнет работу после включения питания. Поэтому второе название состояния сброса — состояние начального запуска. Состояние сброса МК использует также для восстановления работоспособного состояния после обнаружения внутренней аварийной ситуации.
Различают четыре источника событий, которые переводят МК в состояние сброса:
• Внешний сброс (External reset). Все МК семейства 68HC12/HCS12 имеют специальный вывод корпуса RESET для подачи сигнала внешнего сброса. Активный уровень сигнала – логический 0. Пока на входе RESET удерживается низкий уровень сигнала, МК будет находиться в состоянии сброса. После перевода линии RESET в состояние логической 1 МК перейдет в активный режим работы по истечении задержки, которая составляет 4096 периодов системной магистрали МК.
• Внутренний сброс по нарастанию напряжения питания (Power on reset — POR). Нарастание напряжения на входе VDD микроконтроллера вызывает состояние сброса. Таким образом реализуется начальный запуск МК с однозначно определенной аппаратной конфигурацией и с известным начальным адресом запускаемой на исполнение программы.