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

Для осуществления приема и передачи данных в асинхронном последовательном формате используется универсальный асинхронный приемопередатчик (Universal Asynchronous Receiver and TransmitterUART), который является основой последовательного интерфейса.

Отличительными особенностями его работы являются:

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

- способность работы в дуплексном режиме;

- возможность передавать как 8-и, так и 9-битные данные;

- фильтрация помех на входе путем многократного опроса каждого бита;

- аппаратная фиксация ошибок переполнения и кадрирования (ложный стоп-бит) при приеме данных;

- формирование трех различных прерываний с индивидуальными адресами векторов прерывания: при завершении передачи (Tx Complete), при завершении приема (Rx Complete) и при освобождении регистра данных передатчика (Tx Data Register Empty).

Формат последовательной передачи позволяет после 8 бит данных передавать один служебный бит, который, например, может быть битом четности или дополнительным стоп-битом. Формат кадра определяет число стоп-битов (1 или 2), число бит данных (8 или 9), а также назначение девятого бита данных. Все это зависит от типа контроллера.

По умолчанию передатчик устанавливает на линии единичный уровень (MARK), который может длиться сколь угодно долго.

Пример кадра посылки приведен на рис. 3.13.

 

 

Рис. 3.13. Последовательный формат передачи данных

 

Универсальный асинхронный приемопередатчик состоит из приемника (Receiver) и передатчика (Transmitter). Кроме того, в состав UART входят: тактовый генератор связи (бодрейт-генератор), управляющие регистры, статусные регистры, буферные и сдвиговые регистры приемника и передатчика.

Генератор задает тактовую частоту приемопередатчика для требуемой скорости связи. Управляющие регистры задают режим работы последовательного порта и его прерываний. В статусном регистре устанавливаются флаги по различным событиям.

Передача в последовательный канал инициируется записью байта в буферный регистр данных передатчика. Все остальные операции по преобразованию данных из параллельной формы в последовательную и формированию кадра передачи байта осуществляет передатчик UART. Он переписывает данные из буферного регистра в регистр сдвига передатчика, где к ним автоматически добавляются старт-бит и стоп-бит. Структурная схема передатчика показана на рис. 3.14.

 

 

Рис. 3.14. Структурная схема передатчика

 

Передача начинается посылкой бита с нулевым уровнем (старт-бита), затем идут биты данных младшим битом вперед (низкий уровень – «0», высокий уровень – «1»), завершается посылка передачей одного или двух битов с единичным уровнем (стоп-битов).

Приемник UART выполняет операции по преобразованию входных данных из последовательной формы в параллельную. Он производит предварительную выборку сигнала на входе RxD с частотой, в 16 раз большей скорости обмена рис. 3.15.

Когда линия последовательной передачи свободна (данные не передаются), она находится в состоянии логической «1». Выборка приемником логического «0» после того, как линия была свободна, интерпретируется как фронт старт-бита и инициирует последовательность определения старт-бита. Приемник, считая от первой нулевой выборки, анализирует 8-ю, 9-ю и 10-ю выборки. При обнаружении двух или более логических «1» в этих трех выборках старт-бит воспринимается как импульсная помеха, и приемник начинает следить за следующим перепадом «1/0».

Если старт-бит фиксируется, то затем осуществляется распознавание бит данных, причем для каждого бита также анализируются три значения входного сигнала в выборках 8, 9 и 10, считая от начала бита. За истинное значение бита принимается логическое значение, которое появилось хотя бы в двух выборках. Такие значения, полученные в результате голосования, последовательно посылаются в регистр сдвига приемника.

 

 

Рис. 3.15. Структурная схема приемника

 

При поступлении стоп-бита результатом голосования трех выборок должна быть логическая «1». Если обнаружены хотя бы два логических «0», устанавливается флаг ошибки кадрирования FE (Framing Error) в регистре USR. Независимо от того, выявлен или нет стоп-бит в конце цикла приема байта, данные посылаются в регистр данных приемника UDR (UART Data Register) и устанавливается флаг завершения приема RXC (Receive Complete) в статусном регистре USR.

Перед началом связи между двумя устройствами необходимо настроить их приемопередатчики на одинаковую скорость связи и формат кадра.

Скорость связи или бодрейт (baud rate) измеряется в числе передаваемых бит в секунду, включая старт и стоп-биты. Задается эта скорость в бодрейт-генераторе делением системной частоты на задаваемый коэффициент. Типичный диапазон скоростей: 2400÷115200 бод.

Приемник и передатчик тактируются, как правило, с 16-кратной частотой относительно бодрейта. Это нужно для сэмплирования сигнала. Приемник, поймав падающий фронт старт-бита, отсчитывает несколько тактов и следующие три такта считывает (семплирует) порт Rx. Это как раз середина старт-бита. Если большинство значений семплов – «0», старт-бит считается состоявшимся, иначе приемник принимает его за шум и ждет следующего падающего фронта. После удачного определения старт-бита, приемник точно также семплирует серединки битов данных и по большинству семплов считает бит «0» или «1», записывая их в сдвиговый регистр. Стоп-биты тоже семплируются, и если уровень стоп-бита не «1» – UART определяет ошибку кадра и устанавливает соответствующий флаг в управляющем регистре (рис. 3.16).

 

 

Рис. 3.16. Пример чтения кадра

 

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