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

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

.pdf
Скачиваний:
37
Добавлен:
23.03.2016
Размер:
3 Мб
Скачать
☆

Прерывания

●Прерывание (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