Прием данных
Рис. 43. Приемник UART
Логика восстановления данных производит выборку состояний вывода RXD с частотой в 16 раз большей, чем частота бодов. При нахождении линии в пассивном состоянии одиночная выборка нулевого логического уровня будет интерпретироваться как падающий фронт стартового бита и будет запущена последовательность детектирования стартового бита. Считается, что первая выборка обнаружила первый нулевой логический уровень вероятного стартового бита. На выборках 8, 9 и 10 приемник вновь тестирует вывод RXD на изменение логических состояний. Если две или более из этих трех выборок обнаружат логические 1, то данный вероятный стартовый бит отвергается как шумовой всплеск и приемник начнет выявлять и анализировать следующие переходы из 1 в 0.
Если же был обнаружен действительный стартовый бит, то начинает производиться выборка следующих за стартовым битом информационных битов. Эти биты также тестируются на выборках 8, 9 и 10. Логическое состояние бита принимается по двум и более (из трех) одинаковым состояниям выборок. Все биты вводятся в сдвиговый регистр приемника с тем значением, которое было определено тестированием выборок.
Тестирование выборок битов принимаемых символов показано на Рис. 44.
Рис. 44. Тестирование выборок принимаемых данных
При поступлении стопового бита необходимо чтобы не менее двух выборок из трех подтвердили прием стопового бита (показали высокий уровень). Если же две или более выборок покажут состояния 0, то, при пересылке принятого байта в UDR, в регистре статуса UART (USR) устанавливается бит ошибки кадра FE (Framing Error). Для обнаружения
ошибки кадра пользователь перед чтением регистра UDR должен проверять состояние
бита FE. Флаг FE очищается при считывании содержимого регистра данных UART (UDR).
Вне зависимости от того принят правильный стоповый бит или нет, данные пересылаются в регистр UDR и устанавливается флаг RXC в регистре статуса UART (USR). Регистр UDR фактически является двумя физически отдельными регистрами, один из которых служит для передачи данных и другой для приема. При считывании UDR обращение ведется к регистру приема данных, при записи обращение ведется к регистру передачи.
Если выбран режим обмена 9-разрядными словами данных (установлен бит CHR9
регистра UCR), при пересылке данных в UDR бит RXB8 регистра UCR загружается в
бит 9 сдвигового регистра передачи. Если после получения символа к регистру UDR
не было обращения, начиная с последнего приема, в регистре UCR устанавливается
флаг переполнения (OR). Это означает, что новые данные, пересылаемые в сдвиговый
регистр не могут быть переданы в UDR и потеряны. Бит OR буферирован и доступен
тогда, когда в UDR читается байт достоверных данных. Пользователю, для обнаружения переполнения, необходимо всегда проверять флаг OR после считывания содержимого регистра UDR.
При очищенном (сброшенном в логическое состояние 0) бите RXEN регистра UCR приемник запрещен. Это означает, что вывод PE0 может использоваться в качестве вывода I/O общего назначения. При установленном бите RXEN, приемник UART подключается к выводу PE0, который работает как вывод входа, вне зависимости от установки бита DDE0 в DDRE.
При установке UART вывода PE0 на работу в качестве входа, бит PORTE0 может использоваться для управления нагрузочным резистором вывода.
|