Асинхронный приемник модуля 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, что даст информацию о надежности работы приемника.

Мажоритарный детектор предназначен для повышения надежности определения уровня сигнала в принимаемой посылке.

Таблица 24

Номер разряда                
Обозн. разряда 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 бит – RX9D – 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.

 

 

При работе модуля USART в сетевом подрежиме, необходимо при программировании приемника ввести операции дешифрации адреса, поэтому алгоритм работы будет несколько иной:

1, 2, 3, 4 пункты аналогичны рассмотренным выше.

5. Установить бит ADDEN для разрешения детектирования адреса.

6. Разрешить прием установкой бита CREN.

7. Ожидать установки бита RCIF или прерывания.

8. Считать принятый байт из регистра RCREG для опознания адреса.

9. При совпадении принятого адреса с собственным сбросить биты ADDEN и RCIF для приема последующего байта информации.

Работу модуля USART в синхронных режимах при необходимости можно изучить по руководству применения PIC-микроконтроллеров [ ].

 

Рассмотрим пример программирования модуля USART в режиме асинхронного дуплекса. Общая задача заключается в создании последовательного канала связи между котроллером и СОМ – портом компьютера. Принципиальная схема канала будет выглядеть следующим образом.

 

 

 

Рис. 21 Принципиальная схема канала связи с использованием модуля 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 бод

 

Далее следует программа обмена информацией между абонентами

 

 


24. Модуль ведущего синхронного последовательного порта (MSSP).

Модуль MSSP предназначен для связи по последовательному каналу между различными устройствами: элементы памяти, драйверы ЖКИ, другие микроконтроллеры и т.п.

Модуль может работать в двух режимах:

  1. Шинный интерфейс I2C (Inter-Integrater Circuit).
  2. Последовательный периферийный интерфейс (SPI).

 

Из этих режимов наибольший интерес для создания разветвленных систем управления представляет первый, т. е. решим шинного интерфейса. Рассмотрим его подробнее. Поскольку микроконтроллеры в данном случае представляют собой некоторую сетевую структуру, базирующуюся на протоколе шинного интерфейса I2C, то каждый из абонентов этой структуры может быть либо ведомым, либо ведущим в зависимости от программы работы модуля MSSP. Модуль MSSP в этом режиме настраивается и управляется с помощью трех регистров специального назначения:

- SSPSTAT (адрес 94h) – регистр статуса,

- SSPCON (адрес 14h) – регистр управления 1,

- SSPCON2 (адрес 91h) – регистр управления 2.

Распределение и обозначения разрядов этих регистров приведены в таблицах 25…27

 

Таблица 25 (для регистра SSPSTAT)

Номер разряда                
Обозн. разряда SMP CKE D/-A P S R/-W UA BF

где:

7 бит: SMP – фаза выборки бита: «1» - управление длительность фронта выключено, «0» - управление длительность фронта включено.

6 бит: CKE: выбор фронта тактового сигнала: «1» - входные уровни соответствуют спецификации SMBus, «0» - входные уровни соответствуют спецификации I2C.

5 бит: D/-A: бит данные/адрес: «1» - последний принятый или переданный байт является информационным, «0» - последний принятый или переданный байт является адресным.

4 бит: P: бит STOP: «1» - бит STOP был обнаружен последним, «0» - бит STOP не является последним.

3 бит: S: бит START: «1» - бит START был обнаружен последним, «0» - бит START не является последним.

2 бит: R/-W: бит чтения/записи:

для ведомого режима: «1» - чтение, «0» - запись. Бит действует только после совпадения адреса и до приема бит START, STOP, ASK.

для режима ведущего: «1» - выполняется передача данных, «0» - передачи данных нет.

1 бит: UA: флаг обновления адреса устройства: «1» - необходимо обновить адрес устройства в регистре SSPADD, «0» - обновление адреса не требуется.

0 бит: BF: бит статуса буфера SSPBUF: для приема – «1» - прием завершен, буфер полон,

«0» - прием не завершен, буфер пуст; для передачи – «1» - выполняется передача, буфер полон, «0» - передача завершена, буфер пуст.

Таблица 26 (для регистра SSPCON)

Номер разряда                
Обозн. разряда WCOL SSPOV SSPEN CRP SSPM3 SSPM2 SSPM1 SSPM0

где:

7 бит: WCOL: Бит конфликта записи: для ведущего режима: «1» - запись в SSPBUF была выполнена при несоблюдении условий шины I2C, «0» - конфликта не было; для ведомого режима: «1» - была предпринята попытка записи в SSPBUF во время передачи предыдущего байта, «0» - конфликта не было.

6 бит: SSPOV: бит переполнения приемника: «1» - принят новый байт в то время как SSPBUF содержит предыдущие данные, «0» - переполнения нет.

5 бит: SSPEN: бит включения модуля MSSP: «1» - модуль MSSP включен, выводы SCK, SDO, SDI, -SS (RC3, RC5, RC4,RA5 соответственно) подключены к модулю MSSP, «0» - модуль выключен, перечисленные выводы работают как цифровые входы/выходы.

4 бит: CKP: бит выбора полярности тактового сигнала:(только для ведомого режима, для ведущего не используется) «1» - тактовый сигнал не управляется, «0» - тактовый сигнал удерживается в низком логическом уровне (используется для подготовки данных).

3 – 0 биты: SSPM3: SSPM0: режимы работы модуля MSSP:

SSPM3:SSPM0

0110 - ведомый режим, 7-ми разрядная адресация,

0111 - ведомый режим, 10-ми разрядная адресация,

