Асинхронно-синхронный последовательный порт (USART)
АСИНХРОННО-СИНХРОННЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ (USART)
Режимы работы:
• Асинхронный (полнодуплексный)
• Ведущий синхронный (полудуплекс).
• Ведомый синхронный (полудуплекс).
Связан с регистрами SFR:
• TXSTA и RCSTA – регистры контроля и статуса передающей и приемной частей соответственно,
• RSR – внутренний сдвиговый регистр USART.
• RCREG – хранящего принятый байт и TXREG – регистра передаваемой информации. Имеет двойную буферизацию на приеме (можно принять 2 байта в буфер FIFO регистра RCREG и один – в регистр RSR).
Рекомендуемые материалы
• SPBRG – регистр скорости USART.
Для работы с портом необходимо осуществить его конфигурирование путем установки нужных битов в регистрах TXSTA и RCSTA.
Регистр TXSTA:
CSRC | TX9 | TXEN | SYNC | - | BRGH | TRMT | TX9D |
Бит 7 | Бит 0 |
CSRC: 1/0 – ведущий/ведомый только в синхронном режиме
TX9: 1/0 - выбор формата посылки 9/8 бит
TXEN: 1/0 - разрешение/запрет передачи
SYNC: 1/0 - синхронный/асинхронный режим работы порта
BRGH: 1/0 - выбор скорости работы - высокая/низкая
TRMT: 1/0 - флаг состояния сдвигающего регистра передатчика (пустой/полный)
TX9D: 9-й бит передаваемых данных (может быть битом проверки на четность)
Временные диаграммы работы USART в асинхронном режиме
Регистр RCSTA
SPEN | RX9 | SREN | CREN | ADDEN | FERR | OERR | RX9D |
Бит 7 | Бит 0 |
SPEN: 1/0 - включение/выключение USART
RX9: 1/0 - выбор формата принимаемых данных 9/8 бит
SREN: 1 - разрешение одиночного приема только в синхронном режиме, аппаратный сброс по окончанию приема.
CREN: 1/0 - прием разрешен
ADDEN: 1/0 - разрешить/запретить детектирование адреса (при RX9=1)
FERR: 1/0 - флаг ошибки кадра
OERR: 1/0 - флаг ошибки переполнения внутреннего буфера
RX9D: 9-й бит принятых данных
Для конфигурации асинхронного порта в режим передатчика необходимо выполнить следующие операции:
• Установить необходимую скорость обмена путем записи соответствующего значения в регистр SPBRG и бита BRGH;
• Включить асинхронный порт сбросом бита SYNC (TXSTA<4>) и установкой бита SPEN (RCSTA<7>);
• Если планируется использовать прерывание для управления передачей, то установить бит TXIE (PIE1<4>);
• Установить формат посылки (8 или 9 бит), путем установки или сброса бита ТХ9 (TXSTA<6>);
• Разрешить передачу установкой бита TXEN (TXSTA<6>);
• В случае 9-битной посылки записать 9-й бит в бит TX9D (TXSTA<0>);
• Записать передаваемые данные в регистр TXREG (запуск передачи).
Конфигурация асинхронного порта для приема информации выполняется аналогично.
Генератор скорости обмена обеспечивает обмен по асинхронному порту с различной скоростью, которая определяется значением регистра SPBRG и битом BRGH. Приближенно скорость обмена можно оценить по формулам:
• BAUD=Fosc/64/(X+1), для BRGH = 0
• BAUD=Fosc/16/(X+1), для BRGH = 1,
где X – содержимое регистра SPBRG, FOSC – тактовая частота микроконтроллера.
Для кварцевого резонатора с резонансной частотой 4МГц, возможные типовые скорости передачи в зависимости от значения регистра SPBRG, при BRGH = 1 приведены в таблице.
Ошибка рассчитывалась по формуле: Error=(BAUDP- BAUDD)/BAUDD, где BAUDP – рассчитанная скорость обмена, BAUDD – желаемая скорость обмена.
Допустим при скорости обмена 9600бод, (SPBRG = 25) возможная ошибка составит 0.16%.
Скорость обмена, кбод | Ошибка, % | Значение регистра SPBRG (десятичное) |
1.202 | +0,17 | 207 |
2.403 | +0,13 | 103 |
9.615 | +0,16 | 25 |
19.231 | +0,16 | 12 |
Настройка 9-разрядного режима с детектированием адреса:
• Установить скорость передачи с помощью регистра SPBRG и бита BRGH.
• Выбрать асинхронный режим SYNC->0 и SPEN->1
• Разрешить прерывание RCIE ->1
• Включить 9-битный режим RX9->1
• Разрешить детектирование адреса ADDEN->1
• Разрешить прием CREN->1
• Ожидать установку флага RCIF, если RCIE=1
• Считать байт из регистра RCREG для проверки адреса
• При переполнении CREN->0
• Если принятый адрес соответствует нужному адресу, то ADDEN->0 и RCIF->0 для начала приема данных.
Синхронный режим USART.
• Полудуплекс: прием и передача осуществляются раздельно.
• Включается установкой бита SYNC.
Бесплатная лекция: "Протокол UDP" также доступна.
• На выводе RC6/TX/SC – синхроимпульсы, на выводе RC7/RX/DT - данные.
• Ведущий/ведомый режим: USART – источник/приемник импульсов SC.
• Обмен - младшими битами вперед.
• Переключение ведущий/ведомый битом CSRC в регистре TXREG.
• Скорость обмена=Fosc/4/(X+1), где X – значение регистра SPBRG.
• Передача в ведущем режиме начинается с записи в регистр TXREG.