Последовательный приемопередатчик

Все без исключения микроконтроллеры семейства Mega имеют в своем составе либо модули универсального асинхронного (UART), либо универсального синхронно/асинхронного (USART) приемопередатчика. Они предназначены для организации гибкой последовательной связи (рис. 2.28) между устройствами, которые имеют аналогичный последовательный интерфейс.

 
  Последовательный приемопередатчик - student2.ru

Рис. 2.28. Схема соединения микроконтроллеров

по интерфейсу UART

Отличительные особенности:

· Полнодуплексная работа (раздельные регистры последовательного приема и передачи)

· Асинхронная или синхронная работа

· Ведущее или подчиненное тактирование связи в синхронном режиме работы

· Высокая разрешающая способность генератора скорости связи.

· Поддержка формата передаваемых данных с 5, 6, 7, 8 или 9 битами данных и 1 или 2 стоп-битами.

· Аппаратная генерация и проверка бита паритета (четность/нечетность).

· Определение переполнения данных.

· Определение ошибки в структуре посылки.

· Фильтрация шума с детекцией ложного старт-бита и цифровым ФНЧ.

· Три раздельных прерывания по завершении передачи, освобождении регистра передаваемых данных и завершении приема.

· Режим многопроцессорной связи.

· Режим удвоения скорости связи в асинхронном режиме.

ATmega128 содержит два УСАПП: УСАПП0 и УСАПП1. Описание функционирования обоих УСАПП приведено ниже. УСАПП0 и УСАПП1 имеют раздельные регистры ввода-вывода. В режиме совместимости с ATmega103 УСАПП1 не доступен, а также нет регистров UBRR0H и UCRS0C. Это означает, что в режиме совместимости с ATmega103 поддерживается только асинхронная работа УСАПП0.

УСАПП содержит три основных блока: тактовый генератор, передатчик и приемник. Регистры управления используются всеми блоками. Логика тактового генератора состоит из логики синхронизации, связанной с внешним тактовым входом (используется в подчиненном режиме) и генератора скорости связи. Вывод XCK (синхронизация передачи) используется только в режиме синхронной передачи. Передатчик состоит из одного буфера записи, последовательного сдвигового регистра, генератора паритета и управляющей логики, которая поддерживает различные форматы последовательной посылки. Буфер записи позволяет непрерывно передавать данные без каких-либо задержек между передачей посылок. Приемник является более сложным блоком УСАПП, т.к. в его состав входят модули обнаружения данных и синхронизации. Модули обнаружения необходимы для асинхронного приема данных. Помимо модулей обнаружения в приемник входит устройство проверки паритета, сдвиговый регистр, и двухуровневый приемный буфер (UDR). Приемник поддерживает те же последовательные форматы, что и передатчик, и может определить ошибку в посылке (кадре), переполнение данных и ошибку паритета.

Генерация тактовых импульсов. Логика генерации тактовых импульсов формирует основную синхронизацию приемника и передатчика. УСАПП поддерживает четыре режима работы синхронизации: нормальная асинхронная, асинхронная с удвоением скорости, ведущая синхронная и подчиненная синхронная. Бит UMSEL в регистре С управления и статуса (UCSRC) позволяют выбрать асинхронную или синхронную работу. Удвоение скорости (только в асинхронном режиме) управляется битом U2X в регистре UCSRA. При использовании синхронного режима (UMSEL=1) соответствующий бит в регистре направления данных для вывода XCK (DDR_XCK) задает будет ли синхронизация внутренней (ведущий режим) или внешней (подчиненный режим). Вывод XCK активен только при использовании синхронного режима.

Генерация внутренней синхронизации - генератор скорости связи. Внутренняя синхронизация используется для асинхронного и ведущего синхронного режимов работы.

Регистр генератора скорости связи (UBRR) и связанный с ним вычитающий счетчик функционируют как программируемый предделитель или генератор скорости связи. Вычитающий счетчик тактируется системной синхронизацией (fosc) и перезагружается значением из регистра UBRR всякий раз при достижении нулевого значения или после записи регистра UBRRL. Тактовый сигнал генерируется всякий раз при достижении счетчиком нулевого значения. Данный тактовый сигнал является тактовым выходом генератора скорости связи (= fosc/(UBRR+1)). Передатчик делит частоту генератора скорости связи на 2, 8 или 16 в зависимости от режима работы. Модули обнаружения синхронизации и данных приемника подключены непосредственно к тактовому выходу генератора скорости связи. Однако, цифровой автомат модулей обнаружения используют 2, 8 или 16 состояний в зависимости от режима, задаваемого битами UMSEL, U2X и DDR_XCK.

Табл. 2.54 содержит выражения для вычисления скорости связи (в битах в секунду) и вычисления значений UBRR для каждого из рабочих режимов при использовании внутренне генерируемого тактового источника.

Таблица 2.54. Выражения для вычисления установок регистра скорости связи

Режим работы Выражение для вычисления скорости связи Выражение вычисления для требуемого значения UBRR
Нормальный асинхронный режим (U2X=0) Последовательный приемопередатчик - student2.ru Последовательный приемопередатчик - student2.ru
Асинхронный режим с удвоением скорости (U2X=1) Последовательный приемопередатчик - student2.ru Последовательный приемопередатчик - student2.ru
Синхронный ведущий режим Последовательный приемопередатчик - student2.ru Последовательный приемопередатчик - student2.ru

