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

Лекция 14

14.1. Регистр статуса SPI – SPCR

14.2. Регистр данных SPI – SPDR

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

14.4. Прием данных

14.1. Регистр статуса SPI – SPCR

На рис. 3.13 изображен регистр статуса SPI.

$0E(2E)

биты

7 6 5 4 3 2 1 0

SPIF WCOL - - - - - -

Доступ Чт Чт Чт Чт Чт Чт Чт Чт

Н. С. 0 0 0 0 0 0 0 0

Рис. 3.13. Регистр статуса SPI

Бит 7 – SPIF: – флаг прерывания по SPI.

По завершении обмена последовательными данными бит SPIF устанавливается в состояние 1 и, если бит SPIE в регистре SPCR установлен и разрешено глобальное прерывание, генерируется сигнал прерывания. Если SS вход управляется низким уровнем, когда SPI находится в режиме ведущего, это установит флаг SPIF. Бит SPIF очищается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Бит SPIF может быть очищен также при первом считывании состояния регистра статуса SPI с установленным битом SPIF, с последующим обращением к регистру данных SPI (SPDR).

Бит 6 – WCOL: – флаг ошибки при записи.

Бит WCOL устанавливается в состояние 1, если в процессе передачи данных выполнялась запись в регистр данных (SPDR). Чтение содержимого регистра данных, как и запись в него, выполненные во время пересылки данных, могут привести к неверному результату. Бит WCOL (и бит SPIF) аппаратно очищаются (сбрасываются в состояние 0) при первом считывании регистра статуса SPI с установленным WCOL, с последующим обращением к регистру данных SPI (SPDR).

Биты 5…0 – Res: – зарезервированные биты.

Эти биты в микроконтроллерах AT90S4434/8535 зарезервированы.

Интерфейс SPI на AT90S4434/8535 также используется для программной памяти и EEPROM-загрузки или загрузки.

14.2. Регистр данных SPI – SPDR

На рис. 3.14 изображен регистр данных SPI.

$0F(2F)биты

7 6 5 4 3 2 1 0

MSB - - - - - - LSB

Доступ Чт/Зп Чт/Зп Чт/Зп Чт/Зп Чт/Зп Чт/Зп Чт/Зп Чт/Зп

Н. С. 0 0 0 0 0 0 0 0

Рис. 3.14. Регистр данных SPI

Регистр данных SPI представляет собой регистр с возможностью чтения/записи и предназначен для пересылки данных между регистровым файлом и сдвиговым регистром SPI. Запись в регистр SPDR инициирует передачу данных, считывание регистра приводит к чтению сдвигового регистра приема.

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

Микроконтроллеры AT90S4434/8535 оснащены полнодуплексными универсальными приемопередатчиками (UART). Их основные возможности следующие:

генератор, обеспечивающий множество скоростей передачи информа-

ции в бодах; высокая скорость передачи при низкой частоте XTAL; 8-разрядный или 9-разрядный форматы данных; фильтрация шума; обнаружение переполнения;

обнаружение ошибок формирования кадров; детектирование бита ложного старта;

три отдельных прерывания: по завершении передачи (TX Complete), по пустому регистру передаваемых данных (TX Data Register Empty) и по завершении приема (RX Complete); буферизованная передача и прием.

Передача данных инициируется записью передаваемых данных в регистр данных I/O UART (UDR). Данные пересылаются из UDR в сдвиговый регистр передачи в следующих случаях:

• Новый символ записан в UDR после того, как был выведен из регистра стоповый бит предшествовавшего символа. Сдвиговый регистр загружается немедленно.

• Новый символ записан в UDR прежде, чем был выведен стоповый бит предшествовавшего символа. Сдвиговый регистр загружается после выхода стопового бита передаваемого символа, находившегося в сдвиговом регистре.

Если из 10(11)-разрядного сдвигового регистра передачи выведена вся информация (сдвиговый регистр передачи пуст), данные из UDR пересылаются в сдвиговый регистр. В это время устанавливается бит UDRE (UART Data Register Empty) регистра статуса UART (USR). При установленном в состояние 1 бите UDRE последний готов принять следующий символ. В то самое время, когда данные пересылаются из UDR в 10(11)-разрядный сдвиговый регистр, бит 0 сдвигового регистра сбрасывается в состояние 0 (состояние 0 – стартовый бит), а бит 9 или 10 устанавливается в состояние 1 (состояние 1 – стоповый бит). Если в регистре управления UART (UCR) установлен бит CHR9 (т. е. выбран режим 9-разрядного слова данных), то бит TXB8 регистра UCR пересылается в бит 9 сдвигового регистра передачи.

