Модуль USART представляет собой устройство ввода/вывода последовательного типа и предназначен для связи с любым устройством, поддерживающим заданный формат представляемой информации и согласованное по уровням передаваемых сигналов. Для обмена с абонентами модуль использует выводы микроконтроллера RC6 и RC7, которые настраиваются на вход или выход с помощью регистра TRISC, о чем будет сказано в соответствующем разделе.
Модуль может работать в одном из трех режимов:
- асинхронный полный дуплекс,
- ведущий синхронный полудуплекс,
- ведомый синхронный полудуплекс.
На практике наибольший интерес представляет режим асинхронного полного дуплекса. Рассмотрим его подробно.
2.4.1.Режим асинхронного полного дуплекса.
В этом режиме есть два подрежима:
- подрежим прямого обмена с одним абонентом,
- подрежим сетевого обмена.
Для выбора соответствующего подрежима используется 9 – ый разряд передающего регистра. Если он равен 0, то выбирается подрежим прямого обмена и принятый приемником байт является байтом данных. Если же 9–ый разряд равен 1, то принятый всеми приемниками сетевой структуры байт является адресом устройства в сети и следующий принятый байт является байтом данных для данного адресата.
Для удобства изучения рассмотрим отдельно работу передатчика и приемника.
2.4.1.1. Асинхронный передатчик USART.
Структурная схема передатчика показана на рис.
Работает передатчик следующим образом. Для настройки и управления модулем USART используется два регистра специального назначения: TXSTA и RCSTA, значения разрядов которых приведены в таблицах 24,25. Принцип работы передатчика аналогичен работе любого последовательного порта: передаваемый байт записывается в буферный регистр TXREG (адрес 19h) обычным циклом записи. Из буферного регистра байт автоматически переписывается в сдвиговый регистр TSR, где к передаваемому байту автоматически пристыковываются служебные биты: старт-бит и стоп-бит. В случае использования сетевого подрежима в восьмой бит регистра TSR (0 бит регистра TXSTA) записывается программно 1, если передаваемый байт является адресом абонента, или 0, если байт является информацией. В момент окончания перезаписи байта из регистра TXREG в регистр TSR устанавливается в «1» флаг TXIF, свидетельствующий о том, что буферный регистр пуст и в него можно записывать очередной байт для передачи, при разрешении работать по прерываниям, флаг TXIF совместно с сигналом TXIE вызывают прерывание микроконроллера от передатчика модуля USART. При поступлении на вход регистра TSR тактовых импульсов из генератора скорости обмена SPBRG содержимое регистра TSR выдвигается через вывод RC6/TX микроконтроллера и поступает на вход приемника абонента (абонентов для сетевого подрежима).
Скорость передачи определяется настройкой генератора скорости обмена SPBRG и выбором низкоскоростного режима (BGRH = 0, бит 2 регистра TXSTA), или высокоскоростного режима (BGRH = 1). Скорость в данном случае рассчитывается по формулам:
Vclk = Fosc / 64 (X+1) - для низкоскоростного режима,
Vclk = Fosc / 16 X+1) – для высокоскоростного режима.
где: X – число записанное в регистр SPBRG (адрес 99h), выбранное из таблицы 26.
Таблица 22 (для Fosc = 4 МГц).
Скорость обмена в К/бод | 0,3 | 1,2 | 2,4 | 9,6 | 19,2 | 28,8 | 57,6 |
Значение SPBRG (десятичное) | 207 | 51 | 25 | 6 | 2 | 1 | 0 |
TXREG |
TSR |
8р |
TXIF |
0р |
TXIE |
Прерывание |
TXEN |
SPBRG |
Тактовый Сигнал CLK |
TX9 |
TX9D |
Буфер вывода |
RC6 |
TRMT |
SPEN |
Рис.20. Структурная схема передатчика USART. |
Ввод передаваемого байта |
Распределение и обозначение битов регистра настройки передатчика TXSTA (адрес 98h) приведено в таблице 23
Регистр TXSTA Таблица 27
Номер разряда | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозн. разряда | CSRC | TX9 | TXEN | SYNC | - | BRGH | TRMT | TX9D |
где:
7 бит – CSRC – осуществляет выбор источника тактового сигнала для синхронного режима: бит =1- внутренний тактовый сигнал от генератора BRG, бит =0- внешний тактовый сигнал с вывода RC6. Для рассматриваемого асинхронного режима бит не имеет значения.
6 бит – TX9 - разрешение 9-ти разрядной передачи: 1 – 9-ти разрядная передача, 0 – 8-ми разрядная передача.
5 бит – TXEN – разрешение передачи: 1 – передача разрешена, 0 = передача запрещена.
4 бит – SYNC – режим работы модуля USART: 1 – синхронный, 0 – асинхронный.
3 бит – не используется.
2 бит – BRGH – выбор скоростного режима: 1 – высокоскоростной режим, 0 – низкоскоростной режим.
1 бит – TMRT – флаг состояния сдвигового регистра TSR: 1- регистр пуст, 0 – регистр занят,
0 бит – TX9 D – значение 9-го разряда при 9-ти разрядной передаче.
Рекомендуемая последовательность действий при программировании передатчика:
1.Установить расчетную скорость передачи с помощью регистра SPBRG и бита BRGH в регистре TXSTA.
2. Выбрать асинхронный режим передачи сбросом бита SYNC в регистре TXSTA и установкой бита SPEN в регистре RCSTA (см. ниже).
3. При выборе режима обслуживания прерывания необходимо:
- установить бит TXIE в регистре PIE1,
- установить бит PEIE в регистре INTCON – прерывание от периферийных модулей,
- установить бит GIE в регистре INTCON – глобальное прерывание.
4. При 9-ти разрядной передаче разрешить ее установкой бита TX9 в регистре TXSTA.
5. Разрешить передачу установкой бита TXEN, при этом автоматически установится
флаг TXIF, что приведет к вызову подпрограммы прерывания, если оно разрешено.
6. Если передача 9-ти разрядная записать соответствующее число в разряд TX9D.
7. Записать передаваемый байт в регистр TXREG.
Примечание.
При передаче массива данных возможны два варианта:
2.4.1.2. Асинхронный приемник модуля USART .
Асинхронный приемник работает независимо от передатчика, осуществляя таким образом полный дуплекс обмена информацией, однако существует синхронизация работы обоих узлов через генератор тактовых импульсов на основе регистра SPBRG. Структурная схема приемника приведена на рис.
Приемник настраивается и управляется регистром статуса RCSTA, распределение и наименование разрядов которого приведены в таблице 23 .
Работает приемник следующим образом. Входная посылка от абонента поступает на вывод RC7 микроконтроллера, который в данном случае должен быть запрограммирован на вход. Импульсы посылки, пройдя мажоритарный детектор поступают на вход сдвигового регистра RSR. Данный регистр является служебным внутренним регистром и недоступен пользователю. Ввод посылки начинается со старт-бита и заканчивается приемом стоп-бита. После приема стоп-бита содержимое регистра RSR (без старт-бита и стоп-бита) автоматически переписывается в регистр RCREG. 8 – ой бит (при 9 – ти битном приеме) записывается в «0» бит регистра RCSTA (см. таблицу 24 ). После записи принятого байта в регистр RCREG устанавливается флаг RCIF (в регистреPIR1), который в совокупности с битом RCIE (регистр PIE1) вызывает прерывание от приемника USART, если оно разрешено. Принятый байт должен быть программно прочитан в регистре RCREG, при этом флаг RCIF будет автоматически сброшен. Если по какой либо причине принятый байт не был прочитан и был принят второй байт, то первый принятый байт будет переписан в буфер регистра RCREG, а в вновь принятый байт будет сохранен в самом регистре RCREG. Двойным чтением из регистра RCREG информация будет сохранена. Если после заполнения буфера и самого регистра будет принят третий байт, то принятая посылка останется в регистре RSR, и будет установлен флаг ошибки приема OERR, принятый третий байт при этом будет потерян. Если при приеме посылки не будет обнаружен стоповый бит, то будет выставлен флаг ошибки кадра FERR, что даст информацию о надежности работы приемника.
Мажоритарный детектор предназначен для повышения надежности определения уровня сигнала в принимаемой посылке.
Таблица 28
Номер разряда | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозн. разряда | SPEN | RX9 | SREN | CREN | ADDEN | FERR | OERR | RX9D |
где:
7 бит – SPEN – разрешение работы USART: «1» - модуль включен, выводы микроконтроллера RC7, RC6 подключены к модулю USART, «0» - модуль выключен.
6 бит – RX9 – разрешение 9–ти разрядного приема: «1» - 9-ти разрядный прием, «0» - 8-ми разрядный прием.
5 бит – SREN – для асинхронного приема не имеет значения.
4 бит – CREN – разрешение приема: «1» - прием разрешен, «0» - прием запрещен.
3 бит – ADDEN - разрешение детектирования адреса: «1» - детектирование адреса разрешено, если восьмой бит регистра RSR равен 1, то содержимое регистра RSR переписывается в регистр RCREG, рассматривается как адрес и генерируется прерывание; при равенстве 0 восьмого бита регистра RSR (<0> регистра RCSTA), принятый байт является информацией. При равенстве 0 бита ADDEN детектирование адреса запрещено, все байты принимаются как информационные.
2 бит – FERR – ошибка кадра: «1» - была ошибка – отсутствие стоп-бита, сбрасывается при чтении из регистра RCREG, «0» - ошибки не было.
1 бит – OERR – ошибка переполнения приемного буфера: «1» - произошла ошибка, бит сбрасывается при сбросе бита CREN – разрешение приема, «0» - ошибки не было.
0 бит – RX9 D – 9-ый бит принятых данных (при разрешении 9-ти битного приема0.
Рекомендуемая последовательность действий при программировании приемника USART.
Примечание. При приеме массива данных и отсутствии ошибок возвратиться на пункт 6.
CREN |
OERR |
FERR |
stop 8 7 RSR 1 0 start |
RX9D |
RCREG |
FIFO |
Шина данных |
Мажоритарный детектор |
Буфер вывода, управление |
SPBRG |
SPEN |
Fosc |
RC7/Rx/DT |
RX9 |
RCIF |
Прерывание |
Тактовый сигнал CLK x 64 |
Рис.21. Структурная схема приемника модуля USART |
RCIE |
При работе модуля USART в сетевом подрежиме, необходимо при программировании приемника ввести операции дешифрации адреса, поэтому алгоритм работы будет несколько иной:
1, 2, 3, 4 пункты аналогичны рассмотренным выше.
5. Установить бит ADDEN для разрешения детектирования адреса.
6. Разрешить прием установкой бита CREN.
7. Ожидать установки бита RCIF или прерывания.
8. Считать принятый байт из регистра RCREG для опознания адреса.
9. При совпадении принятого адреса с собственным сбросить биты ADDEN и RCIF для приема последующего байта информации.
Работу модуля USART в синхронных режимах при необходимости можно изучить по руководству применения PIC-микроконтроллеров [ ].
Рассмотрим пример программирования модуля USART в режиме асинхронного дуплекса. Общая задача заключается в создании последовательного канала связи между котроллером и СОМ – портом компьютера. Принципиальная схема канала будет выглядеть следующим образом.
C5 |
C4 |
C3 |
C1 |
C2 |
16 |
RC7 RC6 |
T2IN T2OUT T1IN T1OUT R1OUT R1IN R2OUT R2IN C2+ -V C2- C1+ +V C1- GND +5v |
14 |
13 |
7 |
8 |
6 |
2 |
15 |
10 |
11 |
12 |
9 |
18 |
17 |
4 |
5 |
1 |
3 |
Рис. 22. Принципиальная схема канала связи компьютера с использованием модуля USART микроконтроллера.
Для работы данного канала необходима настройка передатчика и приемника модуля USART и физическая реализация преобразователя сигналов из формата USART в формат COM и обратно, выполненного на микросхеме MAX 232 или его аналога.
Для передатчика:
Регистр TXSTA = 0x20 – работа с восьмибитовой информацией, сдвиговый регистр TSR сброшен, низкоскоростной режим работы BRGH = 0, асинxронный режим SYNC = 0, передача разрешена TXEN = 1. В регистр SPBRG запишем число 0x06, что при низкоскоростном режиме и тактовой частоте Fosc = 4 MHZ обеспечивает скорость работы 9600 бод (см. справочные данные на конкретный микроконтроллер).
Для приемника:
Регистр RCSTA = 0x90 – USART включен, 8 – битовый обмен, прием разрешен, адрес не дешифрируется, ошибок нет, 9-ый бит отсутствует.
Настроечный фрагмент программы имеет вид:
#define XTAL_FREQ 4MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISС = 0xFF; // RC6, RC7 на вход
TXSTA = 0x20; // настройка передатчика
RCSTA = 0x90; // настройка приемника
SPDRG = 0x06; // настройка генератора на скорость 9600 бод
Далее следует программа обмена информацией между абонентами
Дата: 2019-04-23, просмотров: 305.