Флаги и прерывания передатчика



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

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

Флаг завершения передачи (TXC) принимает единичное значение, если вся посылка в сдвиговом регистре передатчика была полностью сдвинута и в буфере передатчика отсутствуют новые данные для передачи. Флаг TXC автоматически сбрасывается при переходе на вектор обработки прерывания по завершению передачи или программно сбрасывается путем записи в него лог. 1. Флаг TXC полезно использовать при организации полудуплексной связи (например, стандарт RS485), где имеется необходимость перевода передающей стороны в режим приема после завершения передачи, тем самым достигая освобождения шины.

Если разрешено прерывание по завершению передачи (TXCIE=1) в регистре UCSRB, то прерывание по завершению передачи УСАПП выполняется всякий раз, когда флаг TXC принимает единичное состояние (с учетом, что активно общее разрешение прерываний). При переходе на вектор обработки прерывания по завершении передачи УСАПП нет необходимости сбрасывать флаг TXC, т.к. это происходит автоматически.

 

 

17. Особенности приемника в ATmega128: прием данных, флаги, отключение, описание регистров (универсальный синхронный и асинхронный последовательный приемопередатчик)

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

 

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

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

 

Приемник начинает прием данных только после определения действительного старт-бита. Выборка следующих за старт-битом бит данных происходит с частотой равной скорости связи или частотой сигнала XCK и размещается в сдвиговом регистре приемника. Второй стоп-бит приемником игнорируется. После получения первого стоп-бита, т.е. когда последовательная посылка полностью принята и находится в сдвиговом регистре приемника, содержимое сдвигового регистра перемещается в приемный буфер. Приемный буфер считывается при чтении регистра ввода-вывода UDR.

 

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

 

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

USART_Receive:

; Ожидание окончания приема данных

sbis UCSRA, RXC

rjmp USART_Receive

; Загрузка принятых данных из буфера

in r16, UDR

ret

 

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

unsigned char USART_Receive( void )

{

/* Ожидание окончания приема данных */

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

/* Загрузка принятых данных из буфера */

return UDR;

}

 

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

Прежде чем считывается содержимое буфера приемника, в функциях выполняется ожидание появления данных в этом буфере путем опроса флага RXC.

 


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

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






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