Смекни!
smekni.com

Микроконтроллеры AVR (стр. 8 из 15)

Если разряд RXCIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по завершению приема через UART.

Если разряд TXCIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по завершению передачи через UART.

Если разряд UDRIE и разряд общего разрешения прерываний I в регистре состояния SREG установлены в лог. 1, то разрешается прерывание по опустошению регистра данных UART.

Если разряд RXEN установлен в лог. 1, то происходит разблокирование приемника, и вывод 0 порта D становится входом UART. Если разряд RXEN содержит лог. 0, то принимающий элемент приемопередатчика UART блокируется, и вывод 0 порта D может использоваться в качестве обычного входа/выхода. Если разряд RXEN содержит лог. 0, то флаги OR и FE регистра состояния USR не могут быть установлены. Если эти флаги все же установлены, то они с помощью RXEN не сбрасываются.

Если разряд TXEN установлен в лог. 1, то происходит разблокирование передатчика, а вывод 1порта D становится выходом UART. Если разряд TXEN содержит лог. 0, то передающий элемент UART блокируется, и вывод 1 порта D может использоваться в качестве обычного входа/выхода. Если разряд TXEN во время процесса передачи устанавливается в лог. 0, то передатчик не блокируется до тех пор, пока текущий символ в сдвиговом регистре, а также символ, возможно, ожидающий на передачу в регистре UDR не будут полностью переданы.

Если разряд CHR9 установлен в лог. 1, то слова данных, подлежащие передаче/считыванию имеют длину 11 бит (9 разрядов данных плюс стартовый и стоп-бит). Девятый бит из разряда ТХВ8 при передаче попадает в UCR, а при приеме – в разряд RXB8 регистра UCR. Девятый бит может быть использован для размещения дополнительных информационных данных, например, в качестве бита четности или второго стоп-бита. Если разряд CHR9 установлен в лог. 0, то слова данных, подлежащие передаче/считыванию имеют длину 10 бит (8 разрядов данных плюс стартовый и стоп-бит).


7 6 5 4 3 2 1 0
RXC TXC UDRE FE OR

Рис. 7.3. Регистр состояния USR микроконтроллеров AVR

Регистр состояния USR информирует программу пользователя о состоянии приемопередатчика UART.

Флаг RXC устанавливается в лог. 1, если принятое слово данных было перенесено из сдвигового регистра в регистр UDR (без учета возможных ошибок кадрирования, которые могли возникнуть во время передачи данных). После чтения регистра UDR флаг RXC автоматически сбрасывается в лог. 0.

Флаг ТХС будет установлен в лог. 1, если символ в сдвиговом регистре был передан полностью (то есть, включая стоп-бит), и из регистра UDR не ожидается новый байт данных. Флаг очень полезен в полудуплексном режиме работы, когда непосредственно после передачи необходимо переключиться в режим приема. При входе в подпрограмму обработки прерывания флаг завершения передачи ТХС аппаратно сбрасывается в лог. 0.

Флаг UDRE устанавливается в лог. 1, если содержимое регистра UDR было перенесено в сдвиговой регистр. С его помощью пользователь получает уведомление о том, что приемопередатчик готов к передаче нового байта.

Соответствующая подпрограмма обработки прерывания выполняется до тех пор, пока установлен флаг UDRE. Флаг UDRE сбрасывается при записи байта данных в регистр UDR. В случае сброса при включении питания флаг UDRE устанавливается в лог. 1, чтобы показать, что приемопередатчик готов к передаче нового байта данных.

Флаг FE устанавливается в лог. 1 при обнаружении ошибки кадрирования. Это происходит, если при трех сканированиях стоп-бита был более одного раза обнаружен лог. 0, и тем самым стоп-бит был распознан как сигнал низкого уровня. Флаг FE сбрасывается, когда стоп-биту соответствует сигнал высокого уровня. Пользовательская программа должна постоянно проверять флаг FE перед чтением регистра UDR, чтобы можно было распознать потенциально некорректный символ в регистре приема.

Флаг OR устанавливается в лог. 1, если один из символов, переданных в регистр UDR из сдвигового регистра, не был прочитан перед следующим поступившим символом. Этот флаг обновляется после считывания действительного символа из регистра UDR, поэтому пользовательская программа должна всегда проверять флаг OR после чтения регистра UDR, чтобы распознать потерю одного поступившего символа. Флаг OR сбрасывается при переносе считанного символа в регистр UDR.

Настройка скорости передачи данных через UART

В приемопередатчик UART встроен специальный контроллер скорости передачи данных, представляющий собой делитель частоты для определения скорости передачи данных на основании такта системной синхронизации.

Скорость передачи может быть вычислена по следующему уравнению:

где fBaud – скорость передачи в бодах, Ф – такт системной синхронизации; UBRR – содержимое 8-разрядного регистра UBRR (0...255).

Значения, записываемые в регистр UBRR для наиболее распространенных скоростей передачи данных, представлены в табл. 7.1.