В табл. 2.54 обозначены:

- BAUD - требуемая скорость связи, например 9600 (бит в секунду, бод);

- UBRR - содержимое регистров UBRRH и UBRRL, (0 … 4095);

- fOSC - частота синхронизации системного генератора.

Работа с удвоением скорости связи (U2X). Скорость передачи данных может быть удвоена, если установить бит U2X в регистре UCSRA. Установка данного бита оказывает действие только в асинхронном режиме. При использовании синхронного режима необходимо установить нулевое значение данного бита.

Установка данного бита приводит к уменьшению коэффициента деления частоты генератора скорости связи с 16 до 8, тем самым, удваивая скорость асинхронной связи. Однако следует обратить внимание, что в этом случае приемник сокращает количество выборок с 16 до 8 при обнаружении синхронизации и данных, поэтому, при использовании данного режима необходимо использовать более точные установки скорости связи и более стабильный тактовый источник. Для передатчика удвоение скорости не связано с какими-либо ограничениями.

Внешняя синхронизация. Внешняя синхронизация используется в синхронном подчиненном режиме работы.

Во избежание возможности возникновения метастабильности вход внешней синхронизации с вывода XCK связан с регистром синхронизации. Выход регистра синхронизации проходит через детектор фронтов, а только затем используется приемником и передатчиком. На данный процесс затрачивается два такта синхронизации CPU и, поэтому, максимальная частота внешней синхронизации на выводе XCK ограничивается следующим выражением: Последовательный приемопередатчик - student2.ru .

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

Режим синхронной связи. Если используется режим синхронной связи (UMSEL=1), то вывод XCK используется или как вход синхронизации (подчиненный режим) или как выход синхронизации (ведущий режим). Зависимость между тактовыми фронтами и выборкой данных или изменением данных одна и та же. Основной принцип работы заключается в том, что выборка вводимых данных (на RxD) осуществляется фронтом XCK, который противоположен фронту, по которому происходит изменение выходных данных (на TxD).

Бит UCPOL регистра UCRSC выбирает, какой фронт XCK используется для выборки данных, а какой для изменения данных. При UCPOL=0 изменение данных происходит по нарастающему фронту XCK, а выборка по падающему фронту XCK. Если установлен, бит UCPOL, то изменение данных происходит по падающему фронту XCK, а выборка по нарастающему фронту XCK.

Форматы посылки. Последовательная посылка состоит из бит данных, бит синхронизации (старт и стоп-биты), а также опционального бита паритета для поиска ошибок. УСАПП поддерживает все 30 комбинаций следующих форматов посылок:

· 1 старт-бит

· 5, 6, 7, 8 или 9 бит данных

· без паритета, с битом четности, с битом нечетности

· 1 или 2 стоп-бита

 
  Последовательный приемопередатчик - student2.ru

Посылка начинается со старт-бита, а за ним следует передача бит данных, начиная с самого младшего разряда. Затем следует передача остальных бит данных (максимальное число бит данных 9), которая заканчивается передачей старшего разряда данных. Если разрешена функция контроля паритета, то сразу после бит данных передается бит паритета, а затем стоп-биты. После завершения передачи посылки имеется возможность либо передавать следующую посылку либо перевести линию связи в состояние ожидания (высокий уровень).

Рисунок 2.29 иллюстрирует возможность сочетания форматов посылки. Наличие прямоугольной скобки указывает на опциональность данного формата посылки.

- St - Старт-бит имеет всегда низкий уровень.

- 0…8 - Номер бита данных.

- P - бит паритета: четность или нечетность.

- Sp1,Sp2 - Стоп-бит имеет всегда высокий уровень.

- IDLE - состояние ожидания, в котором приостановлена передача на RxD или TxD. В состоянии ожидания на линии должен быть высокий уровень.

Формат посылки, который используется УСАПП, задается битами UCSZ2:0, UPM1:0 и USBS в регистрах UCSRB и UCSRC. Приемник и передатчик используют одни и те же установки форматов. Изменение установок любого из этих бит может привести к повреждению текущего сеанса связи, как для приемника, так и для передатчика.

Биты выбора длины передаваемых данных (UCSZ2:0) определяют разрядность посылки. Биты режима паритета УСАПП (UPM1:0) разрешают передачу/контроля бита паритета и устанавливают тип паритета: четность, нечетность. Выбрать один или два стоп-бита позволяет бит выбора стоп-бита УСАПП (USBS). Приемник игнорирует второй стоп-бит. Флаг ошибки посылки FE позволяет выявить ситуацию, когда первый стоп-бит равен 0.

Вычисление бита паритета. Бит тета вычисляется путем выполнения логической операции «исключающего ИЛИ» над всеми битами данных. Если используется нечетность, то результат этой операции инвертируется. Сказанное отражено в следующих выражениях:

Последовательный приемопередатчик - student2.ru , где

Pчет - бит четного паритета; Pнечетн - бит нечетного паритета;

dn - n-ый бит данных в посылке.

