Перейти к основному содержимому

UART

UART (универсальный асинхронный приемо-передатчик) осуществляет асинхронный полнодуплексный обмен данными по последовательным линиям RX и TX с другими устройствами UART.

Основные характеристики:

  • изменение скорости передачи заданием коэффициента делителя частоты;
  • изменение формата посылки. От 1 до 8 бит в слове данных, 1 или 2 стоп-бита, бит контроля четности (4 режима: odd, parity, space, mark);
  • входной и выходной FIFO буферы позволяют снизить количество прерываний от UART. Количество слов в буфере (глубина буфера), при которой формируется прерывание, задается программно. Глубина буферов 8 слов;
  • тестовые режимы:
    • эхо-режим;
    • режим внутренней петли;
    • режим внешней петли.
  • 9-битный режим с автоматической сверкой адреса для систем из нескольких UART;
  • высокоскоростной режим (четыре семпла на бит вместо шестнадцати);
  • аппаратный контроль обмена через сигналы RTS и CTS;
  • детектирование и формирование break-сигнала;
  • тайм-аут программируемой длительности;
  • возможность инвертирования логических уровней передачи сигнала.

Структурная схема​

Структурная схема UART

UART состоит из следующих блоков:

  • REGISTERS – блок для хранения управляющих данных и статусов;
  • FIFO_TX – буфер передатчика;
  • FIFO_RX – буфер приемника;
  • CONTROL – управляющий автомат модуля UART;
  • RECEIVER – приемник, реализующий функцию приема интерфейса;
  • TRANSMITTER – передатчик, реализующий функцию передачи интерфейса;
  • CLOCK_DIVIDER – делитель частоты.

Делитель частоты​

Структурная схема делителя частоты

Делитель частоты модуля UART состоит из двух делителей. Первый делитель осуществляет деление системной частоты на BDR – содержимое специальных регистров UARTBDR0 и UART_BDR1 (от 0 до 65535). Этот делитель определяет скорость обмена. Полученная частота (_sampling_clock) – это частота, с которой приемник сканирует линию RX до приема валидного старт бита.

Второй делитель делит частоту sampling_clock на 16 или на 4 в высокоскоростном режиме. С полученной частотой (baud_rate_clock) передатчик выдает биты на линию TX, а приемник сканирует линию RX в процессе приема посылки. На время передачи одного бита приходится несколько (16 или 4) семпла линии RX, для того чтобы приемник мог синхронизироваться по изменению сигнала RX в процессе работы. Частота работы взаимодействующих UART пересинхронизируется (счетчик-делитель сбрасывается) по старт-биту и каждый раз, когда меняется уровень на линии RX в процессе приема посылки. Это позволяет справиться с «уходом» тактовых частот UART. При BDR = 0 делитель частоты не работает, соответственно не работают приемник и передатчик.

Для установления необходимой скорости обмена необходимо записать в регистры UART_BDR0 и UART_BDR1 соответствующий коэффициент деления, который рассчитывается по формуле:

BDR=FCLK16⋅baud_rate_clockBDR = \frac {F_{CLK}}{16 \cdot baud\_rate\_clock}

где FCLK – частота тактирования системы, desired_baud_rate – желаемая скорость передачи (в бодах или в бит/с).

При этом если по формуле получилось не целое число, то в результате округления реальная частота обмена будет несколько отличаться от желаемой. Реальная частота обмена (baud_rate_clock) в бодах рассчитывается по формуле:

baud_rate_clock=FCLK16⋅BDRbaud\_rate\_clock = \frac {F_{CLK}}{16 \cdot BDR}

Для самого длинного из возможных форматов посылки (12 бит), если ресинхронизации в процессе происходить не будет (то есть посылка состоит из одних единиц/нулей кроме старт/стоп-бита), максимально допустимая разница частот, взаимодействующих UART – 3.6% (2% в высокоскоростном режиме). При меньшем формате посылки максимально допустимая разница частот соответственно увеличивается.