Таблица 7.1. Значения регистра UBRR для наиболее распространенных скоростей передачи данных и частоты работы кварцевого осциллятора

Скоростьпередачиданных,бод 1,8432 МГц Погрешность (%) 3,6864 МГц Погрешность (%) 4 МГц Погреш ность(%)
1200 UBRR = 95 0,0 UBRR = 191 0,0 UBRR = 207 0,2
2400 UBRR = 47 0,0 UBRR = 95 0,0 UBRR = 103 0,2
4800 UBRR = 23 0,0 UBRR = 47 0,0 UBRR = 51 0,2
9600 UBRR = 11 0,0 UBRR = 23 0,0 UBRR = 25 0,2
14400 UBRR=7 0,0 UBRR=15 0,0 UBRR = 16 2,1
19200 UBRR=5 0,0 UBRR = 11 0,0 UBRR=12 0,2
2400 UBRR = 207 0,2 UBRR = 287 UBRR = 312
4800 UBRR = 103 0,2 UBRR = 143 0,0 UBRR = 155 0,2
9600 UBRR = 51 0,2 UBRR = 71 0,0 UBRR = 77 0,2
14400 UBRR = 34 0,8 UBRR = 47 0,0 UBRR = 51 0,2
19200 UBRR = 25 0,2 UBRR = 35 0,0 UBRR = 38 0,2

Значения, выделенные курсивом, превышают 255, и потому не могут быть установлены в регистре UBRR, имеющем длину всего 8 разрядов. Если потребуется соответствующая скорость передачи данных, то необходимо переходить на более низкие частоты колебаний кварцевого осциллятора.

Приемопередатчик USART микроконтроллеров PIC

В микроконтроллерах PIC скорость обмена данными через приемопередатчик USART задается восьмиразрядным счетчиком во взаимодействии с регистром SPBRG. Когда содержимое счетчика и регистра SPBRG совпадает, счетчик сбрасывается в нуль. На значение скорости передачи через USART также влияет состояние разряда BRGH регистра управления TXSTA (рис. 1.32). Этот разряд определяет, какая требуется скорость для передачи данных: высокая (BRGH = 1) или низкая (BRGH = 0).

Значение для записи в регистр SPBRG вычисляется по следующей формуле:

SPBRG = (FOSC * 4BRGH) / (64 * скорость передачи) - 1.

Например, для того чтобы получить скорость передачи 9600 бод при микроконтроллере с рабочей частотой FOSC = 10 МГц в регистр SPBRG должно быть записано значение (10 * 106 * 4)/(64 * 9600) – 1 = 64,1 (округляем до 64).

Управление приемопередатчиком USART осуществляется с помощью регистров TXSTA, который используется для управления процессом передачи (рис. 7.4), и RCSTA, который используется для управления процессом приема (рис. 7.5).


7 6 5 4 3 2 1 0
CSRC TX9 TXEN SYNC BRGH TRMT TX9D

Рис. 7.4. Регистр TXSTA микроконтроллеров PIC

В отличие от приемопередатчика UART микроконтроллеров AVR, устройство USART может обмениваться данными не только в асинхронном, но и в синхронном режиме. В этом случае поразрядный сдвиг данных из сдвигового регистра в линию передачи (или наоборот) осуществляется по синхроимпульсам самого приемопередатчика USART или внешнего устройства. Выбор режима работы USART осуществляется с помощью разряда SYNC регистра TXSTA (1 – синхронный режим; 0 – асинхронный режим), а выбор источника тактовых импульсов в синхронном режиме – с помощью разряда CSRC (1 – внутренний источник; 0 – внешний источник).

Назначение остальных разрядов регистра TXSTA:

-TX9D – девятый бит передаваемых данных, если ТХ9 = 1;

-TRMT – флаг, сигнализирующий о завершении передачи байта;

-TXEN – флаг разрешения передачи данных;

-ТХ9 – разрешение (лог. 1) передачи данных в девятиразрядном формате.

7 6 5 4 3 2 1 0
SREN RX9 SREN CREN ADDEN FERR OERR RX9D

Рис. 7.5. Регистр RCSTA микроконтроллеров PIC

Назначение разрядов регистра RCSTA:

-RX9D – девятый бит принимаемых данных, если RX9 = 1;

-OERR – флаг, указывающий на переполнение буфера приема;

-FERR – флаг, указывающий на обнаружение ошибки в формате принимаемых данных;

-ADDEN – разрешение обнаружения адреса в асинхронном режиме передачи девяти бит данных– в некоторых микроконтроллерах PIC приемник USART может использоваться для приема сразу двух байтов в формате "данные:адрес", где адрес предназначен для идентификации устройства, связанного с шиной данных (в таком случае подпрограмма обработки прерывания вначале проверит адрес запрошенного устройства и только потом обработает байт данных);

-CREN – разрешение режима непрерывного приема;

-SREN – флаг разрешения однократного приема в синхронном режиме (после приема данных автоматически сбрасывается в лог. 0);