Последовательные интерфейсы
269
статуса, поэтому, считывание регистра UDR приводит к изменению
состояния приемного буфера FIFO и, следовательно, связанные со
считанными данными биты TXB8, FE, DOR и UPE будут потеряны.
Приемник USART имеет один флаг, который индицирует состояние
приемника.
Флаг завершения приема (RXC) сигнализирует о наличии несчитанных
данных в приемном буфере. Данный флаг равен 1, если имеются
несчитанные данные, и равен 0, если буфер приемника
свободен (т.е. не
содержит каких-либо несчитанных данных). Если приемник отключается
(RXEN = 0), то приемный буфер будет сброшен и флаг RXC примет нулевое
значение.
Если установлен бит разрешения прерывания по завершению приема
(RXCIE) в регистре UCSRB, то при установке флага RXC программа переход
не вектор обработки данного прерывания (при условии, что активно общее
разрешение
прерываний). Если используется организация связи с
управлением по прерываниям, то при выполнении процедуры обработки
запроса на прерывание по завершению приема необходимо считать данные
из UDR, чтобы сбросить флаг RXC. В противном случае новое прерывание
возникнет сразу после выхода из текущего.
Приемник USART имеет три флага ошибок: ошибка посылки (кадра) FE,
переполнение данных DOR и ошибка паритета
UPE. Данные флаги входят в
состав регистра UCSRA. Общим свойством данных флагов является то, что
они хранятся в приемном буфере вместе с той посылкой данных, для которой
они отражают состояние ошибок. С учетом этого, необходимо следить,
чтобы флаги ошибок считывались из регистра UCSRA перед чтением данных
из приемного буфера (UDR), т.к. после чтения
из UDR изменяется состояние
буфера. Другим сходством флагов ошибок является невозможность
программно повлиять на их состояние. Однако, в целях совместимости с
USART последующих микроконтроллеров во время записи регистра UCSRA