Модуль ведущего синхронного последовательного порта ( MSSP )
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

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

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

 

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

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

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

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

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

 

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

Номер разряда 7 6 5 4 3 2 1 0
Обозн. разряда 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» - передача завершена, буфер пуст.

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

Номер разряда 7 6 5 4 3 2 1 0
Обозн. разряда 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.

 

 

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

Номер разряда 7 6 5 4 3 2 1 0
Обозн. разряда 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 не формируется.

 

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

 

2.5.1. Режим ведомого 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 бит) в адресном байте.

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

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

 

SSPBUF
SSPSR
Детектор адреса
SSPADD
Детектор битов Start и Stop
Адрес совпал
Шина данных
Чтение
Запись
Установка и сброс битов S,P, (SSPSTAT)
SCL(RC3)
SDA(RC4)
Рис.23. Структурная схема модуля MSSP в режиме ведомого.

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

 Работа модуля по приему и опознанию адреса аналогична рассмотренному выше. Но если в принятом адресном байте бит 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.

 

 2.5.1.3.Поддержка общего вызова.

Данная процедура используется при необходимости передавать одну и ту же информацию для всех абонентов, подключенных к шине I2C. Для распознавания общего вызова используется зарезервированный для этого случая адрес, в котором все разряды, включая бит R/-W равны 0. Данный режим включатся ведомым устройством путем установки в 1 бита GSEN (7 бит регистра SSPCON2). Далее процедура работы модуля аналогична работе при приеме данных.

 

2.5.1.4. Работа в SLEEP режиме.

В SLEEP режиме микроконтроллер может принимать байты адреса или данных. При этом микроконтроллер выходит из SLEEP режима, если имеется разрешение работы модуля MSSP по прерываниям.

 

2.5.2. Режим ведущего I 2 C .

Режим ведущего включатся путем установки бит SSPM3:SSPM0 в регистре SSPCON, при этом выводы SCL и SDA управляются аппаратно (переключаются в режим выхода). Структурная схема модуля в режиме ведущего приведена на рис. Работает модуль следующим образом. При передаче данных модуль формирует сигнал START путем установки бита SEN в регистре SSPCON2, после чего ожидает прерывания или установки флага SSPIF (бит 3 в регистре PIR1). При получении этих условий в регистр SSPBUF записывается адрес абонента (7 старших разрядов и направление обмена – R/-W =0 – передача байта), одновременно устанавливается бит BF регистра SSPSTAT (буфер SSPBUF полон), после чего байт адреса переписывается в сдвиговый регистр SSPSR и передается абоненту. После перезаписи байта из регистра SSPBUF в регистр SSPSR сбрасывается бит BF регистра SSPSTAT. Получив в ответ сигнал ACK, ведущий записывает 1 в бит ACKSTAT регистра SSPCON2 и по заднему фронту 9-го тактового сигнала устанавливается флаг SSPIF, означающий что предыдущий байт передан абоненту и можно передавать следующий: либо непосредственно по опросу флага, либо по прерыванию. После этого записью в регистр SSPBUF на линию выдается байт данных. После прохода 8 тактовых импульсов ожидается бит ACK и устанавливается бит ACKSTAT. По заднему фронту 9-го тактового импульса устанавливается флаг SSPIF. Далее продолжается по данному циклу передача всех байтов информации. После передачи всего массива данных записью 1 в бит PEN (2 бит) регистра SSPCON2 инициируется сигнал STOP.

При приеме информации ведущим адресная часть цикла аналогична вышеизложенному, но в адресном байте бит R/-W равен 1, поэтому после приема сигнала ACK не устанавливается флаг SSPIF. Ведущий переходит в режим ожидания, контролируя сигнал на линии SCL (этот сигнал задерживается ведомым для перехода в режим передачи). После «отпускания» линии SCL, ведущий принимает 8 бит, записывает 1 в бит ACKDT регистра SSPCON2, формирует ответ ACK и устанавливает флаг SSPIF, по которому принятая информация должна быть прочитана (иначе она будет потеряна при приеме следующего байта. По окончании передачи массива данных ведомое устройство инициирует на шине сигнал STOP.

Ведущий отслеживает и возникновение конфликта на шине I2C. Суть обнаружения конфликта заключается в том, что при переходе сигнала на линии SCL в высокое состояние сигнал на линии SDA меняться не должен и если это произошло, значит шину пытается захватить другое устройство. Обнаружив конфликт, ведущее устройство устанавливает бит BCLIF в регистре PIR2, прекращает работу на шине и переходит в режим ожидания, контролируя возникновение на шине сигнала STOP. После обнаружения этого сигнала устройство может продолжить работу, «захватив» шину обычным способом.

С другими режимами работы модуля MSSP, например, с режимом синхронного последовательного интерфейса SPI можно ознакомиться в [ ].

 

SCL
Шина данных
SSPBUF
SSPSR
BRG генератор
Генератор START, STOP подтверждения
Детектор сигн. START, STOP, конфликтов, арбитраж
SDA
SDA
Чтение
Запись
SSPM3:SSPM0, SSPADD <6:0>
Рис. 24. Структурная схема модуля MSSP в режиме ведущего I2C.

 

 

Дата: 2019-04-23, просмотров: 251.