После разрешения, бит паритета передается между последним битом данных и первым стоп-битом.

Инициализация УСАПП. Все настройки приемопередатчика хранятся в регистрах конфигурации. Это UCSRA, UCSRB и UCSRС, а скорость задается в паре регистров UBBRH:UBBRL (см. ниже).

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

Если необходимо выполнить повторную инициализацию УСАПП, например, для изменения скорости связи или формата посылки, то необходимо убедиться, чтобы во время инициализации передача была приостановлена. Флаг TXC может использоваться для проверки завершения работы передатчика, а флаг RXC - для проверки отсутствия в приемном буфере несчитанных данных. Обратите внимание, что при использовании флага TXC он должен сбрасываться программно перед началом каждой передачи (перед записью в UDR).

В следующем примере показаны функции для простой инициализации УСАПП на Ассемблере. В примере предполагается, что используются управление связью по опросу флагов состояния (не по прерываниям) и фиксированный формат посылки. Скорость связи выступает как параметр функции. Для примера на ассемблере предполагается, что параметр скорости связи записан перед вызовом функции в регистры r17:r16.

Пример кода на Ассемблере

USART_Init:; Установка скорости связиout UBRRH, r17out UBRRL, r16; Разрешение работы приемника и передатчикаldi r16, (1<<RXEN)|(1<<TXEN)out UCSRB,r16; Установка формата посылки: 8 бит данных, 2стоп-битаldi r16, (1<<USBS)|(3<<UCSZ0)out UCSRC,r16ret

Более совершенные процедуры инициализации могут использовать расширенный интерфейс функции, где в качестве параметров выступают, например, формат посылки, отключение прерываний и т.д. Однако, в большинстве приложений используется фиксированные установки скорости связи и управляющих регистров, поэтому, для них представленные примеры могут быть непосредственно включены в основную программу или к процедурам инициализации других модулей ввода-вывода.

Передача данных - Передатчик УСАПП. Работа передатчика УСАПП разрешается путем установки бита разрешения передачи (TXEN) в регистре UCSRB. После разрешения, функция вывода TxD как обычного порта заменяется на функцию выхода последовательной передачи данных. Скорость связи, режим работы и формат посылки должны быть установлены однократно перед началом какой-либо передачи. Если используется синхронная работа, то функция вывода XCK также заменяется на альтернативную - синхронизация передачи.

Передача посылок с 5…8 битами данных. Начало передачи инициируется записью передаваемых данных в буфер передатчика. CPU может загрузить буфер передатчика путем записи в регистр UDR, расположенный в памяти ввода-вывода. Буферизованные данные в буфере передатчика будут перемещены в сдвиговый регистр, после того как он будет готов к отправке новой посылки. Запись в сдвиговый регистр новых данных происходит в состоянии ожидания (когда передача завершена) или сразу после завершения передачи последнего стоп-бита предыдущей посылки. Если в сдвиговый регистр записаны новые данные, то начинается передача одной посылки на скорости, определенной в регистре скорости связи, битом U2X или XCK в зависимости от выбранного режима работы.

В следующих примерах представлены простые функции передачи через УСАПП, использующие опрос флага освобождения регистра данных (UDRE). Если используется посылка с менее 8 бит данных, то старшие биты записанные в UDR игнорируются. Перед вызовом данной функции должна быть выполнена инициализация УСАПП. Для кода на Ассемблере предполагается, что передаваемые данные записаны в регистр R16 перед вызовом процедуры.

Пример кода на Ассемблере

USART_Transmit:; Ожидание освобождения буфера передатчикаsbis UCSRA,UDRErjmp USART_Transmit; Помещение данных (r16) в буфер, отправка данныхout UDR,r16 ret

Перед загрузкой новых данных для передачи в данной функции осуществляется ожидание освобождения буфера передатчика путем опроса флага UDRE.

Отправка посылок с 9 битами данных. Если необходимо передавать 9 бит данных (UCSZ=7), то 9-ый бит данных должен быть записан в бит TXB8 регистра UCSRB, перед тем как младший байт будет записан в UDR. В следующих примерах показаны функции для передачи 9 бит данных. Для кода на Ассемблере предполагается, что отправляемые данные предварительно записаны в регистры R17:R16.

Пример кода на Ассемблере

USART_Transmit:; Ожидание освобождения буфера передатчикаsbis UCSRA,UDRErjmp USART_Transmit; Копирование 9-го бита из r17 в TXB8cbi UCSRB,TXB8sbrc r17,0sbi UCSRB,TXB8; Помещение младший байта данных (r16) в буфер, передача данныхout UDR,r16ret

9-ый бит данных может использоваться для индикации адреса посылки в многопроцессорном режиме связи или в других протоколах.

Флаги и прерывания передатчика. Передатчик УСАПП имеет два флага, которые индицируют его состояние: флаг освобождения регистра данных УСАПП (UDRE) и флаг завершения передачи (TXC). Оба флага могут использоваться для генерации прерываний. Флаг освобождения регистра данных (UDRE) индицирует готовность буфера передатчика принять новые данные. Данный бит устанавливается при освобождении передающего буфера и сбрасывается, когда буфер передатчика содержит данные для передачи, но которые еще не были переданы в сдвиговый регистр. Для совместимости с будущими микроконтроллерами в данный бит необходимо записывать ноль во время записи в регистр UCSRA.

