Выбрать главу

Самые младшие адреса памяти программ определены как векторы прерываний. Полный список векторов прерываний приведен в табл. 2.2. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у сброса, следующий приоритет у INTO — внешнего запроса прерывания 0 и т. д.

Ниже приведен типичный фрагмент программы обработки сброса и векторов прерываний:

Адрес Команда; Комментарий

$000 rjmp RESET; Обработка сброса

$001 rjmp EXT_INTO; Обработка IRQO

$002 rjmp EXT_INT1; Обработка IRQ1

$003 rjmp TIM_CAPT1; Обработка захвата таймера 1

$004 rjmp TIM_C0MP1; Обработка совпадения таймера 1

$005 rjmp TIM_OVF1; Обработка переполнения таймера 1

$006 rjmp TIH_OVF0; Обработка переполнения таймера О

$007 rjmp UART_RXC; Обработка приема байта

$008 rjmp UART_DRE; Обработка освобождения UDR

$009 rjmp UART_TXC; Обработка передачи байта

$00a rjmp ANA_COHP; Обработка аналогового компаратора

$00b MAIN:; Начало основной программы

Источники сброса

AT90S2313 имеет три источника сброса (перезапуска микроконтроллера):

• сброс по включению питания. Процессор сбрасывается при подаче питания на выводы VCC и GND;

• внешний сброс. Процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты;

• сброс от сторожевого таймера. Процессор сбрасывается по окончании времени отработки сторожевого таймера, если разрешена его работа.

Во время сброса все регистры ввода/вывода устанавливаются в начальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP — относительный переход на программу обработки сброса. Если в программе не разрешаются прерывания и векторы прерываний не используются, программа может начинаться с нулевого адреса.

Сброс по включении питания

Специальная схема, встроенная в микроконтроллер, — цепь сброса по включении питания, обеспечивает запрет включения процессора до тех пор, пока напряжение питания не достигнет безопасного уровня. После того как напряжение питания достигнет уровня включения, процессор не включается до тех пор, пока встроенный таймер не обработает несколько рабочих периодов сторожевого таймера.

Поскольку к выводу RESET подключен подтягивающий резистор, этот вывод может оставаться неподключенным, если не требуется внешний сброс. Время включения после подачи питания может быть увеличено удержанием вывода сброса на низком уровне.

Внешний сброс

Внешний сброс обрабатывается по низкому уровню на выводе RESET. Вывод должен удерживаться в низком состоянии, по крайней мере, два периода тактовой частоты. После снятия сигнала 0 с вывода Reset через некоторое время (так же как при сбросе по включению питания) микроконтроллер запускается.

Сброс по сторожевому таймеру

После отработки заданного при его инициализации интервала времени сторожевой таймер вырабатывает импульс сброса, перезапуская при этом микроконтроллер.

2.4. Обработка прерываний

AT90S2313 имеет два регистра маски прерываний GIMCK — общий регистр маски прерываний и TIMCK — регистр маски прерываний от таймера/счетчика.

Когда возникает прерывание, бит глобального разрешения прерываний I сбрасывается (ему присваивается значение 0) и все прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения прерываний I автоматически устанавливается в 1 при выполнении команды выхода из прерывания — RETI.

Для прерываний, вызываемых статическими событиями, например переполнение таймера 0, флаг соответствующего прерывания устанавливается при возникновении события. Если флаг прерывания очищен и присутствует условие возникновения прерывания, флаг не будет установлен, пока не произойдет следующее событие.

Когда программный счетчик устанавливается на текущий вектор прерывания для его обработки, соответствующий флаг, сгенерированный прерыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы и бит, соответствующий флагу.