Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Описание регистров GICR, gifr, mcucr






 

Общий регистр управления прерываниями – GICR
Бит:                  
  INT1 INT0 INT2 - - - INSEL IVCE GICR
Чтение/Запись R/W R/W R/W R R R R/W R/W  
Исходное значение:                  

 

Биты 7, 6 и 5 – INT1, INT0, INT2: Разрешение запроса внешнего прерывания 1, 0, 2 (маска). При установленных битах INT1, INT0, INT2 и установленном бите I регистра статуса (SREG) разрешаются прерывания по соответствующим выводам внешних прерываний. Активизация выводов INT1, INT0 и INT2 вызывает запрос прерывания, если даже эти выводы сконфигурированы как выходы.

Биты 4... 2 – Res: Reserved Bits – Зарезервированные биты. Эти биты зарезервированы в ATmega8535 и при считывании всегда покажут состояние 0.

Бит 1 – INSEL: Положение таблицы векторов прерываний в памяти программ. Если флаг сброшен в 0, то таблица векторов прерываний располагается в начале памяти программ (в соответствии с табл. 12), если установлен в 1 — в начале области загрузчика.

IVSEL: Выбор вектора прерывания. Когда бит IVSEL очищен (0), Векторы Прерывания установлены в начале Flash - памяти. Когда этот бит установлен (1), векторы прерывания перемещены на начало секции Загрузчика (Boot Loader) в Flash - памяти.

Бит 0 – IVCE: Разрешение изменения положения таблицы векторов прерываний. Бит устанавливается программно и удерживается в состоянии 1 в течение 4 тактов, давая возможность изменения флага INSEL.

IVCE: Векторное изменение прерывания. Допустимый бит IVCE должен быть установлен в логическую 1, чтобы применить изменение бита IVSEL. IVCE ОЧИЩЕН аппаратными четырьмя циклами после того, как будет записано или когда IVSEL записан.

Общий регистр ФЛАГОВ ПРЕРЫВАНИЙ – GIFR
Бит $3A($5A) Чт./зап. (R/W) Начальн. знач.                  
INTF1 INTF0 INTF2 - - - - - GIFR
R/W R/W R R R R R R  
               

 

Бит 7 - INTF1: Флаг внешнего прерывания 1: При возникновении на выводе INT1 события, вызывающего прерывание, INTF1 устанавливается в " 1". Если установлены бит I регистра SREG и бит INT1 в GIMSK, происходит переход на вектор прерывания по адресу $004. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу.

Бит 6 - INTF0: Флаг внешнего прерывания 0: При возникновении на выводе INT0 события вызывающего прерывание, INTF0 устанавливается в " 1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу $002. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу.

Бит 5 - INTF2: Флаг внешнего прерывания 0: При возникновении на выводе INT0 события вызывающего прерывание, INTF0 устанавливается в " 1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу $024. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу.

Биты 4..0 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0.

  Регистр управления микроконтроллером – MCUCR
Бит                  
$35($55) SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00 MCUCR
Чтение/Запись R/W R/W R/W R/W R/W R/W R/W R/W  
Исходное значение                  

 

Биты 7... 4 управляют режимами энергосбережения.

Биты 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 1.

Биты 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 0.

Биты ISC задают условия формирования запросов прерывания по входам INT1 и INT0 в соответствии с таблицей 13.

 

Таблица 13. Задание характера сигналов прерываний 1 и 0

 

ISC11 (ISC01) ISC10 (ISC00) Запрос прерывания идентифицируется:
    по низкому уровню на INT1 (INT0)
    зарезервирован
    по спадающему фронту на INT1 (INT0)
    по нарастающему фронту на INT1 (INT0)

 

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

Условия возникновения запроса прерывания 2 задаются битом ISC2 в регистре управления и состояния микроконтроллера MCUCSR.

 


 

Урок 5: обмен данных по USART

Цель урока: Понять назначение модуля USART и как с помощью данного модуля можно передавать/ принимать данные.

 

Теория

Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) – предназначен для организации связи с другими цифровыми устройствами через последовательный порт.

UART может представлять собой отдельную микросхему (например, Intel I8251, I8250) или являться частью большой интегральной схемы (например, микроконтроллераAVR).

UART преобразует передаваемые данные в последовательный код.

Основные свойства UART МК AVR Atmega16:

1) Полнодуплексный обмен по последовательному каналу.

2) Синхронный и асинхронный режимы работы.

3) Синхронизация как от ведущего, так и от ведомого устройства.

4) Скорость передачи может варьироваться в довольно больших пределах.

5) Посылка может быть от 5-и до 9-и разрядов (UART 8-9 разрядов).

6) Аппаратная поддержка генерации и контроля бита чётности.

7) Имеются три прерывания: «передача завершена», «регистр данных передатчика пуст», «приём завершён».

На рис. 18 изображены ножки МК AVR Atmega16. Обозначены:

(RXD) PD0 – вход USART МК;

(TXD) PD1 – выход USART МК;