Если записать 1 в бит разрешения прерывания по освобождению регистра данных (UDRIE) в регистре UCSRB, то прерывание по освобождению регистра данных УСАПП будет выполняться всякий раз, когда устанавливается бит UDRE (с учетом того, что общие прерывания разрешены). UDRE сбрасывается при записи в UDR. Если используется управление связью по прерываниям, то в процедуре обработки прерывания по освобождению регистра данных необходимо или записать новые данные в регистр UDR для сброса флага UDRE или выключить прерывание по освобождению регистра данных. В противном случае при выходе из процедуры обработки прерывания сразу возникнет новое прерывание.

Флаг завершения передачи (TXC) принимает единичное значение, если вся посылка в сдвиговом регистре передатчика была полностью сдвинута и в буфере передатчика отсутствуют новые данные для передачи. Флаг TXC автоматически сбрасывается при переходе на вектор обработки прерывания по завершению передачи или программно сбрасывается путем записи в него 1. Флаг TXC полезно использовать при организации полудуплексной связи (например, стандарт RS485), где имеется необходимость перевода передающей стороны в режим приема после завершения передачи, тем самым достигая освобождения шины.

Если разрешено прерывание по завершению передачи (TXCIE=1) в регистре UCSRB, то прерывание по завершению передачи УСАПП выполняется всякий раз, когда флаг TXC принимает единичное состояние (с учетом, что активно общее разрешение прерываний). При переходе на вектор обработки прерывания по завершении передачи УСАПП нет необходимости сбрасывать флаг TXC, т.к. это происходит автоматически.

Генератор паритета. Генератор паритета вычисляет бит паритета для включения в состав последовательной посылки. Если бит паритета установлен (UPM1 = 1), то управляющая логика передатчика вставляет бит паритета между последним битом данным и первым стоп-битом в отправляемой посылке.

Отключение передатчика. Отключение передатчика после сброса TXEN наступит только тогда, когда завершится текущая и ожидаемая передача, т.е. когда в сдвиговом регистре передатчика и буфере передатчика не будет данных для передачи. После отключения передатчика отменяется альтернативное назначение вывода TxD.

Прием данных - Приемник УСАПП. Работа приемника УСАПП разрешается, если записать 1 в бит разрешения работы приемника (RXEN) в регистре UCSRB. После разрешения работы приемника обычное назначение вывода RxD заменяется на альтернативное: вход последовательного ввода данных приемника УСАПП. Скорость связи, режим работы и формат посылки должны быть установлены однократно перед началом выполнения приема данных. Если используется синхронная работа, то вывод XCK будет использоваться для синхронизации связи.

Прием посылок с 5…8 битами данных. Приемник начинает прием данных только после определения действительного старт-бита. Выборка следующих за старт-битом бит данных происходит с частотой равной скорости связи или частотой сигнала XCK и размещается в сдвиговом регистре приемника. Второй стоп-бит приемником игнорируется. После получения первого стоп-бита, т.е. когда последовательная посылка полностью принята и находится в сдвиговом регистре приемника, содержимое сдвигового регистра перемещается в приемный буфер. Приемный буфер считывается при чтении регистра ввода-вывода UDR.

В следующих примерах приведены простые функции для организации приема данных, который основан на опросе состояния флага завершения приема (RXC). Если используется формат посылки с числом бит менее 8, то после считывания содержимого UDR старшие неиспользуемые разряды будет обнулены. Перед вызовом данных функций должна быть выполнена инициализация УСАПП.

Пример кода на Ассемблере

USART_Receive:; Ожидание окончания приема данныхsbis UCSRA, RXCrjmp USART_Receive; Загрузка принятых данных из буфераin r16, UDRret

Прежде чем считывается содержимое буфера приемника, в функциях выполняется ожидание появления данных в этом буфере путем опроса флага RXC.

Прием посылок с 9 битами данных. Если используется передача 9 бит данных (UCSZ=7), то непосредственно перед чтением младшего байта из UDR необходимо считать значение 9-го бита данных RXB8 в регистре UCSRB. Данное правило также относится к флагам статуса FE, DOR и UPE: сначала опрашиваем состояние UCSRA, а только затем считываем данные из UDR. Данное ограничение связано с тем, что принимаемые данные буферизуются вместе с флагами статуса, поэтому, считывание регистра UDR приводит к изменению состояния приемного буфера FIFO и, следовательно, связанные со считанными данными биты TXB8, FE, DOR и UPE будут потеряны. Ниже приведены примеры функций для организации приема 9 бит данных с флагами статуса.

Пример кода на Ассемблере

USART_Receive:; Ожидание окончания приема данныхsbis UCSRA, RXCrjmp USART_Receive; Опрос статусных бит и 9-го бита данных перед чтением данных из буфераin r18, UCSRAin r17, UCSRBin r16, UDR; Если ошибка, то возвратandi r18,(1<<FE)|(1<<DOR)|(1<<UPE)breq USART_ReceiveNoErrorldi r17, HIGH(-1)ldi r16, LOW(-1)USART_ReceiveNoError:; Выделение 9-го бита данных перед выходомlsr r17andi r17, 0x01ret

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

