Универсальный асинхронный приёмопередатчик UART
UART — один из самых распространённых и удобных в работе портов. Хоть его первоначальную разновидность в виде RS-232C уже сложно найти, то его родственники встречаются повсеместно, как в виде промышленных проводных гигантов, таких, как RS485. В микроконтроллерной технике он соединяет различные узлы, которые обмениваются большими объёмами данных, например: МК, датчики, модули беспроводных и проводных интерфейсов.
В свою очередь, UART расшифровывается как «универсальный асинхронный приемник и передатчик» («Universal Asynchronous Receiver and Transmitter»).
Выводы МК, связанные с USART:
RXD – PD0 – вход _USART; TXD – PD1 – выход _USART; XCK – PB0 – вход/выход внешнего тактового сигнала.
Основные свойства:
Полнодуплексный обмен по последовательному каналу.
Синхронный и асинхронный режимы работы.
Синхронизация как от ведущего, так и от ведомого устройства.
Скорость передачи может варьироваться в довольно больших пределах.
Посылка может быть от 5-и до 9-и разрядов (UART 8-9 разрядов).
Аппаратная поддержка генерации и контроля бита чётности.
Имеются три прерывания: «передача завершена», «регистр данных передатчика пуст», «приём завершен».
Рис. 1.13 – Подключение двух устройств по UART
Картинка весьма наглядна, но все же соединяем крест-накрест приемник с передатчиком, а передатчик с приемником. Вывод тактирования мы не подключаем, так как намерены использовать асинхронный режим работы модуля.
Формат кадра:
Рис. 1.14 – Формат кадра UART
Под кадром в данном случае понимается совокупность одного слова данных и сопутствующей информации. Кадр начинается со старт-бита, за которым следует младший разряд слова данных. После старшего разряда слова данных следует один или два стоп-бита.
Если включена схема формирования бита четности, он включается между старшим разрядом слова данных и первым стоп-битом.
Формат кадра определяется разрядом 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.
Рис. 1.15 – Управляющий регистр 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», ведомый микроконтроллер ожидает приема кадра, содержащего адрес. Кадры, не содержащие адреса устройства, игнорируются.
Рис. 1.16 – Управляющий регистр UCSRB
Бит RXCIE – Разрешение прерывания по завершению приема. Если данный разряд установлен в «1», то при установке флага RXC регистра UCSRA генерируется прерывание.
Бит TXCIE – Разрешение прерывания по завершению передачи. Если данный разряд установлен в «1», то при установке флага TXC регистра UCSRA генерируется прерывание.
Бит UDRIE – Разрешение прерывания при очистке регистра данных UART. Если данный разряд установлен в «1», то при установке флага UDRE в регистра UCSRA генерируется прерывание.
Бит RXEN – Разрешение приема. При установке этого разряда в «1» разрешается работа приемника USART/UART и переопределяется функционирование вывода RXD.
Бит TXEN – Разрешение передачи. При установке этого разряда в «1» разрешается работа передатчика UART и переопределяется функционирование вывода TXD.
Бит UCSZ2 – Формат посылок. Этот разряд используется для задания размера слов данных, передаваемых по последовательному каналу. В модулях USART он используется совместно с разрядами UCSZ1 и UCSZ0 регистра UCSRC.
Бит RXB8 – 8 й разряд принимаемых данных. При использовании 9 разрядных слов данных этот разряд содержит значение старшего разряда принятого слова. В случае USART содержимое этого разряда должно быть считано до прочтения регистра данных UDR.
Бит TXB8 – 8 й разряд передаваемых данных. При использовании 9 разрядных слов данных, содержимое этого разряда является старшим разрядом передаваемого слова. Требуемое значение должно быть занесено в этот разряд до загрузки байта данных в регистр UDR.
Рис. 1.17 – Управляющий регистр UCSRC
URSEL – Выбор регистра. Этот разряд определяет, в какой из регистров модуля производится запись. Если разряд установлен в «1», обращение производится к регистру UCSRC. Если же разряд сброшен в «0», обращение производится к регистру UBRRH.
UMSEL – Режим работы USART. Если разряд сброшен в «0», модуль USART работает в асинхронном режиме. Если разряд установлен в «1», то модуль USART работает в синхронном режиме.
UPM1 и UPM0 – Режим работы схемы контроля и формирования четности. Эти разряды определяют функционирование схем контроля и формирования четности.
Рис. 1.18 – Режимы формирования чётности
USBS – Количество стопбитов. Этот разряд определяет количество стоп битов, посылаемых передатчиком. Если разряд сброшен в «0», передатчик посылает 1 стоп бит, если установлен в «1», то 2 стоп бита. Для приемника содержимое этого разряда безразлично.
UCSZ1 и UCSZ0 – Формат посылок. Совместно с разрядом UCSZ2 эти разряды определяют количество разрядов данных в посылках (размер слова).
Таблица 6 – Формат посылок
UCPOL – Полярность тактового сигнала. Значение этого разряда определяет момент выдачи и считывания данных на выводах модуля. Разряд используется только при работе в синхронном режиме. При работе в асинхронном режиме он должен быть сброшен в «0».
Рис. 1.19 – Регистры скорости передачи
USEL – Выбор регистра. Этот разряд определяет, в какой из регистров модуля производится запись. Если разряд установлен в «1», обращение производится к регистру UCSRC. Если же разряд сброшен в «0», обращение производится к регистру UBRRH. UBRR11 – UBRR0 - Значение скорости передачи в бодах.
Установка скорости передачи в асинхронном режиме. При работе в асинхронном режиме скорость обмена определяется не только содержимым регистра UBRR, но и состоянием разряда U2X регистра UCSRA. Если этот разряд установлен в «1», коэффициент деления предделителя уменьшается в два раза, а скорость обмена соответственно удваивается. При работе в синхронном режиме этот разряд должен быть сброшен. Итак, скорость обмена определяется следующими формулами:
асинхронный режим (обычный, U2X = «0»):
BAUD=fCK/ 16 / (UBRR+1); (4.1)
асинхронный режим (ускоренный, U2X = «1»):
BAUD= fCK / 8 / (UBRR +1); (4.2)
синхронный режим ведущего:
BAUD= fCK/ 2 / (UBRR+ 1), где (4.3)
BAUD – скорость передачи в бодах, fCK – тактовая частота микроконтроллера, UBRR – содержимое регистра контроллера скорости передачи (0…4095). Количество изменений информационного параметра несущего периодического сигнала в секунду измеряется в бодах. 1 бод равен одному изменению информационного параметра в секунду. Например, если такт передачи информации равен 0,1 секунды, то сигнал изменяется со скоростью 10 бод. Таким образом, скорость в бодах целиком определяется величиной такта
|