Высокоскоростной режим​

При выставлении бита «Высокоскоростной режим» регистра UART_CFG0 в «1» меняется коэффициент второго делителя частоты с 16 на 4. Таким образом, в высокоскоростном режиме делитель частоты осуществляет деление на 4*BDR, скорость передачи увеличивается в 4 раза. Формулы выше остаются справедливыми, если заменить число 16 на число 4. При этом синхронизация происходит менее точно. Этот режим рекомендуется использовать только при полном отсутствии помех на линии.

Приемник​

После сброса устройства приемник выключен. Для включения необходимо записать «1» в бит RE регистра UARTCTRL. После этого приемник начинает сканировать линию RX c частотой _sampling_clock, ожидая старт-бита (уровня логического нуля). При выключении приемника записью в RE «0», UART перестает сканировать линию, однако если в этот момент шла операция приема данных, она будет закончена, и данные будут помещены в буфер приемника.

UART считает старт-битом логический «0» длительностью больше, чем половина времени передачи одного бита (9/16 baud_rate_clock, то есть 9 семплов sampling_clock). Если уровень логического «0» держится меньшее время, это считается помехой, и UART продолжает сканировать линию на наличие старт-бита. Если логический «0» держится 9 семплов, то приемник начинает сканировать линию с меньшей в 16 раз частотой baud_rate_clock (таким образом, что сканирование на временной диаграмме происходит в предполагаемой середине каждого бита), помещая в регистр сдвига значение на линии RX. Когда вся посылка принята (длина посылки определяется форматом посылки, задающимся в регистрах UART_CFG0 и UART_CFG1), приемник формирует статус наличия break, ошибки четности/совпадения адреса и стоп-бита (а также соответствующие прерывания, если их формирование разрешено в регистре UART_MSK0) и помещает их и принятое слово данных в буфер приемника. Если битов в слове данных выставлено меньше восьми в регистре UART_CFG1, то старшие разряды данных заполняются нулями. Если буфер заполнен, формируется прерывание переполнения буфера приемника. Временная диаграмма работы приемника представлена на рисунке ниже.

Временная диаграмма работы приемника

Между приемником и выводом RX находится простейший фильтр нижних частот: три последних значения сигнала RX (взятых с частотой sampling_clock) попадают в мажоритар 2 из 3, затем результат поступает в приемник. Таким образом, одиночные помехи линии длиной меньше периода sampling_clock не поступают в приемник. Помехи длиной больше периода sampling_clock могут привести к ошибочной ресинхронизации и ошибке приема.

Буфер приемника​

Принятые данные попадают в буфер приемника, откуда могут быть вычитаны программно через регистр UART_RX0. Буфер имеет 11 разрядов, 8 бит данных и 3 разряда под статус наличия break, ошибки четности/совпадения адреса и стоп-бита. Биты RBRPL, RBF, RBNE регистров UART_ST0 и UART_ST1 позволяют контролировать заполненность буфера. Все эти биты равны «0», если приемник выключен.

Передатчик​

После сброса устройства передатчик выключен, для включения необходимо записать «1» в бит TE в UART_CTRL. При выключении передатчика записью в TE «0» UART сначала завершает передачу текущего слова данных.

Передатчик выдает биты слова данных, полученного из буфера передатчика, с частотой baud_rate_clock в соответствии с форматом посылки, указанным в UARTCFG0 и UART_CFG1. Примечание: если передатчик и буфер передатчика пусты, от момента записи в UART_TX до начала передачи, может пройти время меньше или равное периоду _baud_rate_clock (время передачи одного бита). Это происходит из-за того, что передатчик ждет следующего импульса baud_rate_clock, чтобы начать передачу посылки.

Буфер передатчика​

