Универсальный синхронно – асинхронный приемопередатчик (USART)

 

Модуль 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
TXIF
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.

Примечание.

При передаче массива данных возможны два варианта:

  1. при работе по прерываниям запись очередного байта, запись 9-го разряда при9-ти разрядной передаче, контроль окончания передачи массива, а также управление битами прерывания TXIE, PEIE, GIE производится в подпрограмме обслуживания прерывания.
  2. при работе без прерывания перед записью 9-го разряда и передаваемого байта необходимо убедиться, что буфер TXREG пуст ( бит TXIF – 4 бит в регистре PIR1 равен 1).

 

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.

  1. Установить требуемую скорость приема с помощью регистра SPBRG и бита BRGH (см. раздел передатчика USART), если скорость не была установлена ранее.
  2. Выбрать асинхронный режим сбросом бита SYNC и установкой бита SPEN.
  3. Установить биты RCIE, PEIE, GIE при работе по прерываниям.
  4. Установить бит RX9 при разрешении 9-ти битного приема.
  5. Разрешить прием установкой бита CREN.
  6. Ожидать установку флага RCIF или прерывания.
  7. Считать 9-тый бит данных и проверить наличие ошибки FERR.
  8. Считать принятый байт из регистра RCREG.
  9. При обнаружении ошибки переполнения сбросить бит CREN.

 

Примечание. При приеме массива данных и отсутствии ошибок возвратиться на пункт 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, просмотров: 4.