AVR микроконтроллеры для начинающих (урок 12) UART/USART в avr

| 06.04.2014

AVR микроконтроллеры для начинающих (урок 12) UART/USART в avr  мкакушкаНожки нашего мк связанные с USART
RXD – PD0 – вход _USART;
TXD – PD1 – выход _USART;
XCK – PB0 – вход/выход внешнего тактового сигнала.

Основные свойства
Полнодуплексный обмен по последовательному каналу.
Синхронный и асинхронный режимы работы.
Синхронизация как от ведущего, так и от ведомого устройства.
Скорость передачи может варьироваться в довольно больших пределах.
Посылка может быть от 5-и до 9-и разрядов (UART 8-9 разрядов).
Аппаратная поддержка генерации и контроля бита чётности.
Имеются три прерывания: «передача завершена», «регистр данных передатчика пуст», «приём завершен».

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

Формат кадра
форммат
Под кадром в данном случае понимается совокупность одного слова данных и сопутствующей информации.Кадр начинается со старт-бита, за которым следует младший разряд слова данных. После старшего разряда слова данных следует один или два стоп-бита. Если включена схема формирования бита четности, он включается между старшим разрядом слова данных и первым стоп-битом. Формат кадра определяется разрядом UCSZ2 регистра UCSRB и разрядами UCSZ1, UCSZ0 регистра UCSRC. Выбор количества стоп-битов (в USART) осуществляется с помощью разряда USBS регистра UCSRC. Разряды UPM1:UPM0 регистра UCSRC определяют функционирование схемы контроля четности модулей USART .

Значение бита четности получается путем выполнения операции «Ис­ключающее  ИЛИ» над всеми разрядами передаваемого слова данных. Если используется проверка на нечетность (odd parity), полученный результат ин­вертируется.
проверка на чётность        Peven = d n-1 | …| d3 | d2| d1 | d0 | 0,
проверка на нечётность   Podd = d n-1 | …| d3 | d2| d1 | d0 | 1.

Регистры
В микроконтроллере atmega32 для работы с модулем USART используются 6 регистров :
- управляющий регистр UCSRA ,
- управляющий регистр UCSRB ,
- управляющий регистр UCSRC,
- регистры скорости передачи   UBRRL  и UBRRH,
- регистр данных UDR.

Управляющий регистр UCSRA UCSRA RXC - Флаг завершения приема. Флаг устанавливается в «1» при наличии непрочитанных данных в буфере приемника (регистр данных UDR). Сбрасывается флаг аппаратно после опустошения буфера.
TXC - Флаг завершения передачи. Флаг устанавливается в «1» после передачи всех разрядов посылки из сдвигового регистра передатчика, при условии, что в регистр данных UDR не было загружено нового значения. Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него лог. 1.
UDRE - Флаг опустошения регистра данных. Данный флаг устанавливается в «1» при пустом буфере передатчика (после пересылки байта из регистра данных UDR в сдвиговый регистр передатчика). Установленный флаг означает, что в регистр данных можно загружать новое значение. Если разряд UDRIE регистра UCR (UCSRB) установлен, генерируется запрос на прерывание «регистр данных пуст». Флаг сбрасывается аппаратно, при записи в регистр данных
FE - Флаг ошибки кадрирования. Флаг устанавливается в «1» при обнаружении ошибки кадрирования, т. е. если первый стопбит принятой посылки равен «0». Флаг сбрасывается при приеме стоп бита, равного «1».
DOR -  Флаг переполнения. В USART флаг устанавливается в «1», если в момент обнаружения нового стартбита в сдвиговом регистре приемника находится последнее принятое слово, а буфер приемника полон (два значения). В UART флаг устанавливается в «1», если новый кадр будет помещен в сдвиговый регистр приемника до того, как из регистра данных будет считано предыдущее слово. Флаг сбрасывается при пересылке принятых данных из сдвигового регистра приемника в буфер.
PE - Флаг ошибки контроля четности. Флаг устанавливается в «1», если в данных, находящихся в буфере приемника, выявлена ошибка контроля четности. При отключенном контроле четности этот разряд постоянно читается как «0»
U2X - Удвоение скорости обмена. Если этот разряд установлен в «1», коэффициент деления предделителя контроллера скорости передачи уменьшается с 16 до 8, удваивая тем самым скорость асинхронного обмена по последовательному каналу. В USART разряд U2X используется только при асинхронном режиме работы. В синхронном режиме он должен быть сброшен.
MPCM - Режим мультипроцессорного обмена. Разряд MPCM используется в режиме мультипроцессорного обмена. Если он установлен в «1», ведомый микроконтроллер ожидает приема кадра, содержащего адрес. Кадры, не содержащие адреса устройства, игнорируются.

Управляющий регистр UCSRB UCSRBRXCIE - Разрешение прерывания по завершению приема. Если данный разряд установлен в «1», то при установке флага RXC регистра UCSRA генерируется прерывание.
TXCIE - Разрешение прерывания по завершению передачи. Если данный разряд установлен в «1», то при установке флага TXC регистра UCSRA генерируется прерывание.
UDRIE - Разрешение прерывания при очистке регистра данных UART. Если данный разряд установлен в «1», то при установке флага UDRE в регистра UCSRA  генерируется прерывание.
RXEN - Разрешение приема. При установке этого разряда в «1» разрешается работа приемника USART/UART и переопределяется функционирование вывода RXD.
TXEN - Разрешение передачи. При установке этого разряда в «1» разрешается работа передатчика UART и переопределяется функционирование вывода TXD. 4
UCSZ2 - Формат посылок. Этот разряд используется для задания размера слов данных, передаваемых по последовательному каналу. В модулях USART он используется совместно с разрядами UCSZ1 и UCSZ0 регистра UCSRC.
RXB8 - 8 й разряд принимаемых данных. При использовании 9 разрядных слов данных этот разряд содержит значение старшего разряда принятого слова. В случае USART содержимое этого разряда должно быть считано до прочтения регистра данных UDR.
TXB8 - 8 й разряд передаваемых данных. При использовании 9 разрядных слов данных, содержимое этого разряда является старшим разрядом передаваемого слова. Требуемое значение должно быть занесено в этот разряд до загрузки байта данных в регистр UDR.

Управляющий регистр UCSRC UCSRnCURSEL - Выбор регистра. Этот разряд определяет, в какой из регистров модуля производится запись. Если разряд установлен в «1», обращение производится к регистру UCSRC. Если же разряд сброшен в «0», обращение производится к регистру UBRRH.
UMSEL - Режим работы USART. Если разряд сброшен в «0», модуль USART работает в асинхронном режиме. Если разряд установлен в «1», то модуль USART работает в синхронном режиме.
UPM1 и UPM0 - Режим работы схемы контроля и формирования четности. Эти разряды определяют функционирование схем контроля и формирования четности. UPM USBS - Количество стопбитов. Этот разряд определяет количество стоп битов, посылаемых передатчиком. Если разряд сброшен в «0», передатчик посылает 1 стоп бит, если установлен в «1», то 2 стоп бита. Для приемника содержимое этого разряда безразлично.
UCSZ1 и UCSZ0 - Формат посылок. Совместно с разрядом UCSZ2 эти разряды определяют количество разрядов данных в посылках (размер слова). UCSZ_bits UCPOL - Полярность тактового сигнала. Значение этого разряда определяет момент выдачи и считывания данных на выводах модуля. Разряд используется только при работе в синхронном режиме. При работе в асинхронном режиме он должен быть сброшен в «0».

Регистры скорости передачи   UBRRL  и UBRRH UBRRHL USEL -  Выбор регистра. Этот разряд определяет, в какой из регистров модуля производится запись. Если разряд установлен в «1», обращение производится к регистру UCSRC. Если же разряд сброшен в «0», обращение производится к регистру UBRRH.
UBRR11 – UBRR0 - Значение скорости передачи в бодах.

Установка скорости передачи в асинхронном режиме
При работе в асинхронном режиме скорость обмена определяется не только содержимым регистра UBRR, но и состоянием разряда U2X регистра UCSRA. Если этот разряд установлен в «1», коэффициент деления предделителя уменьшается в два раза, а скорость обмена соответственно удваивается. При работе в синхронном режиме этот разряд должен быть сброшен.

Итак, скорость обмена определяется следующими формулами:
• асинхронный режим (обычный, U2X = «0»):        BAUD=fCK/ 16 / (UBRR+1);
• асинхронный режим (ускоренный, U2X = «1»):  BAUD= fCK  / 8 / (UBRR +1);
• синхронный режим ведущего:                                     BAUD= fCK/ 2 / (UBRR+ 1), где
BAUD — скорость передачи в бодах,
fCK — тактовая частота микроконтроллера,
UBRR- содержимое регистра контроллера скорости передачи (0…4095).

Количество изменений информационного параметра несущего периодического сигнала в секунду измеряется в бодах. 1 бод равен одному изменению информационного параметра в секунду. Например, если такт передачи информации равен 0,1 секунды, то сигнал изменяется со скоростью 10 бод. Таким образом, скорость в бодах целиком определяется величиной такта.

Пример
Напишем 2-а кода: для передатчика и приемника. Передатчик будет каждую секунду отправлять ведомому по USART интерфейсу число насчитанных секунд приемник будет принимать это значение и выводить его на PORTA.
протттт

Скачать пример (UART.c +USART.DSN+ USART_perd.c)

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

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