Интерфейсы микропроцессорных систем. Воробьева Г.С - 34 стр.

UptoLike

Независимо от принятия правильного стопового бита по окончании
приема символа принятые данные переписываются в UDR, и
устанавливается флаг RXC в регистре USR. Физически регистр данных
UDR состоит из двух отдельных регистров: один используется для
передачи данных, другой для приема. При чтении UDR происходит
доступ к регистру приемника, при записи к регистру передатчика. При
обмене 9-битовыми данными 9-й бит принятых данных записывается в бит
RXB8 регистра UCR.
Если при приеме символа из регистра UDR не был прочитан
предыдущий символ, то в регистре USR устанавливается флаг
переполнения OR. Установка этого бита означает, что последний
принятый байт данных не переписывается из сдвигового регистра в регистр
UDR и будет потерян. Бит OR обновляется при чтении правильных данных
из UDR. Таким образом, всегда можно проверить состояние OR после
чтения UDR и обнаружить произошедшее переполнение.
При сбросе бита RXEN в регистре UCR прием данных запрещается.
При этом вывод РС7 можно использовать как линию ввода/вывода общего
назначения. При установке RXEN приемник подключен к выводу РС7
независимо от состояния бита DDC7 в регистре DDRC (бита направления
передачи 7-го бита порта С).
Алгоритм приема символа по UART (описание регистров см. ниже):
1. Настроить режим работы:
скорость передачи регистром UBRR, параметры – UCR;
2. Проверять, принялся ли символ (бит RXC)
3. Если прием закончен, то прочитать символ из регистра данных
(UDR); при необходимости произвести проверку четности (обычно
для этого используется 9-й бит (R, и ошибки фрейма (флаг FE).
Примечание: для проверки принятых данных на четность проверку этого
бита (считывается из RXB9) нужно проводить «вручную», т.е. программно.
Пример программы, принимающей байт данных по UART в регистр
RXDATA:
.equ RXDATA, r18 ; объявление регистра r18 как RXDATA
; (регистр с принятыми данными)
RX_not_ready:
sbis USR, RXC ; ожидание флага завершения
; приема RXC
rjmp RX_not_ready
in RXDATA, UDR ; если прием завершенсчитать данные
; в регистр RXDATA
1) Регистр UCRрегистр управления UART (UART Control Register)
UCR адрес $0A ($2A)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-1 R/W-0
RXCIE
TXCIE
UDRIE
RXEN
TXEN
CHR9
RXB8
TXB8
D7 D0
R – бит для чтения W – бит для записи “-n” – значение после сброса
бит 7: RXCIE разрешение прерывания по окончанию приема
Если RXCIE = 1, то установка бита RXC в регистре USR приводит к выполнению
прерывания по окончанию приема (при условии, что прерывания разрешены, т.е.
бит GIE в регистре SREG установлен)
бит 6: TXCIE разрешение прерывания по окончанию передачи
Если TXCIE = 1, то установка бита TXC в регистре USR приводит к выполнению
прерывания по окончанию передачи (при условии, что прерывания разрешены, т.е.
бит GIE в регистре SREG установлен)
бит 5: UDRIE разрешение прерывания по очистке регистра UDR
Если UDRIE = 1, то установка бита UDRE в регистре USR приводит к выполнению
прерывания по очистке регистра UDR (при условии, что прерывания разрешены, т.е.
бит GIE в регистре SREG установлен)
бит 4: RXEN разрешение приемника
Если RXEN = 1, то работа приемника UART разрешена
Если RXEN = 0, то работа приемника UART запрещена, и флаги TXC, OR и FE не
устанавливаются. Если эти флаги установлены, сброс RXEN не очищает их.
бит 3: TXEN разрешение передатчика
Если TXEN = 1, то работа передатчика UART разрешена
При запрещении работы передатчика во время передачи символа он
продолжает работать, пока не будет очищен сдвиговый регистр и не буде передан
символ, помещенный в UDR.
бит 2: CHR9 9-битовые посылки
Если CHR9 = 1, то принимаемые и передаваемые данные имеют длину 9
битов. Для передачи и приема 9-го символа используются биты RXB8 и TXB8
соответственно.
бит 1: RXB8 9-ый бит принятых данных
Если установлен бит CHR9, то сюда записывается 9-й бит принятых данных.
бит 0: TXB8 9-ый бит передаваемых данных
Если установлен бит CHR9, то отсюда берется 9-й бит передаваемых данных.