Читайте также: |
|
Подсистема прерываний должна обеспечить реакцию на четыре запроса:
– запрос с клавиатуры; – запрос от ПК на обмен по последовательному каналу; – запрос от ОУ на ввод Хi; – запрос от ОУ на вывод Y. Запрос от клавиатуры обладает высшим приоритетом и должен удовлетворяться всегда, запрос от ПК также удовлетворяется всегда, запросы на ввод с ОУ и вывод на ОУ данных от могут обслуживаться на определенных участках программы управления. Микроконтроллер ATmega169P (DA1) согласно даташит имеет три внешних прерывания - INT0, INT1 и INT2. (рисунок 4.5.6.1)
Рисунок №4.5.6.1- Управляющий регистр GICR (General Interrupt Control Register)
Наивысший приоритет имеет прерывание INT0, вектор прерывания которого располагается в таблице векторов прерываний по самому меньшему адресу (чем меньше адрес вектора прерывания, тем приоритет у прерывания выше). INT0 используем для запроса от клавиатуры, INT1 и INT2 для запросов от ОУ. Эти прерывания «привязаны» к выводам PD2, PD3 и PB2. Выводы PD2, PB2 и PD3 конфигурируются на вход. Для разрешения или запрещения внешних прерываний предназначен управляющий регистр GICR (General Interrupt Control Register) (рисунок 4.5.6.1). Каждому прерыванию соответствует определенный «бит активации прерывания». Таким образом, чтобы использовать определенное прерывание (INT1, INT0 или INT2), следует записать в его «бит активации прерывания» – логическую «1» - разрешить прерывание, а логический «0» - запретить прерывание. Например: при возникновении на выводе INT0 запроса на прерывание, в регистре флагов внешних прерываний GIFR бит INTF0 (6) (рисунок 4.5.6.2) устанавливается в "1".
Рисунок №4.5.6.2 - Регистр флагов - General Interrupt Flag Register – GIFR
Микроконтроллер не начнет обработку прерывания, пока в «бит всеобщего разрешения прерываний» (рисунок 4.5.6.3) (Bit-7 I в регистре состояния SREG) не будет записана логическая единица, чтобы запретить все прерывания в «бит всеобщего разрешения прерываний» следует записать – логический нуль
Рисунок №4.5.6.3 - Регистр состояния – SREG
Если INTF0 «1» и установлены бит I регистра SREG (рисунок 4.5.6.3) и бит INT0 в GICR, происходит переход на вектор прерывания, и на подпрограмму обработки прерывания (когда срабатывает прерывание, то сразу очищается флаг I (Global Interrupt Enable), и автоматически запрещаются все прерывания, пока не произойдет выход из обработчика прерывания. Флаг INTF0 очищается после выполнения процедуры обработчики прерывания. Выше указанное справедливо для INT1 и INT2.
Для приема и передачи данных с ПК через RS232C используется интерфейс USART, который имеет три источника прерывания.
Как приемник USART использует всего один флаг, который индицирует его состояние. Флаг «Прием завершен» (RXC) в регистре UCSRA (рисунок 4.5.6.4) позволяет определить, есть ли непрочитанные данные в буфере приема. Этот флаг устанавливается в единицу, если в буфере приема существуют непрочитанные данные, и равен нулю, если буфер приема пуст.
Рисунок №4.5.6.4 - Регистр «А» статуса и управления USART- UCSRA
Если прерывание по событию «Прием завершен» разрешено (бит RXCIE регистра UCSRB установлен) (рисунок 4.5.6.5), оно будет вызываться все время, пока флаг RXC установлен (при условии глобального разрешения прерываний).
Рисунок №4.5.6.5 - Регистр «В» статуса и управления USART — UCSRB
Существует два флага, индицирующие состояние передатчика USART; - флаг «Регистр данных пуст» (UDRE); - флаг «Передача окончена» (ТХС). Оба флага используются для генерации прерываний. Прерывания по событиям «Регистр данных пуст» и «Передача окончена» будут сгенерированы, если биты UDRE и ТХС в регистре UCSRA и биты TXCIE и UDRIE в регистре UCSRB будут установлены в единицу.
Самый высокий приоритет из всех прерываний у клавиатуры, прерывание от USART тоже имеет высокий приоритет, но только после клавиатуры. Здесь большая роль отводится оператору.
Дата добавления: 2015-07-14; просмотров: 77 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Устройство обмена по интерфейсу RS232 | | | Описание алгоритма ПО |