Флаг и прерывание по завершению приема. Приемник УСАПП имеет один флаг, который индицирует состояние приемника.

Флаг завершения приема (RXC) сигнализирует о наличии несчитанных данных в приемном буфере. Данный флаг равен 1, если имеются несчитанные данные, и равен 0, если буфер приемника свободен (т.е. не содержит каких-либо несчитанных данных). Если приемник отключается (RXEN=0), то приемный буфер будет сброшен и флаг RXC примет нулевое значение.

Если установлен бит разрешения прерывания по завершению приема (RXCIE) в регистре UCSRB, то при установке флага RXC программа переходит по вектору обработки данного прерывания (при условии, что активно общее разрешение прерываний). Если используется организация связи с управлением по прерываниям, то при выполнении процедуры обработки запроса на прерывание по завершению приема необходимо считать данные из UDR, чтобы сбросить флаг RXC. В противном случае новое прерывание возникнет сразу после выхода из текущего.

Флаги ошибок приемника. Приемник УСАПП имеет три флага ошибок: ошибка посылки (кадра) FE, переполнение данных DOR и ошибка паритета UPE. Данные флаги входят в состав регистра UCSRA. Общим свойством данных флагов является то, что они хранятся в приемном буфере вместе с той посылкой данных, для которой они отражают состояние ошибок. С учетом этого, необходимо следить, чтобы флаги ошибок считывались из регистра UCSRA перед чтением данных из приемного буфера (UDR), т.к. после чтения из UDR изменяется состояние буфера. Другим сходством флагов ошибок является невозможность программно повлиять на их состояние. Однако, в целях совместимости с УСАПП последующих микроконтроллеров во время записи регистра UCSRA в позициях флагов ошибок необходимо указывать нулевые значения. Ни один из флагов ошибок не может вызвать прерывание.

Флаг ошибки посылки (кадра) FE индицирует состояние первого стоп-бита сохраненной в приемном буфере посылки. Флаг FE равен 0, если стоп-бит имел корректное значение высокого уровня, и равен 1, если некорректное, т.е. 0. Данный флаг может использоваться для выявления условия разсинхронизации, обрыва связи и манипуляции над протоколом связи. Флаг FE не изменяется при установке бита USBS в регистре UCSRC, т.к. приемник игнорирует все стоп-биты за исключением первого. Для совместимости с последующими микроконтроллерами в позиции данного бита необходимо указывать 0 во время записи в регистр UCSRA.

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

Флаг ошибки паритета (UPE) сигнализирует, что во время приема посылки была обнаружена ошибка паритета. Если контроль паритета отключен, то данный флаг всегда имеет нулевое значение. Для совместимости с новыми разработками микроконтроллеров в позицию данного бита необходимо всегда записывать 0 во время записи в регистр UCSRA.

Устройство проверки паритета. Устройство проверки паритета становится активным после установки бита режима паритета УСАПП UPM1. Тип контроля паритета: четность или нечетность задается битом UPM0. После активизации устройство проверки паритета вычисляет паритет принятых данных и сравнивает полученное значение с принятым вместе с этими данными в одной посылке битом паритета. Результат сравнения запоминается в приемном буфере вместе с принятыми данными и стоп-битом. Флаг ошибки паритета UPE может быть считан программно тогда, когда в посылке имеется ошибка паритета. Бит UPE устанавливается, если в посылке, которая может быть считана из приемного буфера, имеется ошибка паритета и во время приема этой посылки был разрешен контроль паритета (UPM1 = 1). Данный бит должен быть опрошен до считывания буфера приемника (UDR).

Отключение приемника. В отличие от передатчика, отключение приемника происходит незамедлительно. При этом, принимаемые данные будут потеряны. После отключения (т.е. когда RXEN=0) приемник далее не поддерживает альтернативные настройки вывода порта RxD. Приемный буфер FIFO сбрасывается после отключения приемника, следовательно, оставшиеся в нем данные будут потеряны.

Сброс приемного буфера. Приемный буфер FIFO сбрасывается после отключения приемника, т.е. полностью освобождается от своего содержимого. Несчитанные данные будут потеряны. Если буфер необходимо очистить в процессе нормальной работы, например, при возникновении ошибок, то необходимо считывать содержимое UDR пока не очиститься флаг RXC. В следующем примере показано, как очистить буфер приемника.

Пример кода на Ассемблере

USART_Flush:sbis UCSRA, RXCretin r16, UDRrjmp USART_Flush

Асинхронный прием данных. УСАПП содержит блоки обнаружения данных и синхронизации для управления асинхронным приемом данных. Логика обнаружения синхронизации используется для синхронизации с внутренним генератором скорости связи для обеспечения возможности ввода последовательной посылки с выв. RxD. Логика обнаружения данных осуществляет выборку и фильтрацию (ФНЧ) каждого входящего бита данных, тем самым увеличивая помехоустойчивость приемника. Рабочий диапазон асинхронного приема определяется точностью встроенного генератора скорости связи, точностью скорости входящей посылки и размером посылки (количество бит).