1000 – ведущий режим, тактовый сигнал = Fosc/(4*(SSPADD +1),

1011 - программная поддержка ведущего режима (ведомый режим выключен),

1110 – программная поддержка ведущего режима, 7-ми разрядная адресация с

разрешением прерываний по приему бит START и STOP,

1111 – программная поддержка ведущего режима, 10-ти разрядная адресация с

разрешением прерываний по приему бит START и STOP.

 

 

Таблица 27 (для регистра SSPCON2).

Номер разряда                
Обозн. разряда GCEN ACRSTAT ACKDT ACKEN RCEN PEN RSEN SEN

где:

7 бит: GCEN: бит разрешения поддержки общего вызова (только для ведомого режима): «1» - разрешить прерывания при приеме в регистр SSPSR адреса общего вызова (0000h),

«0» - поддержка общего вызова выключена.

6 бит: ASCSTAT: бит статуса подтверждения (только для ведущего режима). Подрежим передачи: «1» - подтверждения от ведомого не получено, «0» - подтверждение от ведомого получено.

5 бит: ACKDT: бит подтверждения (только для ведущего режима). Подрежим приема ведущим: «1» есть подтверждение, «0» - нет подтверждения.

4 бит: ACKEN: формирование бита подтверждения (только для ведущего режима). «1» - на выводах SCL, SDA – формируется бит ACKDT, «0» - подтверждение не формируется.

3 бит: RCEN: Разрешение приема данных (только для ведущего режима): «1» - разрешить прием данных с шины I2C, «0» - приемник ведущего выключен.

2 бит: PEN: формирование бита STOP (только для ведущего режима), «1» - на выводах SCL, SDA – формируется бит STOP, «0» - бит STOP не формируется.

1 бит: RSEN: формирование бита повторный START (только для ведущего режима): «1» на выводах SCL, SDA формируется бит повторный START, «0» - бит повторный START не формируется.

0 бит: SEN: формирование бита START (только для ведущего режима): «1» - на выводах SCL, SDA формируется бит START, «0» - бит START не формируется.

 

Как было сказано выше, в сетевой структуре микроконтроллеров есть два вида: ведомые и ведущие, каждый из которых может принимать и передавать информацию. Рассмотрим каждый вид в отдельности.

 

Режим ведомого I2C.

Структурная схема модуля MSSP в этом режиме показана на рис.21 Для своей работы модуль использует два вывода микроконтроллера: SCL и SDA (соответственно RC3 и RC4).

Работа модуля в данном режиме заключается в следующем. Рабочие сигналы в модуль поступают через два вывода микроконтроллера: SDA (RC4) – биты информации, SCL (RC3) – тактовые сигналы, поэтому оба вывода должны быть предварительно настроены на ввод. После включения модуля MSSP (установка бита SSPEN в регистре SSPCON) ожидается появление бита START, после чего принимается 8 бит, которые записываются в сдвиговый регистр SSPSR. Запись происходит по переднему фронту синхронизирующего импульса на входе SCL. По заднему фронту 8-го импульса SCL содержимое регистра SSPSR сравнивается с содержимым регистра SSPADD, где хранится адрес конкретного устройства – абонента сети. Если значения регистров совпадают (адрес опознан), и биты BF, SSPOV равны нулю (нет переполнения регистра SSPBUF), то производятся следующие действия:

- значение регистра SSPSR переписывается в регистр SSPBUF по заднему фронту 8 импульса SCL;

- устанавливается флаг BF (буфер полон) в регистре SSPSTAT;

- генерируется бит –ACK;

- устанавливается флаг SSPIF (PIR1 <3>) по заднему фронту 9-го импульса SCL. После приема и опознания адреса возможны два варианта продолжения работы модуля: прием от ведущего микроконтроллера или передача информации ведущему. Вид работы определяется состоянием бита R/-W (0 бит) в адресном байте.

Прием данных.

Если в принятом адресном байте бит R/-W равен нулю, то бит R/-W в регистре SSPSTAT также устанавливается в 0. Все последующие байты будут информационными, поэтому из регистра SSPSR переписываются в регистр SSPBUF, одновременно формируется бит ответа ASK и устанавливается флаг SSPIF (флаг SSPIF устанавливается после приема каждого байта). После установки флага содержимое регистра SSPBUF должно быть прочитано и программно должен быть сброшен флаг SSPIF. Если регистр SSPBUF до прихода очередного байта не был прочитан или не был сброшен флаг, то не будет сформирован бит ответа ASK, что приведет к сбою в работе модуля. При нормальной работе прием информации ведомым микроконтроллером продолжается до приема стоп-бита P (бит P в регистре SSPSTAT также устанавливается в 1). Восстановление работы модуля производится после его выключения и повторного включения (бит SSPEN в регистре SSPCON).

Передача данных.

Работа модуля по приему и опознанию адреса аналогична рассмотренному выше. Но если в принятом адресном байте бит R/-W равен 1, то бит R/-W в регистре SSPSTAT также устанавливается в 1. Одновременно бит CKR (4бит регистра CCPCON) устанавливается в 0, что блокирует линию SCL. Передаваемый байт записывается в регистр SSPBUF и устанавливается в 1 бит SKR, что означает освобождение линии SCL. Ведущее устройство контролирует линию SCL и при обнаружении тактовых импульсов начинает прием посылки по заднему фронту сигналов на линии SCL. На 9 такте на линии SCL ведущее устройство формирует сигнал ACK. Если сигнал ACK от ведущего не поступил, то ведомое устройство заканчивает прием установкой в 1 бита P (4бит в регистре SSPSTAT) и переходит режим ожидания сигнала START.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-02-25 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: