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

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

(ТХВ8я) регистра UCSRB (UCSR/iB) копируется в 9-й бит сдвигового регистра. При этом возможны два варианта:

•запись в регистр UDR осуществляется в тот момент, когда передатчик находится в состоянии ожидания (предыдущие данные уже переданы). В этом случае данные пересылаются в сдвиговый регистр сразу же после записи в регистр UDR;

•запись в регистр UDR осуществляется во время передачи. В этом случае данные пересылаются в сдвиговый регистр после передачи последнего стоп-бита текущего кадра.

Очевидно, что 9-й бит данных должен быть загружен в бит ТХВ8 (ТХВ8л) до записи младшего байта слова в регистр данных.

После пересылки слова данных в сдвиговый регистр флаг UDRE (UDREfl) регистра UCSRA (UCSR/jA) устанавливается в 1, что означает готовность передатчика к получению нового слова данных. В этом состоянии флаг остается до следующей записи в буфер Одновременно с пересылкой в регистре формируется служебная информация — старт-бит, возможный бит четности, а также один или два стоп-бита.

После загрузки сдвигового регистра его содержимое начинает сдвигаться вправо и поступать на вывод TXD (TXDn) в порядке, рассмотренном в подразделе 13.2.3. Скорость сдвига определяется настройками контроллера тактовых сигналов. В синхронном режиме изменение состояния вывода TXD (TXDn) происходит по одному из фронтов сигнала ХСК (ХСКл). Если бит UCPOL (UCPOLaj) регистра UCSRC (UCSRrtC) сброшен в 0, изменение состояния вывода происходит по нарастающему фронту сигнала, если же установлен в 1 — по спадающему фронту, как показано на Рис. 13.6.

UCPOL=1 ХСК

UCPOL=О ХСК RxD/TxD

- Выборка

Рис. 13.6. Временные диаграммы для синхронного режима работы USART

Если во время передачи в регистр UDR было записано новое слово данных, то после передачи последнего стоп-бита оно автоматически пересылается в сдвиговый регистр. Если же к моменту окончания передачи


кадра буфер передатчика будет пуст, устанавливается флаг прерывания «передача завершена» ТХС (ТХСл) регистра UCSRA (UCSRa/A). Сброс флага осуществляется аппаратно при входе в подпрограмму обработки соответствующего прерывания или программно, записью в этот бит лог. 1.

Выключение передатчика осуществляется сбросом бита TXEN (TXENaj) регистра UCSRB (UCSR/jB). Если в момент выполнения этой команды осуществлялась передача, сброс бита произойдет только после завершения текущей и отложенной передач, т. е. после очистки сдвигового и буферного регистров передатчика. При выключенном передатчике вывод TXD (TXDaj) может использоваться как контакт ввода/вывода общего назначения.

Ниже приведен простейший пример подпрограммы передачи по интерфейсу USART. Эта подпрограмма ждет очистки буфера передатчика, а затем загружает в него новое значение.

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

USART Transmit:

; Ждать очистки буфера передатчика

sbis UCSRA,UDRE

гimp USART Transmit

; Скопировать 9-й бит данных из г17 в TXB8

cbi UCSRB,ТХВ8

sbrc rl7,0

sbi UCSRB,TXB8

; Загрузить младший байт данных в буфер, начать передачу

out UDR,rl6

ret

Пример на Си

void USART Transmit(unsigned int data) {

/* Ждать очистки буфера передатчика */ while ( !( UCSRA & (1«UDRE)))

/* Скопировать 9-й бит данных из г17 в TXB8 */ UCSRB &= ~(1«ТХВ8) ; if (data & 0x100)

UCSRB = (1«ТХВ8) ; /* Загрузить младший байт данных в буфер, начать передачу */ UDR = data

}

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

Работа приемника разрешается установкой бита RXEN (RXENaj) регистра UCSRB (UCSR/iB). При установке бита вывод RXD (RXDaj) подключается к приемнику USART и начинает функционировать как вход не-


зависимо от установок регистров управления портом. Если используется синхронный режим работы, переопределяется также функционирование вывода ХСК (ХСКя).

Прием данных начинается сразу же после обнаружения приемником корректного старт-бита. Каждый бит содержимого кадра затем считывает-ся с частотой, определяемой установками контроллера скорости передачи или тактовым сигналом ХСК (ХСКл). Считанные биты данных последовательно помещаются в сдвиговый регистр приемника до обнаружения первого стоп-бита кадра. После этого содержимое сдвигового регистра пересылается в буфер приемника, из которого принятое значение может быть получено путем чтения регистра данных модуля. При использовании 9-битных слов данных значение старшего бита может быть определено по состоянию флага RX8 (RX8aj) регистра UCSRB (UCSRajB). Причем содержимое старшего бита данных должно быть считано до обращения к регистру данных. Это связано с тем, что флаг RX8 (RX8aj) отображает значение старшего бита слова данных кадра, находящегося на верхнем уровне буфера приемника, состояние которого при чтении регистра данных изменится.

Если во время приема кадра была включена схема контроля четности, она вычисляет бит четности для всех битов принятого слова данных и сравнивает его с принятым битом четности. Результат проверки запоминается в буфере приемника вместе с принятым словом данных и стоп-бита-ми. Наличие или отсутствие ошибки контроля четности может быть затем определено по состоянию флага UPE (UPEaj). Этот флаг устанавливается в 1, если следующее слово, которое может быть прочитано из буфера, имеет ошибку контроля четности. При выключенном контроле четности флаг UPE (UPEaj) всегда читается как 0.

Блок приемника модулей USART имеет еще два флага, показывающих состояние обмена, — флаг ошибки кадрирования FE (FEw) и флаг переполнения DOR (DOR/j). Флаг FE (FEa?) устанавливается в 1, если значение первого стоп-бита принятого кадра не соответствует требуемому, т. е. равно 0.

Флаг DOR (DOR/2) индицирует потерю данных из-за переполнения буфера приемника. Этот флаг устанавливается в 1 в случае приема старт-бита нового кадра при заполненных буфере и сдвиговом регистре приемника. Установленный флаг DOR (DORu) означает, что между прошлым байтом, считанным из регистра UDR, и байтом, считанным в данный момент, произошла потеря одного или нескольких кадров.

Обратите внимание на то, что все флаги ошибок буферизуются вместе со словом данных, т. е. соответствующие биты регистра UCSRA (UCSRa/A) относятся к кадру, слово данных которого будет прочитано при следующем обращении к регистру данных UDR (UDRaj). Поэтому состояние этих флагов должно быть считано перед обращением к регистру данных. Кроме того, для совместимости с будущими устройствами рекомендуется при за-



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