Асинхронный поиск синхронизации. Логика обнаружения синхронизации синхронизирует во времени работу приемника с входящей последовательной посылкой. На рис. 2.30 иллюстрируется процесс поиска старт-бита во входящей посылке. Частота выборок в 16 раз выше скорости связи для нормального режима и 8 раз выше для режима удвоения скорости. Горизонтальные стрелки иллюстрируют возможный уход синхронизации в процессе выборки. Обратите внимание на более высокую разсинхронизацию во времени при использовании режима удвоения скорости (U2X=1). Выборки, обозначенные номером 0, соответствуют состоянию ожидания на линии RxD (т.е. при неактивной связи).

Если логика обнаружения синхронизации определяет переход из высокого (состояние ожидания) к низкому (старт) состоянию на линии RxD, то инициируется последовательность действий по обнаружению старт-бита. Примем, что выборка 1 означает первая выборка с нулевым значением. Тогда по выборкам 8, 9, 10 в нормальном режиме и выборкам 4, 5, 6 в режиме удвоения скорости определяется действительность старт-бита (на рисунке эти выборки выделены). Если две или более из этих выборок имеют единичное состояние (принцип мажоритарного голосования), то старт-бит отклоняется как ложный, а приемник продолжит поиск следующего перехода из 1 в 0. Однако если определен действительный старт-бит, то логика обнаружения синхронизации оказывается засинхронизированной, после чего вступит в силу логика обнаружения данных. Процесс синхронизации повторяется для каждого старт-бита.

 
  Последовательный приемопередатчик - student2.ru

Рис. 2.30. Выборка старт-бита при U2X=0 и U2X=1

Асинхронный поиск данных. После обнаружения старт-бита начинает работу логика обнаружения данных. Блок обнаружения данных использует цифровой автомат с 16 состояниями в нормальном режиме работы и с 8 состояниями в режиме удвоения скорости. На рис. 2.31 показана выборка i-ого бита данных и бита паритета. Для каждой выборки указан номер, который соответствует номеру состояния цифрового автомата блока обнаружения данных.

 
  Последовательный приемопередатчик - student2.ru

Рис. 2.31. Выборка данных и бит паритета при U2X=0 и U2X=1

Определение логического уровня принимаемого бита данных происходит с помощью мажоритарного голосования по трем выборкам, расположенных по центру принятого бита. Центральные выборки выделены на рисунке путем размещения их в рамке. Процесс мажоритарного голосования состоит в следующем: если две или все три выборки имеют высокие уровни, то принятый бит фиксируется как 1. Если две или три выборки имеют низкие уровни, то принятый бит фиксируется как 0. Процесс мажоритарного голосования, по сути, представляет собой фильтр низких частот для входящего сигнала с вывода RxD. Процесс обнаружения повторяется до полного завершения приема посылки, в т.ч. первый стоп-бит. Обратите внимание, что приемник определяет только первый стоп-бит посылки, а второй игнорируется. На рисунке 2.32 отображен процесс выборки стоп-бита и начальный момент возможности обнаружения старт-бита следующей посылки.

 
  Последовательный приемопередатчик - student2.ru

Рис. 2.32. Выборка стоп-бита и следующего старт-бита

Принцип мажоритарного голосования, рассмотренный на примере стоп-бита, аналогично распространяется и на другие биты в посылке. Если обнаруженный стоп-бит имеет нулевое значение, то устанавливается флаг ошибки посылки FE.

Новое изменение из 1 в 0 будет воспринято как стоп-бит новой посылки, если это изменение произошло после выборки последнего бита, используемого при мажоритарном голосовании. Для режима с нормальной скоростью первая выборка с низким уровнем может находится в позиции, обозначенной (А) на рисунке 2.32. Для режима удвоения скорости появление низкого уровня допускается позже (точка В). Точка (C) соответствует полному завершению передачи стоп-бита. Использование раннего обнаружения старт-бита влияет на рабочий диапазон приемника (допустимое расхождение частот при фиксированном формате посылки).

Описание регистров УСАПП

Регистр данных УСАПП - UDRn

Разряд
  RXBn[7:0]
  TXBn[7:0]
W/R W/R W/R W/R W/R W/R W/R W/R W/R
Исходное значение

Буферные регистры данных передатчика и приемника УСАППn расположены по одному и тому же адресу в области ввода-вывода, обозначенной как регистр данных УСАППn или UDRn. Если выполнять запись по адресу регистра UDRn, то записываемые данные помещаются в буферный регистр данных передатчика TXBn. По аналогии, при чтении регистра UDRn извлекается содержимое буферного регистра данных приемника RXBn.

При использования 5-, 6- или 7-битных форматов данных передатчик игнорирует, а приемник устанавливает нулевые значения неиспользуемых разрядов.

Запись в буфер передатчика можно выполнять, если установлен флаг UDREn в регистре UCSRAn. Данные записанные в UDRn при сброшенном флаге UDREn будут игнорированы передатчиком УСАППn. Если выполнена запись в приемный буфер и при этом работа передатчика была разрешена, то после освобождения сдвигового регистра передатчик загрузит в него значение из буферного регистра. После этого выполняется передача данных на выводе TxDn. Приемный буфер организован как двухуровневый буфер FIFO (первый пришел - последний вышел). Буфер FIFO изменяет свое состояние, если выполнено чтение из приемного буфера. Вследствие такой организации буфера необходимо следить, чтобы по данному адресу не использовались инструкции «чтение-модификация-запись» (SBI и CBI). Также нужно быть внимательным при использовании инструкций тестирования бита (SBIC и SBIS), т.к. их выполнение может также изменить состояние буфера FIFO.