Передатчик берет данные для отправки из буфера передатчика, куда их можно поместить записью в регистр UART_TX. Буфер передатчика имеет 9 разрядов, 8 из них для передаваемого слова данных. 9-ый бит используется только в 9-битном режиме как идентификатор адреса и передается вместо бита четности. Биты TBNF, TBRPL, TBE, TI регистра UART_ST1 позволяют контролировать заполненность буфера. Все эти биты равны 0, если передатчик выключен. Если после начальной конфигурации и задания маски прерываний включить передатчик, сработают все эти прерывания.

Прерывания​

По любому из битов UART_ST0 или UART_ST1 можно разрешить формировать прерывание, записав «1» в соответствующий бит регистра макси прерываний UART_MSK0 или UART_MSK1 (расположение битов в регистрах одинаково).

Прерывание возникает, как только соответствующее событие было зафиксировано. Из-за наличия буфера может быть не очевидно, при приеме какого именно слова возникла ошибка, поэтому статус наличия break, ошибки четности/совпадения адреса и ошибки стоп-бита данного слова доступны также через младшие разряды регистра UART_RX1.

Таймер тайм-аута​

В режиме сканирования линии приемником каждый период baud_rate_clock инкрементируется счетчик-таймера тайм-аута. Он не работает, если приемник выключен. Таймер сбрасывается в «0», как только зафиксирован валидный старт-бит и остается в «0» во время приема данных. После приема стоп-бита, он начинает считать снова. Таймер сбрасывается в «0», при записи «1» в бит RTT регистра UARTCTRL и остается в «0» до момента записи «0» в RTT. Максимальное значение, до которого досчитывает таймер, определяется в разрядах TV регистра UART_CFG0. Возможные значения: 2, 4, 8, 16, 32, 64, 128, 256 периодов _baud_rate_clock. Досчитав до этого значения, таймер останавливается, статусный бит RTO переходит в «1» и генерируется соответствующее прерывание, если его формирование разрешено в регистре UART_MSK0.

Генерация и распознавание сигнала break​

Сигнал break, то есть уровень логического «0» на линии на время большее времени передачи посылки, используется как индикатор серьезного сбоя в работе. Даже если никакая информация
не может быть передана из-за слишком большой разности в частотах двух UART, долгий логический «0» на линии может быть правильно принят и интерпретирован приемником. Также в большинстве физических реализаций при разрыве линии сигнал RX также принимает значение логического «0».

Приемник засчитывает за сигнал break посылку, в которой старт-бит, все биты данных, бит четности (если, конечно, бит четности включен в регистре UART_CFG1) и стоп-бит равны «0» (ошибка стоп-бита при этом не возникает). В момент приема последнего из битов бит BD переходит в «1» и генерируется соответствующее прерывание, если его формирование включено в регистре UART_MSK0. 
В буфер приемника при этом записывается одно слово из восьми нулей с выставленным в «1» битом BD. Break сигнал может длиться и дольше, приемник ждет конца сигнала, то есть перехода линии RX в «1», и только потом продолжает работу.

Передатчик выдает сигнал break при записи «1» в бит SB регистра UARTCTRL. 
Если запись произошла в момент передачи слова, то передача будет закончена перед выдачей сигнала break. Линия TX удерживается в состоянии логического «0» до момента записи «0» в разряд SB, таким образом продолжительность сигнала определяется программно. После окончания сигнала линия TX удерживается в «1» на 12 периодов _baud_rate_clock
, чтобы удаленный приемник смог корректно определить конец сигнала, предпринять необходимые действия и начать прием следующей посылки.

Особые режимы работы​

Выбор режима работы происходит записью в разряды MODE регистра UART_CFG1.

Эхо-режим​

В этом режиме все данные принятые UART с линии RX побитово ретранслируются на линию TX. Передатчик при переходе в этот режим работы автоматически выключается, программно включить его в регистре UART_CTRL нельзя.

Режим внутренней петли​

Пины UART TX и RX замыкаются внутри устройства, таким образом, выдаваемая передатчиком информация может быть принята приемником. При этом на линию TX выдается высокий уровень. Этот режим применяется для тестирования работы UART без использования линии и другого UART.

Режим внешней петли​

Линии TX и RX замыкаются внутри устройства, таким образом, вся информация, принятая по линии RX, попадает, на линию TX. Отличие от эхо-режима в том, что эта информация не фиксируется приемником UART. Приемник и передатчик при переходе в этот режим работы автоматически выключаются, программно включить их записью в UART_CTRL нельзя.

9-битный режим​

9-бит режим, или режим с аппаратным детектированием и сверкой адреса, необходим для соединения по UART одного ведущего устройства с несколькими ведомыми. Этот режим работы может быть полезен при реализации сетевых протоколов, например Modbus RTU. При работе в этом режиме формат посылки тот же, что и в обычном режиме, но вместо бита четности ведущий UART передает бит, определяющий тип данных в посылке: 1 - в посылке содержится адрес ведомого устройства, 0 - в посылке обычное слово данных (настройки бита четности PE и PT в регистрах конфигурации игнорируются в 9-бит режиме). Ведомое устройство распознает свой адрес, принимает последующие данные и/или передает ведущему устройству свои данные.

По умолчанию после включения 9-битного режима приемник не принимает слова данных, а адреса (слова данных с «1» в девятом бите) сравнивает с заданными в регистрах UART_NBADDR0 и UART_NBADDR1 (обычно один адрес индивидуальный для ведомого, а второй – широковещательный, общий для всех ведомых). При этом приемник сравнивает только биты адреса незамаскированные регистром UART_NBMSK. Если адрес совпадает, то приемник посылает его в буфер вместе с 3-мя статусными битами (при чтении этого слова бит PE/AM регистра UART_RX1 установлен в «1», показывая, что это слово – адрес), устанавливает соответствующий статус (PE/AM) в регистре UART_ST0 и формирует прерывание по совпадению адреса, если его формирование разрешено в регистре UART_MSK0. После этого приемник начинает принимать последующие слова данных (с «0» вместо бита четности) и продолжает делать это, пока не получит новую посылку с адресом («1» вместо бита четности). Если в формате посылки выставлено меньше восьми битов в слове, то перед сверкой идет дополнение нулями до восьми разрядов (в 9-битном режиме рекомендуется все же выставить 8 бит в слове, хотя это не обязательно). Передатчик вместо бита четности отправляет значение бита SADDR регистра UART_CTRL.

Аппаратный контроль обмена​

Для установления аппаратного контроля обмена необходимо соединить вывод RTS (Request To Send, запрос на отправку данных, выходной сигнал) с выводом CTS того UART, с которым происходит обмен, и соединить вывод CTS (Clear To Send, запрос на получение данных, входной сигнал) с выводом RTS того UART, с которым происходит обмен. При работе в этом режиме передатчик начинает отправку посылки, только если сигнал CTS равен «0».

При работе в этом режиме при приеме старт-бита оценивается состояние буфера приемника. Если в результате приема данного слова буфер приемника будет полностью заполнен, то сигнал RTS переходит из «0» в «1», запрещая удаленному передатчику отправлять следующие данные. Чтение регистра RX переводит RTS обратно из «1» в «0», разрешая удаленному передатчику дальнейшую отправку. Если приемник выключен, RTS равно «1».

В других режимах работы сигнал RTS управляется битом RTS регистра UART_CTRL. Этот сигнал можно использовать для управления внешним приемопередатчиком физического уровня, например RS-485.

№АббревиатураДоступОписание
2400hUART_CFG0RW*Регистр конфигурации 0
2401hUART_CFG1RW*Регистр конфигурации 1
2404hUART_BDR0RW*Регистр настройки скорости обмена 0
2405hUART_BDR1RW*Регистр настройки скорости обмена 1
2408hUART_TXFIFOLVL0RWРегистр контроля уровня заполнения буфера передатчика 0
2409hUART_TXFIFOLVL1RWРегистр контроля уровня заполнения буфера передатчика 1
240ChUART_RXFIFOLVL0RWРегистр контроля уровня заполнения буфера приемника 0
240DhUART_RXFIFOLVL1RWРегистр контроля уровня заполнения буфера приемника 1
2410hUART_NBMSKRWРегистр маски адреса 9-битного режима
2414hUART_NBADDR0RWРегистр фильтра адреса в 9-битном режиме 0
2415hUART_NBADDR1RWРегистр фильтра адреса в 9-битном режиме 1
2418hUART_MSK0RWРегистр маски прерываний 0
2419hUART_MSK1RWРегистр маски прерываний 1
241ChUART_CTRLRWРегистр управления
2420hUART_TXWРегистр буфера передатчика
2424hUART_RX0RРегистр буфера приемника 0
2425hUART_RX1RРегистр буфера приемника 1
2428hUART_ST0RРегистр статусов 0
2429hUART_ST1RРегистр статусов 1

*–Запись в регистры UART_CFG0, UART_CFG1, UART_BDR0, UART_BDR1 запрещена аппаратно во время работы UART, т.к. изменение содержимого этих регистров во время работы может привести к ошибкам передачи или приема. Поэтому запись в регистры производится один раз в начале работы. Если необходимо изменить содержимое регистров, то приемник и передатчик должны быть выключены, и текущие операции приема/передачи должны закончиться. Когда эти условия выполнены, бит CRWE регистра UART_ST1 переходит в «1», показывая, что запись в эти регистры разрешена.

UART_CFG0​

Бит76543210
НазначениеPTNSBHSEРезервTV
Начальное значение04

PT (Parity Type) – тип контроля четности:

  • 11b – mark, бит четности всегда равен «1»;
  • 10b – space, бит четности всегда равен «0»;
  • 01b – odd, бит четности формируется как XNOR всех битов данных в слове;
  • 00b – even, бит четности формируется как XOR всех битов данных в слове.

NSB (Number of Stop Bits) – количество стоп-битов в посылке:

  • 1 – два стоп-бита. Приемник не проверяет наличие второго стоп-бита, эта настройка влияет только на передатчик;
  • 0 – один стоп-бит. HSE (High Speed Enabled) – высокоскоростной режим:
  • 1 – высокоскоростной режим включен. Коэффициент делителя частоты равен 4;
  • 0 – высокоскоростной режим выключен. Коэффициент делителя частоты равен 16.

TV (Time-out Value) – длительность тайм-аута в периодах baud_rate_clock:

  • 111b – 256;
  • 110b – 128;
  • 101b – 64;
  • 100b – 32;
  • 011b – 16;
  • 010b – 8;
  • 001b – 4;
  • 000b – 2.

UART_CFG1​

Бит76543210
НазначениеINVEMODECHRLPE
Начальное значение070

INVE (Inversion Enabled) – инверсия сигналов линии:

  • 1 – сигналы линии обмена (RX, TX, RTS, CTS) инвертированы. Активный уровень для RX и TX – «0», для RTS и CTS – «1»;
  • 0 – сигналы линии обмена не инвертированы.

MODE – режим работы:

  • 101b – аппаратный контроль обмена;
  • 100b – 9-битный режим;
  • 011b – режим внешней петли;
  • 010b – режим внутренней петли;
  • 001b – эхо-режим;
  • 000b – обычный режим работы.

CHRL (Character Length) – размер слова данных:

  • 111b – 8 бит;
  • 110b – 7 бит;
  • 101b – 6 бит;
  • 100b – 5 бит;
  • 011b – 4 бита;
  • 010b – 3 бита;
  • 001b – 2 бита;
  • 000b – 1 бит.

PE (Parity Enabled) – контроль четности:

  • 1 – контроль четности включен, бит четности передается после слова данных;
  • 0 – контроль четности выключен, бит четности не формируется.

UART_BDR0​

Бит76543210
НазначениеBDR
Начальное значение0

BDR – коэффициент деления, младшая часть.

UART_BDR1​

Бит76543210
НазначениеBDR
Начальное значение0

BDR – коэффициент деления, старшая часть.

UART_TXFIFOLVL0​

Бит76543210
НазначениеРезерв*TXFIFOLVL
Начальное значение0

* – Не изменять начальное значение.

TXFIFOLVL (Transmitter FIFO Buffer Level) – заданный уровень буфера передатчика. Когда количество слов в буфере передатчика меньше или равно заданному уровню, разряд TBRPL регистра UART_ST1 равен «1». Таким образом, в момент опустошения буфера до заданного уровня, бит TBRPL регистра UART_ST1 переходит из «0» в «1».

UART_TXFIFOLVL1​

Бит76543210
НазначениеРезерв*
Начальное значение0

* – Не изменять начальное значение.

UART_RXFIFOLVL0​

Бит76543210
НазначениеРезерв*RXFIFOLVL
Начальное значение0

*– Не изменять начальное значение.

RXFIFOLVL (Receiver FIFO Buffer Level) – заданный уровень буфера приемника. Когда количество слов в буфере приемника больше или равно заданному уровню, разряд RBRPL регистра UART_ST0 равен «1». Таким образом, в момент заполнения буфера до заданного уровня, бит RBRPL регистра UART_ST0 переходит из «0» в «1».

UART_RXFIFOLVL1​

Бит76543210
НазначениеРезерв*
Начальное значение0

* – Не изменять начальное значение.

UART_NBMSK​

Содержимое этого регистра имеет эффект только в 9-битном режиме.

Бит76543210
НазначениеNBMSK
Начальное значение255

NBMSK (Nine Bit Mode Address Mask) – маска адреса в 9-битном режиме:

  • 1 – этот разряд сравнивается при приеме адреса в 9-битном режиме;
  • 0 – этот разряд не сравнивается при приеме адреса в 9-битном режиме.

UART_NBADDR0​

Содержимое этого регистра имеет эффект только в 9-битном режиме.

Бит76543210
НазначениеNBA2
Начальное значение0

NBA2 (Nine Bit Mode Address 2) – адрес устройства в 9-битном режиме №2.

UART_NBADDR1​

Содержимое этого регистра имеет эффект только в 9-битном режиме.

Бит76543210
НазначениеNBA1
Начальное значение0

NBA1 (Nine Bit Mode Address 1) – адрес устройства в 9-битном режиме №1.

UART_MSK0​

Возможно формирование прерывания по любому биту статусного регистра UART_ST0. Расположение битов в UART_ST0 и UART_MSK0 аналогично.

Бит76543210
НазначениеRBRPLRBFOERTOBDPE/AMFECTSIC
Начальное значение0

Для каждого из битов справедливо:

  • 1 – данное прерывание формируется;
  • 0 – данное прерывание не формируется.

UART_MSK1​

Возможно формирование прерывания по любому биту статусного регистра UART_ST1. Расположение битов в UART_ST1 и UART_MSK1 аналогично.

Бит76543210
НазначениеРезервCTSICRWETBNFTBRPLTBETIRBNE
Начальное значение0

Для каждого из битов справедливо:

  • 1 – данное прерывание формируется;
  • 0 – данное прерывание не формируется.

UART_CTRL​

Бит76543210
НазначениеРезервRETESBRTSRTTSADDR
Начальное значение0

RE (Receiver Enabled):

  • 1 – приемник включен;
  • 0 – приемник выключен, если в момент выключения происходил прием слова, он будет завершен перед выключением.

TE (Transmitter Enabled):

  • 1 – передатчик включен;
  • 0 – передатчик выключен, если в момент выключения происходила передача слова, она будет завершена перед выключением.

SB (Send Break) – устанавливает линию TX в «0». Если в этот момент происходила передача посылки, она будет завершена перед выдачей break сигнала. Сигнал заканчивается при записи «0» в этот бит, таким образом длительность сигнала break задается программно. После конца сигнала break линия TX устанавливается в «1» на 12 периодов baud_rate_clock. После этого передатчик продолжает работу.

