Лекция №14. Обработка внешних прерываний в микроконтроллере.
В ATtiny2313 предусмотрены 10 источников прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ. Каждому из прерываний присвоен отдельный бит разрешающий данное прерывание при установке бита в 1, если бит I регистра состояния разрешает общее обслуживание прерываний.
Самые младшие адреса памяти программ определены как векторы сброса и прерываний. Полный список векторов прерываний приведен в таблице 14.1. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у сброса, следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д.
Ниже приведена типичная программа обработки сброса и векторов прерываний:
Address Labels Code Comments
$000 rjmp RESET ; Обработка сброса
$001 rjmp EXT_INT0 ; Обработка IRQ0
$002 rjmp EXT_INT1 ; Обработка IRQ1
$003 rjmp TIM_CAPT1 ; Обработка захвата таймера 1
$004 rjmp TIM_COMP1 ; Обработка совпадения таймера 1
$005 rjmp TIM_OVF1 ; Обработка переполнения таймера 1
$006 rjmp TIM_OVF0 ; Обработка переполнения таймера 0
$007 rjmp UART_RXC ; Обработка приема байта
$008 rjmp UART_DRE ; Обработка освобождения UDR
$009 rjmp UART_TXC ; Обработка передачи байта
$00a rjmp ANA_COMP ; Обработка аналогового компаратора
$00b MAIN: <instr> xxx ; Начало основной программы
_ _ _ _
Таблица 14.1. Сброс и векторы прерываний.
┌─────────────┬──────┬──────────────┬────────────────────────────────┐
│Номер вектора│ Адрес│Источник │ Описание прерывания │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 1 │ $000 │RESET │ Ножка сброса и сброс от сторо- │
│ │ │ │ жевого таймера │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 2 │ $001 │INT0 │ Внешнее прерывание 0 │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 3 │ $002 │INT1 │ Внешнее прерывание 1 │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 4 │ $003 │TIMER1 CAPT1 │ Захват таймера/счетчика 1 │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 5 │ $004 │TIMER1 COMP1 │ Совпаден. таймера/счетчика 1 │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 6 │ $005 │TIMER1 OVF1 │ Переполнение таймера/счетчика 1│
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 7 │ $006 │TIMER0 OVF0 │ Переполнение таймера/счетчика 0│
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 8 │ $007 │UART RX │ Последоват.порт прием закончен │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 9 │ $008 │UART UDRE │ Посл.порт регистр данных пуст │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 10 │ $009 │UART TX │ Посл.порт передача закончена │
├─────────────┼──────┼──────────────┼────────────────────────────────┤
│ 11 │ $00A │ANA_COMP │ Аналоговый компаратор │
└─────────────┴──────┴──────────────┴────────────────────────────────┘
ATtiny2313 имеет два регистра маски прерываний GIMSK - общий регистр маски прерываний и TIMSK - регистр маски прерываний от таймера/счетчика.
Когда возникает прерывание бит глобального разрешения прерываний I сбрасывается (ноль) и все прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения прерываний I устанавливается в 1 при выполнении команды выхода из прерывания - RETI.
Для прерываний включаемых статическими событиями (напр. совпадение значения счетчика/таймера 1 с регистром совпадения) флаг прерывания взводится при возникновении события. Если флаг прерывания очищен и присутствует условие возникновения прерывания, флаг не будет установлен, пока не произойдет следующее событие. Когда программный счетчик устанавливается на текущий вектор прерывания для его обработки, соответствующий флаг, сгенерированный прерыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы в бит соответствующий флагу.
Дата добавления: 2016-12-27; просмотров: 2083;