Регистр А управления и статуса УСАПП – UCSRnA.

Разряд
  RXCn TXCn UDREn FEn DORn UPEn U2Xn MPCMn
W/R R W/R R R R R W/R W/R
Исходное значение

Бит7 – RXCn. Флаг завершения приема УСАПП. Данный флаг устанавливается, если в приемном буфере содержатся несчитанные данные и сбрасывается, когда приемный буфер свободен (т.е., не содержит несчитанных данных). Если приемник отключается, то приемный буфер сбрасывается и, следовательно, флаг RXCn принимает нулевое значение. Флаг RXCn может использоваться для генерации прерывания по завершению приема (см. описание бита RXCIEn).

Бит6 – TXCn. Флаг завершения передачи УСАПП. Данный флаг устанавливается, если вся посылка из сдвигового регистра передатчика полностью передана и в передающем буфере UDRn нет новых данных для передачи. Флаг TXCn автоматически сбрасывается при переходе на вектор прерывания по завершению передачи или сбрасывается программно путем записи 1 в позицию данного бита. Флаг TXCn может служить источником для генерации прерывания по завершению передачи (см. также описание бита TXCIEn).

Бит5 – UDREn. Флаг освобождения регистра данных УСАПП. Флаг UDREn индицирует о готовности приемного буфера UDRn к приему новых данных. Если UDREn=1, то буфер свободен и, следовательно, готов к записи. Флаг UDREn может служить источником для генерации прерывания по освобождению регистра данных (см. описание бит UDRIEn). UDREn устанавливается после сброса, индицируя о готовности передатчика.

Бит4 – FEn. Ошибка посылки. Данный бит устанавливается, если при приеме посылки, находящейся на выходе из приемного буфера, была определена ошибка в структуре посылки. Под ошибкой структуры в данном случае понимается нулевое значение первого стоп-бита в этой посылке. Значение данного бита действительно до чтения содержимого приемного буфера (UDRn). Флаг FEn принимает нулевое значение, если принятый стоп-бит имел правильное единичное значение. При записи в регистр UCSRnA в позиции данного бита необходимо указывать 0.

Бит3 – DORn. Флаг переполнения данных. Данный бит устанавливает, если выявлено условие переполнения. Переполнение данных возникает, если заполнен приемных буфер (две посылки), новая посылка полностью принята в приемный сдвиговый регистр, а также обнаружен новый старт-бит. Значение данного бита действительно до чтения содержимого приемного буфера (UDRn). При записи в регистр UCSRnA в позиции данного бита необходимо указывать лог. 0.

Бит2 – UPEn. Ошибка паритета. Данный бит устанавливается, если следующая посылка в приемном буфере характеризуется ошибкой паритета, если во время приема этой посылки был разрешен контроль паритета (UPMn1 = 1). Данный бит имеет действительное значение до чтения приемного буфера (UDRn). При записи в регистр UCSRnA в позиции данного бита необходимо указывать 0.

Бит1 - U2Xn. Удвоение скорости связи УСАПП. Данный бит оказывает влияние только в асинхронном режиме связи. В синхронном режиме в данный бит необходимо записать 0. Запись в данный бит 1 уменьшает в два раза значение коэффициента деления скорости связи с 16 до 8, тем самым удваивая скорость передачи данных в асинхронном режиме.

Бит0 – MPCMn. Режим многопроцессорной связи. Данный бит разрешает режим многопроцессорной связи. Если в бит MPCMn записать 1, то все входящие посылки принимаемые приемником УСАПП будут игнорироваться, если они не содержат адресной информации. Установка бита MPCMn не влияет на работу передатчика.

Регистр B управления и статуса УСАППn - UCSRnB

Разряд
  RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n
W/R W/R W/R W/R W/R W/R W/R Чт. W/R
Исходное значение

Бит7 – RXCIEn. Разрешение прерывания по завершению приема. Запись в данный бит 1 разрешает прерывание по флагу RXCn. Прерывание по завершению приема УСАППn генерируется, если RXCIEn=1 и флаг общего разрешения прерываний I=1 (в регистре SREG), а также установлен бит RXCn в регистре UCSRnA.

Бит6 – TXCIE. Разрешение прерывания по завершению передачи. Запись в данный бит 1 разрешает прерывание по флагу TXCn. Прерывание по завершению передачи УСАППn генерируется, если TXCIEn=1 и флаг общего разрешения прерываний I=1 (в регистре SREG), а также установлен бит TXCn в регистре UCSRnA.

Бит5 – UDRIEn. Разрешение прерывания по освобождению регистра данных УСАПП. Установка данного флага разрешает прерывание по флагу UDREn. Прерывание по освобождению регистра данных генерируется, если бит UDRIEn=1, флаг общего разрешения прерываний I=1 (в регистре SREG) и установлен бит UDREn в регистре UCSRnA.