(XCK/T0) PB0 – вход/выход внешнего тактового сигнала.

Рис.18 - Расположение портов МК Atmega16 Рис.19 - Подключение

 

МК AVR поддерживает асинхронный последовательный протокол UART аппаратно. Передающая сторона по очереди выдает в линию 0 и 1, а принимающая их запоминает. Синхронизация идет по времени, т.е. приемник и передатчик заранее договариваются о частоте (скорости) обмена данными.

Скорость UART для конкретного соединения указывается в бодах (что в данном случае соответствует битам в секунду). Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод. Скорость (бод) и длительность бита (секунда) связаны соотношением. Скорость в бодах иногда называют сленговым словом битрейт.

Если скорость передатчика и приемника не совпадают, то передача может не состояться, либо данные будут считаны не в полном объёме.

В МК AVR за организацию работы UART отвечают регистр UDR ( U ART D ata R egister) размером 1 байт. Он представляет собой два разных регистра (регистр передатчика и регистр приемника), но с одним именем (адресом). Данные переданные из UART передатчика, попадают в регистр UART приёмника. Различаются регистры между собой только на аппаратном уровне.

При поступлении данных в регистр UDR приемника, в МК возникает прерывание по завершению приема (если прерывание разрешено). Прерывание вызывается сразу же, как только приемник получил все биты данных (8 или 9 бит, в зависимости от настройки UART).

Данные из регистра UDR передатчика передаются побайтно (биты выходят из передатчика последовательно, друг за другом). По окончании пересылки байта из регистра UDR приёмника в сдвиговый регистр, в 5-ый разрядрегистра UCSRA поступает флаг опустошения регистра данных UDRE. Флаг вызываетаппаратное прерывание, сигнализируя о том, что UDR пуст и готов к приему нового байта. Флаг сбрасывается аппаратно при записи в UDR нового байта информации.

Можно в памяти организовать кольцевой буфер, и туда поместить данные, которые будут побайтно передаваться в регистр UDR передатчика при появлении флага опустошения регистра данных - UDRE.

При приеме данных действия аналогичные. По завершению приема байта данных вызывается прерывание (если оно разрешено) и по этому прерыванию данные из регистра UDR приемника записываются в кольцевой буфер.

Помимо собственно информационного потока UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Обычно стартовый и стоповый биты обрамляют один байт информации (8 бит), однако встречаются реализации UART, которые позволяют передавать по 5, 6, 7, 8 или 9 бит. Обрамленные стартом и стопом биты являются минимальной посылкой. Некоторые реализации UART позволяют вставлять два стоповых бита при передаче для уменьшения вероятности рассинхронизации приёмника и передатчика при плотном трафике. Приёмник игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.

Многие реализации UART имеют возможность автоматически контролировать целостность данных методом контроля битовой чётности. Когда эта функция включена, последний бит данных в минимальной посылке («бит чётности») контролируется логикой UART и содержит информацию о чётности количества единичных бит в этой минимальной посылке. Различают контроль на четность (англ. Even parity), когда сумма количества единичных бит в посылке является четным числом, и контроль на нечетность (англ. Odd parity), когда эта сумма нечетна (см. таблицу 5.1). При приеме такой посылки UART может автоматически контролировать бит четности и выставлять соответствующие признаки правильного или ошибочного приема.

Таблица 5.1

Контроль чётности

 

данные количество единичных бит бит четности
even odd
       
       
       
       

 

Рассмотрим обмен данными на двух примерах:

- обмен данных между двумя микроконтроллерами,

- прием данных от компьютера через COM-порт.

 

Пример 1. Приём и чтение данных микроконтроллером

 

Настроим МК на приём данных с помощью CodeWizard (см.Рис.20 ).

 

 

Рис. 20 – Закладка USART в CodeWizard (без прерываний)

 

Включим строки 11, 12, 13(инициализации UART) в функцию инициализации:

void MC_UNIT (void){UCSRA=0x00; UCSRB=0x18; // 8 - 1< < TXEN; 1 - Разрешение передачи, активирует выход TXD // 1 - 1< < RXEN; - Разрешение работы приемника, активирует вход RXDUCSRC=0x86; //6 - 1< < UCSZ1 и 1< < UCSZ0 - 8 бит данных в посылке, //8 - 1< < URSEL - выбор регистра UCSRC, «0» в 6-ом бите– асинхронный режимUBRRH=0x00; UBRRL=0x06; // скорость передачи 9600 бод = 1000000/16/6 = 10416, что почти = 9600, с погрешностью 7% PORTC=0x00; DDRC=0x01; }

Опишем основную функцию mail:

void main(void){char date=0; MC_UNIT(); while(1) { date=UDR; if (date =='1') PORTC.0=1; else PORTC.0=0; delay_ms(500); }}

При передаче «1» с помощью терминала лампочка загорится на 500 мс.

Соберём схему в Proteus (см. рис.21).

 

 

Рис.21 – Схема реализации в Proteus

 

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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2026 год. (0.095 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал