Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УЧПУ.Контроллеры электроавтоматики.doc
Скачиваний:
21
Добавлен:
17.09.2019
Размер:
6.86 Mб
Скачать

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

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

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

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

2.5.2. Режим ведущего i2c.

Режим ведущего включатся путем установки бит 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