Передача данных - Передатчик УСАПП



 

Работа передатчика УСАПП разрешается путем установки бита разрешения передачи (TXEN) в регистре UCSRB. После разрешения, функция вывода TxD как обычного порта заменяется на функцию выхода последовательной передачи данных. Скорость связи, режим работы и формат посылки должны быть установлены однократно перед началом какой-либо передачи. Если используется синхронная работа, то функция вывода XCK также заменяется на альтернативную - синхронизация передачи.

 

Передача посылок с 5…8 битами данных

 

Начало передачи инициируется записью передаваемых данных в буфер передатчика. ЦПУ может загрузить буфер передатчика путем записи в регистр UDR, расположенный в памяти ввода-вывода. Буферизованные данные в буфере передатчика будут перемещены в сдвиговый регистр, после того как он будет готов к отправке новой посылки. Запись в сдвиговый регистр новых данных происходит в состоянии ожидания (когда передача завершена) или сразу после завершения передачи последнего стоп-бита предыдущей посылки. Если в сдвиговый регистр записаны новые данные, то начинается передача одной посылки на скорости, определенной в регистре скорости связи, битом U2X или XCK в зависимости от выбранного режима работы.

 

В следующих примерах представлены простые функции передачи через УСАПП, использующие опрос флага освобождения регистра данных (UDRE). Если используется посылка с менее 8 бит данных, то старшие биты записанные в UDR игнорируются. Перед вызовом данной функции должна быть выполнена инициализация УСАПП. Для кода на Ассемблере предполагается, что передаваемые данные записаны в регистр R16 перед вызовом процедуры.

 

Пример кода на Ассемблере (1)

USART_Transmit:

; Ожидание освобождения буфера передатчика

sbis UCSRA,UDRE

rjmp USART_Transmit

; Помещение данных (r16) в буфер, отправка данных

out UDR,r16           

ret

C Code Example (1)

void USART_Transmit( unsigned char data )

{

/* Ожидание освобождения буфера передатчика */

while ( !( UCSRA & (1<<UDRE)) );

/* Помещение данных в буфер, отправка данных */

UDR = data;

}

Прим. 1: В примере предполагается, что подключен файл специфических заголовков. Для регистров ввода-вывода, которые расположены в области памяти расширенного ввода-вывода необходимо заменить инструкции "IN", "OUT", "SBIS", "SBIC", "CBI" и "SBI" на инструкции, осуществляющие доступ к расширенной памяти ввода-вывода. Обычно это инструкции "LDS" и "STS" в сочетании с "SBRS", "SBRC", "SBR" и "CBR".

 

Перед загрузкой новых данных для передачи в данной функции осуществляется ожидание освобождения буфера передатчика путем опроса флага UDRE.

 

Отправка посылок с 9 битами данных

 

Если необходимо передавать 9 бит данных (UCSZ = 7), то 9-ый бит данных должен быть записан в бит TXB8 регистра UCSRB, перед тем как младший байт будет записан в UDR. В следующих примерах показаны функции для передачи 9 бит данных. Для кода на Ассемблере предполагается, что отправляемые данные предварительно записаны в регистры R17:R16.

 

Пример кода на Ассемблере (1)

USART_Transmit:

; Ожидание освобождения буфера передатчика

sbis UCSRA,UDRE

rjmp USART_Transmit

; Копирование 9-го бита из r17 в TXB8

cbi UCSRB,TXB8

sbrc r17,0

sbi UCSRB,TXB8

; Помещение мл. байта данных (r16) в буфер, отправка данных

out UDR,r16

ret

 

Пример кода на Си (1)

void USART_Transmit( unsigned int data )

{

/* Ожидание освобождения буфера передатчика */

while ( !( UCSRA & (1<<UDRE)) );

/* Копирование 9-го бита в TXB8 */

UCSRB &= ~(1<<TXB8);

if ( data & 0x0100 )UCSRB |= (1<<TXB8);

/* Помещение данных в буфер, отправка данных */

UDR = data;

}

 

Прим.1: Данные функции записаны как функции общего назначения. Они оптимизированы под статическое содержимое UCSRB. Т.е. когда после инициализации в регистре UCSRB изменяется только бит TXB8. Для регистров ввода-вывода, которые расположены в области памяти расширенного ввода-вывода, необходимо заменить инструкции "IN", "OUT", "SBIS", "SBIC", "CBI" и "SBI" на инструкции, осуществляющие доступ к расширенной памяти ввода-вывода. Обычно это инструкции "LDS" и "STS" в сочетании с "SBRS", "SBRC", "SBR" и "CBR".

9-ый бит данных может использоваться для индикации адреса посылки в многопроцессорном режиме связи или в других протоколах.

 


Дата добавления: 2018-05-13; просмотров: 239; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!