RTS (Request To Send) – управляет сигналом RTS:

  • 1 – пассивный уровень сигнала RTS (RTS установлен в «1», если инверсия сигналов линии не включена битом INVE регистра UART_CFG1);
  • 0 – активный уровень сигнала RTS (RTS установлен в «0», если инверсия сигналов линии не включена битом INVE регистра UART_CFG1).

Значение этого бита не имеет эффекта в режиме работы «Аппаратный контроль обмена», так как в этом режиме UART сам управляет сигналом RTS.

RTT (Reset Timeout Timer) – сбросить таймер тайм-аута:

  • 1 – таймер тайм-аута сброшен в «0» и не работает;
  • 0 – таймер тайм-аута работает.

SADDR (Send Address) – отправить адрес, этот бит имеет эффект только в 9-битном режиме:

  • 1 – все записываемые в TX слова отправляются как адреса (с «1» вместо бита четности);
  • 0 – все записываемые в TX слова отправляются как слова данных (с «0» вместо бита четности).

UART_TX​

Запись в этот регистр запрещена, если буфер передатчика полон (бит TBNF регистра ST равен «0»). Стоит избегать записи в заполненный буфер

Бит76543210
НазначениеCHTBT
Начальное значение0

CHTBT (Character To Be Transmitted) – слово данных для передачи. Если количество битов в слове (биты CHRL в регистре UART_CFG1) выбрано меньше 8, то передаваемые биты – младшие. Например, если выбрано 5 битов в слове, а в CHTBT записано 00001111b, то передатчик отправит на линию TX 01111b (младшими битами вперед).

UART_RX0​

Чтение буфера приемника UART_RX0, если тот пуст (бит RBNE регистра UART_ST1 равен «0») приводит к выдаче «0» во всех разрядах. Стоит избегать чтения пустого буфера.

Бит76543210
НазначениеRCH
Начальное значение0

RCH (Received Character) – принятое слово данных. Если количество битов в слове (биты CHRL в регистре UART_CFG1) выбрано меньше 8, то принятые биты дополняются нулями слева до 8 перед записью в RCH. Например, если выбрано 5 битов данных в слове и приемник принял 10110b, тогда RCH = 00010110b.

UART_RX1​

Если необходимо считать UART_RX1 и UART_RX0, то сначала нужно считать данные регистра UART_RX1, а затем UART_RX0. Если нужно считать только принятое слово данных, то в чтение регистра UART_RX1 необходимости нет.

Бит76543210
НазначениеРезервBDPE/AMFE
Начальное значение0

BD (Break Detected) – это слово данных состоит только из «0», даже вместо стоп-бита, и поэтому было интерпретировано как сигнал break.

PE/AM (Parity Error/Address Match) – значение этого бита зависит от режима работы:

  • 1 – обнаружена ошибка четности или это слово – адрес.
  • 0 – ошибка четности не обнаружена или это слово – слово данные.

Во всех режимах кроме 9-битного значение бита PE/AM – ошибка четности при приеме данного слова. В 9-битном режиме, где бит четности не используется, этот бит показывает содержимое девятого бита принятого слова. Слово вместе с битами статуса отправляются в буфер приемника, только если адрес совпал при сверке.

FE (Frame Error) – при приеме этого слова произошла ошибка стоп-бита, то есть вместо «1» на месте старт бита принят «0».

UART_ST0​

Биты BD, PE/AM, FE при приеме слова выставляются в «1» даже в случае, если в буфере приемника не было места, чтобы сохранить принятое слово.

Бит76543210
НазначениеRBRPLRBFOERTOBDPE/AMFECTSIC
Тип статусаFLAGEVENT
Начальное значение0

RBRPL (Receiver Buffer Reached Preprogrammed Level) – в буфере приемника количество слов больше или равно заданному в регистре RXFIFOLVL уровню (и приемник включен).

