Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция 2. Прерывания

.pdf
Скачиваний:
24
Добавлен:
23.03.2016
Размер:
2.94 Mб
Скачать

Прерывания

Прерывание (Interrupt) – это сигнал процессору, сообщающий о наступлении какого-либа события, приостанавливающий текущее выполнение инструкций и передающий управление в обработчик прерывания

Таблица векторов прерываний в AVR

Последовательность слов, располагающаяся с нулевого адреса Flash, каждое слово (2 байта) содержит команду перехода на соответствующий обработчик прерывания (rjmp или jmp) если прерывание включено, и reti – если выключено

В AVR чем меньше адрес вектора прерываний, тем выше его приоритет

Таблица прерываний для m328p

rjmp RESET

; Reset Handler

rjmp EXT_INT0

; IRQ0 Handler

rjmp EXT_INT1

; IRQ1 Handler

rjmp PCINT0

; PCINT0 Handler

rjmp PCINT1

; PCINT1 Handler

rjmp PCINT2

; PCINT2 Handler

rjmp WDT

; Watchdog Timer Handler

rjmp TIM2_COMPA

; Timer2 Compare A Handler

rjmp TIM2_COMPB

; Timer2 Compare B Handler

rjmp TIM2_OVF

; Timer2 Overflow Handler

rjmp TIM1_CAPT

; Timer1 Capture Handler

rjmp TIM1_COMPA

; Timer1 Compare A Handler

rjmp TIM1_COMPB

; Timer1 Compare B Handler

rjmp TIM1_OVF

; Timer1 Overflow Handler

rjmp TIM0_COMPA

; Timer0 Compare A Handler

rjmp TIM0_COMPB

; Timer0 Compare B Handler

rjmp TIM0_OVF

; Timer0 Overflow Handler

rjmp SPI_STC

; SPI Transfer Complete Handler

rjmp USART_RXC

; USART, RX Complete Handler

rjmp USART_UDRE

; USART, UDR Empty Handler

rjmp USART_TXC

; USART, TX Complete Handler

rjmp ADC

; ADC Conversion Complete Handler

rjmp EE_RDY

; EEPROM Ready Handler

rjmp ANA_COMP

; Analog Comparator Handler

rjmp TWI

; 2-wire Serial Interface Handler

Маски прерываний

В AVR – это биты, включающие или выключающие отдельные прерывания. Обычно "1" – разрешить прерывание, "0" – запретить

Маски сгруппированы в ресистры I/O – например TIMSKn для таймеров, EIMSK и PCIMSKn – прерывания от линий и т.д. (остальные пока не понадобятся)

Глобальный запрет/разрешение прерываний

Бит I (7-й) регистра SREG отвечает за глобальное разрешение ("1") или запрет ("0") всех прерываний

После входа в обработчик прерывания бит I очищается аппаратно, т.е. запрещает вложенные прерывания, а при выходе – восстанавливается обратно в "1"

Это поведение можно менять инструкциями sei – SREG[7] = 1, разрешить, cli – SREG[7] = 0, запретить. На языке С – соответственно функциями sei() и cli()

Для работы с прерываниями на языке C необходимо подключить <avr/interrupt.h>

Флаги прерываний

Это биты, которые устанавливаются (в "1"), когда приходит прерывание, и очищается при попадании в обработчик прерывания

Если очень захочется, то их можно сбрасывать и программно, записью "1" (внезапно...) в регистр флагов

Таймеры

Таймер – это периферия, умеющая инкрементить значение в счётном регистре каждый такт, а также генерировать прерывания:

по переполнению счётного регистра

по равенству текущего значения счётного регистра некоторому другому заданному значению

Источником тактовых импульсов для таймера могу быть:

Внутренний генератор (с предделителем или без)

Внешний тактовый импульс (по фронту или спаду)

Некотороые другие возможности таймеров: генерировать ШИМ, работать в режиме захвата, генерировать импульсы переменной частоты

Регистры I/O

Для 8-битного таймера TIM0 имеем:

TIMSK0 – регистр масок прерываний

TIFR0 – регистр флагов прерываний

TCNT0 – счётный регистр

TCCR0A, TCCR0B – регистры управления режимами таймера

OCR0A, OCR0B – регистры сравнения (актуально когда включен один из режимов сравнения)

Регистры I/O