8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 160 161 162 163 164 165 166 ... 195

писи в регистр UCSRA (UCSR/*A) сбрасывать соответствующие этим флагам биты записываемого значения в 0.

Для индикации состояния приемника в модулях USART используется флаг прерывания «прием завершен» RXC (RXCaj) регистра UCSRA (UCSRajA). Этот флаг устанавливается в 1 при наличии в буфере приемника непрочитанных данных и сбрасывается в 0 при опустошении буфера (после считывания всех находящихся в нем данных).

Выключение приемника осуществляется сбросом бита RXEN (RXENaj) регистра UCSRB (UCSRrtB). В отличие от передатчика, приемник выключается сразу же после сброса бита, а значит, кадр, принимаемый в этот момент, теряется. Кроме того, при выключении приемника очищается его буфер, т. е. теряются также все непрочитанные данные. При выключенном приемнике вывод RXD (RXDaj) может использоваться как контакт ввода/вывода общего назначения.

Пример подпрограммы приема по интерфейсу USART приведен ниже. Как и в предыдущем примере, здесь используется опрос флага прерывания.

Пример на ассемблере

USART Receive:

; Ждать загрузки данных в буфер приемника

sbis UCSRA, RXC

гjmp USART Receive

; Прочитать 9-й бит данных и флаги состояния

in rl8,UCSRA

in rl7,UCSRB

; Прочитать младший байт данных

in rl6,UDR

; В случае ошибки вернуть -1

andi rl8, (1«FE) I (l«DOR) I (1«UPE)

breq no error

ldi rl7,HIGH(-l)

ldi rl8,LOW(-l)

no error:

; Выделить 9-й бит данных lsr rl7 andi rl7,0x01 ret

Пример на Си

unsigned int USART Receive(void) {

unsigned char status, resh, resl

/* Ждать заполнения буфера приемника */

while (! (UCSRA & (1«RXC)))

/* Прочитать 9-й бит данных и флаги состояния */


status = UCSRA; resh = UCSRB;

/* Прочитать младший байт данных */ resl = UDR;

/* В случае ошибки вернуть -1*/

if (status & (1«FE) I (1«D0R) I (1«UPE) )

return -1; /* Выделить 9-й бит данных */ resh = (resh»l) & 0x01; return ((resh«8) I resl);

}

Собственно прием всех битов кадра осуществляется по-разному, в зависимости от режима работы модуля. При работе модуля USART в синхронном режиме состояние вывода RXD (RXDaj) считывается по одному из фронтов сигнала ХСК (ХСКя). Если бит UCPOL (UCPOLaj) регистра UCSRC (UCSRajC) сброшен в 0, считывание состояния вывода происходит по спадающему фронту сигнала ХСК (XCK/z), если же установлен в 1 — по нарастающему фронту сигнала. Другими словами, считывание данных с вывода RXD (RXDaj) и их выдача на вывод TXD (TXDn) происходят по противоположным фронтам (см. Рис. 13.6).

Для обеспечения приема в асинхронном режиме работы используются схемы восстановления тактового сигнала и данных. Схема восстановления тактового сигнала предназначена для синхронизации внутреннего тактового сигнала, формируемого контроллером скорости передачи, и кадров, поступающих на вывод RXD (RXDaj) микроконтроллера. Схема восстановления данных осуществляет считывание и фильтрацию каждого бита принимаемого кадра.

Схема восстановления тактового сигнала осуществляет опрос входа приемника с целью определения старт-бита кадра. Частота опроса зависит от состояния бита U2X (ШХя) регистра UCSRA (UCSRuA). В обычном режиме (при ШХя = 0) частота опроса в 16 раз превышает скорость передачи данных, а в ускоренном режиме (при U2X = 1) — в 8 раз.

Обнаружение изменения сигнала на выводе RXD (RXDa?) с лог. 1 (режим ожидания) на лог. О интерпретируется как возможное появление переднего фронта старт-бита. После этого в нормальном режиме проверяется значение 8-й, 9-й и 10-й выборок входного сигнала, а в ускоренном режиме — 4-й, 5-й и 6-й выборок (Рис. 13.7, а). Если значение хотя бы двух выборок из указанных равно лог. 1, старт-бит считается ложным (помеха), а приемник переходит к ожиданию следующего изменения входного сигнала с лог. 1 на лог. 0. В противном случае считается, что обнаружен старт-бит новой последовательности, с которым синхронизируется внутренний тактовый сигнал приемника. После этого начинает работать схема восстановления данных.


Решение о значении принятого бита принимается также по результатам 8-й, 9-й и 10-й (4-й, 5-й и 6-й) выборок входного сигнала (Рис. 13.7, б). Состоянием бита считается логическое значение, которое было получено, по меньшей мере, в двух из трех выборок. Процесс распознавания повторяется для всех битов принимаемого кадра, включая первый стоп-бит.

RxD

Отсчет (U2X = 0)

Отсчет (U2X = 1)

JDLE

Старт-бит

Бит 0

t \М t tt t tJLLlt t t t t t t t t

001 234567 8 i 9 i 101 11 12 13 14 15 16 1 2 3

t t1 X777X t t t 1

0123 [T] Ш Ш 7812

Отсчет (U2X = 0)

Отсчет (U2X=1)

x

/7-ЙбиТ

X

At 1t t tttttt t t t t t t

1 2 3 4 5 6 7 В I 9 i 101 11 12 13 14 15 16 1

t t ±tj~± t t t

123 Ш [T] [T] 781

6)

Puc. 13.7. Распознавание битов кадра: a — старт-бит; б — остальные биты

Из сказанного следует, что старт-бит нового кадра может передаваться сразу же после последней выборки, используемой для определения значения бита. В обычном режиме работы формирование старт-бита может начаться в момент А, а в ускоренном режиме — в момент В (Рис 13.8). Момент С, обозначенный на рисунке, определяет максимальную длительность стоп-бита.

Отсчет (U2X = 0)

Отсчет (U2X = 1)

(В)

Стоп-бит- А)

нМ ! t t t ttttt t t

1 2 3 4 5 6 7 i 8 i 9 i 10 1 o>1 0/1 0>1

I I ± А А 1

0/1

(C)



0 ... 160 161 162 163 164 165 166 ... 195