RBF (Receiver Buffer Full) – буфер приемника полон (и приемник включен). Если приемник закончит прием еще одного слова данных, это приведет к ошибке Overrun Error.

OE (Overrun Error) – произошла ошибка переполнения приемника, то есть стоп-бит был принят в момент, когда буфер приемника был полон, в результате чего принятое слово было утеряно.

RTO (Receiver Timeout) – произошел тайм-аут приемника, то есть приемник не зафиксировал старт-бита после приема последнего слова по истечению количества периодов baud_rate_clock, заданного в разрядах TV регистра UART_CFG0.

BD (Break Detected) – обнаружен сигнал break, то есть линия RX удерживалась в «0» в течение времени, большего времени передачи посылки (иными словами, принята посылка, состоящая только из нулей, даже в стоп-бите). При этом приемник записывает в FIFO-буфер одно слово из восьми нулей, вне зависимости от того, как долго держится «0» на RX. Прием следующей посылки начнется только после перехода линии в «1», а затем приема старт-бита. Сигнал break не считается ошибкой стоп-бита.

PE/AM (Parity Error/Address Match) – зафиксирована ошибка четности/совпадение адреса 
в 9-битном режиме. Значение этого бита зависит от режима работы UART. Во всех режимах работы, кроме 9-битого режима, значение этого бита – ошибка четности, то есть содержимое бита четности принятой посылки не соответствовало биту, сформированному приемником для проверки в соответствии с выбранным типом контроля. В 9-битном режиме значение этого бита – совпадение адреса, то есть приемник принял адрес (посылка с «1» вместо бита четности), совпадающий с одним из адресов, заданных в регистрах UART_NBADDR0 и UART_NBADDR1. При этом сравниваются только разряды адреса незамаскированные в UART_NBMSK.

FE (Frame Error) – зафиксирована ошибка стоп-бита, то есть в принятой посылке значение стоп-бита было равно «0». Этот бит не устанавливается в «1», если все остальные биты слова также равны «0», так как это воспринимается как сигнал break.

CTSIC (Clear To Send Input Change) – произошло изменение сигнала CTS. Это событие не возникает, если передача запрещена, чтобы избежать ложной генерации этого события после сброса.

UART_ST1​

Бит76543210
НазначениеРезервCTSICRWETBNFTBRPLTBETIRBNE
Начальное значениеFLAG
Тип статуса010

CTSI (Clear To Send image) – текущее значение сигнала CTS:

  • 1 – удаленный приемник готов принимать данные;
  • 0 – удаленный приемник не готов принимать данные.

Значение этого бита берется из входного сигнала CTS. Если инверсия сигналов линии (бит INVE регистра UART_CFG1) выключена, то он равен инверсии CTS, если включена, то самому сигналу CTS.

CRWE (Config Registers Write Enable) – запись в регистры UART_CFG0, UART_CFG1, UART_BDR0, UART_BDR1 разрешена. Этот бит равен «1» при условиях:

  • приемник и передатчик выключены;
  • приемник и передатчик закончили свои операции.

TBNF (Transmitter Buffer Not Full) – буфер передатчика не полон, в нем есть место еще как минимум для одного слова данных (и передатчик включен).

TBRPL (Transmitter Buffer Reached Preprogrammed Level) – в буфере передатчика осталось количество слов меньше или равно заданному в регистрах UART_TXFIFOLVL0 и UART_TXFIFOLVL1 уровню (и передатчик включен).

TBE (Transmitter Buffer Empty) – буфер передатчика пуст (и передатчик включен).

TI (Transmitter Idle) – буфер передатчика пуст и у него нет больше слов для отправки (и передатчик включен). Формируется до завершения последнего стоп-бита. Таким образом, если новое слово будет записано до завершения последнего стоп-бита, то новое слово начнет отправляться сразу после его завершения (при CTS в активном уровне в режиме аппаратного контроля обмена).

RBNE (Receiver Buffer Not Empty) – в буфере приемника есть как минимум одно непрочитанное слово данных (и приемник включен).