Сразу после пересылки данных в сдвиговый регистр тактом бодгенератора стартовый бит сдвигается на вывод TXD. За ним следует LSB-бит данных. Когда будет выдан стоповый бит, сдвиговый регистр загружается новой порцией данных, если она была записана в UDR во время передачи. В процессе загрузки бит UDRE находится в установленном состоянии. Если же новые данные не будут загружены в UDR до выдачи стопового бита, флаг UDRE остается установленным. В этом случае, после того как стоповый бит будет присутствовать на выводе TXD в течение одного такта, в регистре статуса UART (USR) устанавливается флаг завершения передачи TXC (TX Complete Flag).

Установленный в состояние 1 бит TXEN регистра UCR разрешает передачу UART. При очищенном бите TXEN (сброшенном в состояние 0) вывод PD1 может быть использован в качестве вывода I/O общего назначения. При установленном бите TXEN передатчик UART подключается к PD1 и использует его в качестве выхода, независимо от установки бита 1 в DDRD.

Прием данных

Логика приема данных производит выборку состояний вывода RXD с частотой, в 16 раз большей, чем частота бодов. При нахождении линии в пассивном состоянии одиночная выборка нулевого логического уровня будет интерпретироваться как падающий фронт стартового бита и будет запущена последовательность детектирования стартового бита. Считается, что первая выборка обнаружила первый нулевой логический уровень вероятного стартового бита. На выборках 8, 9 и 10 приемник вновь тестирует вывод RXD на изменение логических состояний. Если две или более из этих трех выборок обнаружат логические 1, то данный вероятный стартовый бит отвергается как шумовой всплеск и приемник начнет выявлять и анализировать следующие переходы из 1 в 0. Если же был обнаружен действительный стартовый бит, то начинает производиться выборка следующих за стартовым битом информационных битов. Эти биты также тестируются на выборках 8, 9 и 10. Логическое состояние бита принимается по двум и более (из трех) одинаковым состояниям выборок. Все биты вводятся в сдвиговый регистр приемника с тем значением, которое было определено тестированием выборок.

При поступлении стопового бита необходимо, чтобы не менее двух выборок из трех подтвердили прием стопового бита (показали высокий уровень). Если же две или более выборок покажут состояния 0, то в регистре статуса UART (USR) устанавливается бит ошибки кадра FE (Framing Error). Для обнаружения ошибки кадра перед чтением регистра UDR необходимо проверять состояние бита FE.

Вне зависимости от того, принят правильный стоповый бит или нет, данные пересылаются в регистр UDR и устанавливается флаг RXC в регистре статуса UART (USR). Регистр UDR фактически является двумя физически отдельными регистрами, один из которых служит для передачи данных, а другой – для приема. При считывании UDR обращение ведется к регистру приема данных, при записи – к регистру передачи. Если выбран режим обмена 9-разрядными словами данных (установлен бит CHR9 регистра UCR), при пересылке данных в UDR бит RXB8 регистра UCR загружается в бит 9 сдвигового регистра передачи.

Если после получения символа к регистру UDR не было обращения, начиная с последнего приема, в регистре UCR устанавливается флаг переполнения (OR). Это означает, что последний байт данных, пересылаемый в сдвиговый регистр, не может быть передан в UDR и потерян. Бит OR буферирован и доступен тогда, когда в UDR читается байт достоверных данных. Для обнаружения переполнения необходимо всегда проверять флаг OR после считывания содержимого регистра UDR.

При очищенном (сброшенном в логическое состояние 0) бите RXEN регистра UCR приемник запрещен. Это означает, что вывод PD0 может использоваться в качестве вывода I/O общего назначения. При установленном бите RXEN приемник UART подключается к выводу PD0, который работает как вывод входа, вне зависимости от установки бита 0 в DDRD.

При установке UART вывода PD0 на работу в качестве входа бит PORTD0 может использоваться для управления нагрузочным резистором вывода.

Когда бит CHR9 в регистре UCR установлен, принимаемые и передаваемые символы – 9-разрядные, плюс стартовый и стоповый биты. Девятый бит данных, который должен передаваться, – бит ТXB8 в регистре UCR. Этот бит должен быть установлен в требуемое значение перед началом передачи, которая произойдет по записи в регистр UDR. Девятый бит принимается RXB8 в регистре UCR.

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