Передача данных - Передатчик УСАПП
Работа передатчика УСАПП разрешается путем установки бита разрешения передачи (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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!