Бит4 – RXENn. Разрешение работы приемника. Запись в данный бит 1 приводит к разрешению работы приемника УСАППn. При этом, приемник формирует отключающий сигнал, который разрешает альтернативную функцию вывода RxDn. Отключение приемника приводит к сбросу приемного буфера, теряя при этом значения флагов FEn, DORn и UPEn.

Бит3 – TXENn. Разрешение работы передатчика. Запись в данный бит 1 разрешает работу передатчика УСАППn. После этого передатчик генерирует отключающий сигнал, который активизирует альтернативную функцию вывода TxDn. Отключение передатчика (запись лог. 0 в TXENn) вступит в силу только по завершении генерации посылки, т.е. когда освободятся и сдвиговый регистр и буфер передатчика. После отключения вывод TxDn возвращается к выполнению функции обычной линии ввода-вывода.

Бит2 - UCSZn2. Формат данных. Бит UCSZn2 вместе с битами UCSZn1:0 в регистре UCSRnC задают количество бит данных в посылке, как для приемника, так и для передатчика.

Бит1 - RXB8n. Значение 8-ого разряда принятых данных. RXB8n содержит значение 9-го бита принятой посылки с 9-битным форматом. Данный бит необходимо считать прежде, чем будут считаны младшие 8 бит из регистра UDRn.

Бит0 - TXB8n. 8-ой разряд передаваемых данных. TXB8n содержит значение 9-ого бита данных для передачи посылки с 9-битным форматом. Данный бит необходимо записать перед тем, как будут записаны младшие разряды данных в UDRn.

Регистр С управления и статуса УСАПП - UCSRnC

Разряд
  - UMSELn UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn
W/R W/R W/R W/R W/R W/R W/R W/R W/R
Исходное значение

Примечание. Регистр не доступен в режиме совместимости с ATmega103.

Бит7 -Резервный бит.Данный бит зарезервирован для будущего использования. Однако для совместимости с будущими микроконтроллерами при записи в регистр UCSRnC в позицию данного бита необходимо записывать лог. 0.

Бит6 – UMSELn. Выбор режима УСАПП. Данный бит позволяет переключаться между синхронным и асинхронными режимами последовательной связи (табл. 2.55).

Таблица 2.55. Установки бита UMSELn

UMSELn Режим связи
Асинхронный
Синхронный

Биты 5,4 – UPMn 1,0. Режим паритета. Данные бита разрешают и устанавливают тип генерируемого и контролируемого паритета. После разрешения паритета передатчик автоматически генерирует и передает бит паритета в каждой посылке. Приемник генерирует бит паритета для принятых данных и сравнивает его со значением принятого в этой посылке бита паритета, а по результату сравнения устанавливает флаг ошибки паритета UPEn в регистре UCSRnA (табл. 2.56).

Таблица 2.56. Установки бит UPMn

UPMn1 UPMn0 Режим паритета
Отключен
(Резерв)
Четность
Нечетность

Бит3 – USBSn. Выбор числа стоп-бит. Данный бит определяет сколько стоповых бит вставляет передатчик при генерации посылки. Приемник игнорирует эту настройку (табл. 2.57).

Таблица 2.57. Установки бита USBSn

USBSn Число стоп-бит
1 бит
2 бита

Биты 2,1 - UCSZn1,0. Формат данных. Биты UCSZn1,0 вместе с UCSZn2 в регистре UCSRnB задают количество бит данных в посылке, как для приемника, так и для передатчика (табл. 2.58).

Таблица 2.58. Установки бит UCSZn

UCSZn2 UCSZn1 UCSZn0 Формат данных
5 бит
6 бит
7 бит
8 бит
Резерв
Резерв
Резерв
9 бит

Бит0 – UCPOLn. Полярность синхронизации. Данный бит используется только в синхронном режиме. Если используется асинхронный режим, то в данный бит необходимо записать 0. В синхронном режиме бит UCPOLn определяет соотношение между выборкой входящих данных и обновлением передаваемых данных и сигналом тактирования синхронной связи (XCKn) (табл. 2.59).

Таблица 2.59. Установки бит UCPOLn

UCPOLn Изменение передаваемых данных на выходе TxDn Выборка принимаемых данных на входе RxDn
Нарастающий фронт XCKn Падающий фронт XCKn
Падающий фронт XCKn Нарастающий фронт XCKn

Регистры скорости связи УСАПП - UBRRnL и UBRRnH

Разряд
UBRRnH - - - - UBRRn[11:8]
UBRRnL UBRRn[7:0]
W/R R R R R W/R W/R W/R W/R
  W/R W/R W/R W/R W/R W/R W/R W/R
Исходное значение

Регистр UBRRnH не доступен в режиме совместимости с ATmega103

Биты 15:12.Зарезервированные разряды.

Биты 11:0 - UBRRn11:0. Регистр скорости связи УСАПП. UBRR - 12-разрядный регистр, который задает значение скорости связи УСАПП. Регистр UBRRnH содержит 4 старших разряда, а UBRRnL 8 младших разрядов значения скорости УСАППn. Если во время передачи или приема изменить скорость связи, то сеанс связи будет нарушен. Запись в регистр UBRRnL инициирует обновление предделителя скорости связи.

Наши рекомендации