7.2 Прерывания
Прерывание (Interrupt) – сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, после чего исполнение кода продолжается ровно с того места где программа была прервана.
Прерывания бывают внутренние, иницированные встроенными механизмами контроллера или внешние - от других устройств.
Приоритеры
В TOIC 4 уровня приоритета прерываний: 0 - самый высокий, 4 - самый низкий. Прерывание более высокого уровня может прерывать низкоуровневое прерывание.
Таймер
Прерывание функцией, запущенной по таймеру.
var function_name()
- любая функция без параметров
- приоритет: 3 (может прервать main)
- возвращаемое значение: игнорируется
Входящее сообщение
Прерывание с данными, полученными по какому-либо интерфейсу. var _msg()
- приоритет: 2 (может прервать main и timer-функции)
- возвращаемое значение: игнорируется
Внешнее прерывание по пину
var _exti(var pin, var level)
- параметр var pin - адрес пина, вызвавшего прерывание (проверять пин таким образом: pin == PA3)
- параметр var level - уровень пина сразу после наступления прерывания(0 - низкий уровень, 1 - высокий)
- приоритет: 1 (может прервать main, timer-функции, и _msg)
- возвращаемое значение: игнорируется
Подтверждение доставки сообщения
Состояние доставки отправленного сообщения (для каналов связи с поддержкой подтверждения).
var _ack(var status)
- параметр: var status - код статуса передачи сообщения
- приоритет: 0 (может прервать любые другие функции)
- возвращаемое значение: игнорируется
Функции для работы с прерываниями:
Вспомогательные функции для работы с прерываниями.
Отложенный запуск функции по таймеру.
Функция запущенная командой timer выполняется в контексте прерывания (с приоритетом 3). var timer(var ms, function)
- параметр var ms - время, через которое будет вызвана функция (в мс.)
- параметр function - имя функции. Функция должна быть объявлена и не иметь аргументов.
- возвращаемое значение: ms
Запретить прерывания
var __disable_irq()
- возвращаемое значение: предыдущее значение
Разрешить прерывания
var __enable_irq()
- возвращаемое значение: предыдущее значение