Прерывания. Таблица векторов прерываний ATtiny13

Автор: | 30.11.2017

В этом разделе описываются особенности обработки прерываний, выполняемые в ATtiny13A.

Полезная справочная таблица по векторам прерываний Attiny2313:

Расположение векторов прерываний в таблице определяет приоритет их обработки. Чем младше адрес прерывания, тем выше приоритет.

Взято с сайта avrinfo

А вот таблица векторов прерываний для МК Attiny13A:

Vector No. Program AddressSourceInterrupt Definition
10x0000RESETВнешний контакт, сброс при включении питания, cброс при отключении питания, сброс сторожевого таймера
20x0001INT0Внешнее прерывание 0
30x0002PCINT0Прерывание по изменению состояния выводов
40x0003TIM0_OVFПереполнение таймера\счётчика
50x0004EE_RDYEEPROM готова
60x0005ANA_COMPАналоговый компаратор
70x0006TIM0_COMPAСовпадение А таймера\счётчика T0
80x0007TIM0_COMPBСовпадение B таймера\счётчика T0
90x0008WDTПереполнение сторожевого таймера
100x0009ADCПреобразование АЦП завершено
Векторы прерывания и сброса МК Attiny 13A

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

Наиболее типичная и общая настройка программы для адресов вектора сброса и прерывания в
ATtiny13A (пример):

Address Labels Code         Comments
0x0000 rjmp RESET                    ; Reset Handler
0x0001 rjmp EXT_INT0                 ; IRQ0 Handler
0x0002 rjmp PCINT0                   ; PCINT0 Handler
0x0003 rjmp TIM0_OVF                 ; Timer0 Overflow Handler
0x0004 rjmp EE_RDY                   ; EEPROM Ready Handler
0x0005 rjmp ANA_COMP                 ; Analog Comparator Handler
0x0006 rjmp TIM0_COMPA               ; Timer0 CompareA Handler
0x0007 rjmp TIM0_COMPB               ; Timer0 CompareB Handler
0x0008 rjmp WATCHDOG                 ; Watchdog Interrupt Handler
0x0009 rjmp ADC                      ; ADC Conversion Handler
                                     ;
0x000A RESET: ldi r16, low(RAMEND)   ; Main program start
0x000B out SPL,r16                   ; Set Stack Pointer to top of RAM
0x000C sei                           ; Enable interrupts
0x000D <instr> xxx
... ... ... ...

Внешние прерывания

Внешние прерывания запускаются выводом INT0 или любым выводом PCINT[5:0]. Заметьте, что если они включены, прерывания будут срабатывать, даже если выводы INT0 или PCINT[5:0] сконфигурированы как выходы. Эта функция позволяет применять программное прерывание. Прерывания смены контакта PCI сработает, если какой-либо включенный вывод PCINT[5:0] переключится. Регистр PCMSK определяет, какие контакты способствуют прерываниям по смене пина. Прерывания смены пина на PCINT[5:0] обнаруживаются асинхронно. Это означает, что эти прерывания могут использоваться для пробуждения устройства из спящего (sleep) режима, отличающегося от режима ожидания (idle).

Прерывания INT0 могут быть вызваны падающим или нарастающим фронтом или низким уровнем. Это настраивается, как указано в спецификации для регистра управления MCU – MCUCR. Когда прерывание INT0 включено и настроено как срабатывание по уровню, прерывание будет срабатывать до тех пор, пока контакт удерживается на низком уровне. Обратите внимание, что распознавание прерываний по заднему или переднему фронту на INT0 требует наличия таймера ввода-вывода (I/O clock).

Прерывание по низкому уровню (low level interrupt)

Прерывание низкого уровня на INT0 обнаруживается асинхронно. Это означает, что это прерывание может быть использовано для пробуждения детали из спящего режима (sleep), в отличие от режима ожидания (idl). Таймер ввода-вывода (I/O Clock) остановлен в
всех спящих режимах (sleep), кроме режима ожидания (idle).


Обратите внимание, что если прерывание, запускаемое по уровню, используется для пробуждения после выключения питания (power down), то необходимый уровень должен удерживаться достаточно долго, чтобы MCU завершил пробуждение, чтобы вызвать прерывание по уровню. Если
уровень исчезнет до наступления запущенного состояния (Start-up Time), MCU всё равно проснётся, но уже без прерывания. Время запуска определяется фьюзами SUT и CKSEL, как описано в
«Системные таймеры и параметры таймеров».

Если низкий уровень на контакте прерывания изменён до того, как устройство проснулось, тогда исполнение команды по прерыванию не будет переключено на процедуру обслуживания прерывания, а продолжится с инструкции, следующей за командой SLEEP.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *