Портирование приложений с семейства PIC18 на PIC24F. 2.5. Модуль I2C

    2.5. Модуль I2C
    Архитектура модуля последовательно интерфейса I2C не претерпела значительных изменений в семействе PIC24F по сравнению с PIC18 - большинство управляющих битов и регистров имеют свои аналоги в PIC24F. Модули I2C обоих семейств поддерживают режимы 7- и 10-битной адресации, общий вызов на шине, удержание тактового сигнала, 100 кГц и 400 кГц частоту на линии тактирования, детектирование коллизий в режиме нескольких ведущих (multi master mode).

    Вместе с тем, модули I2C семейства PIC24F имеют дополнительные возможности, отсутствующие в PIC18, такие, как конфигурируемая маска адреса, режим повторителя. Следует отметить, что в PIC24F приемник и передатчик I2C являются физически независимыми модулями.
    Реализация обмена по I2С в микроконтроллерах PIC18 может быть организована либо по прерываниям, либо поллингом флагов статуса. Архитектура модулей I2C семейства PIC24F построена таким образом, что для осуществления I2C обмена требуется значительно меньше программных ресурсов, чем для PIC18.
    Сравнение основных функций I2C модулей семейств PIC18 и PIC24F приведено в табл. 25.
    Таблица 25. Сравнение основных функций I2C модулей семейств PIC18 и PIC24F


    Параметры

    PIC18

    PIC24F

    Поддерживаемая частота сигнала на шине тактирования

    100 кГц / 400 кГц

    100 кГц / 400 кГц / 1 МГц

    Режим 7- и 10-битной адресации

    да

    да

    Упрощенный режим 10-битной адресации

    нет

    да

    Поддержка нескольких ведущих на шине

    да

    да

    Конфигурируемая маска адреса

    да (до 6 бит)

    да (все 7 или 10 бит)

    Общий вызов на шине

    да

    да

    Поддержка зарезервированных адресов

    только некоторые устройства

    да

    Опция удержания тактового сигнала

    да

    да

    Режим повторителя (IPMI)

    нет

    да

    Управление длительностью фронта

    да

    да

    Опция отключения в режиме IDLE

    нет

    да

    Уровни спецификации I2C и SMBus

    да

    да

    2.5.1. Наименования битов и регистров модуля
    Большинство служебных битов модуля I2С микроконтроллеров PIC24F имеют псевдонимы, соответствующие (или похожие) названию аналогичных битов в семействе PIC18 – см. табл. 26, табл. 27 и табл. 28.
    Таблица 26. Сравнение основных управляющих битов модулей I2C семейств PIC18 и PIC24F (вне зависимости от режима работы)


    Функция

    PIC18

    PIC24F

    Разрешение работы модуля

    SSPEN

    I2CEN

    Флаг детектирования стоп-бита

    P

    P

    Флаг детектирования старт-бита

    S

    S

    Отключение функции контроля скорости нарастания

    SMP

    DISSLW

    Соответствие диаграммы входных уровней спецификации SMBus

    CKE

    SMEN

    Флаг ошибки записи в регистр передатчика

    WCOL

    IWCOL

    Флаг переполнения регистра приемника

    SSPOV

    I2COV

    Буфер приемника заполнен

    BF

    RBF

    Буфер передатчика заполнен

    BF

    TBF

    Таблица 27. Сравнение основных управляющих битов и регистров для модулей I2C семейств PIC18 и PIC24F (работа в режиме ведомого)


    Функция

    PIC18

    PIC24F

    Удержание линии SCL

    CKP

    SCLREL

    Режим 10-битной адресации

    SSPM3:SSPM0 = 1111b

    A10M

    Разрешение функции общего вызова

    GCEN

    GCEN

    Флаг типа последнего принятого бита – адрес/данные

    D/A

    D/A

    Флаг операции – чтение/запись

    R/W

    R/W

    Таблица 28. Сравнение основных управляющих битов и регистров для модулей I2C семейств PIC18 и PIC24F (работа в режиме ведущего)


    Функция

    PIC18

    PIC24F

    Флаг подтверждения ACK (прием)

    ACKDT

    ACKDT

    Разрешение передачи бита подтверждения ACK

    ACKEN

    ACKEN

    Разрешение работы приемника

    RCEN

    RCEN

    Инициализация стоповой посылки

    PEN

    PEN

    Инициализация повторной стартовой посылки

    RSEN

    RSEN

    Инициализация стартовой посылки

    SEN

    SEN

    Флаг подтверждения ACK (передача)

    ACKSTAT

    ACKSTAT

    Статус передатчика

    TRMT

    TRSTAT

    Флаг коллизии на шине

    BCLIF

    BCL и MI2CxIF

    2.5.2. Новые функции модуля I2Cв семействе PIC24F
    Перечисленные выше функции и свойства I2C модуля семейства PIC24F значительно увеличивают гибкость использования по сравнению с PIC18.
    Независимая логика приемника и передатчика. В семействе PIC24F приемник и передатчик являются функционально раздельными модулями, каждый из которых имеет свою логику работы, набор служебных регистров и вектор прерывания.
    Режим шинного повторителя. Модуль I2C семейства PIC24F может работать в качестве «пассивного» повторителя с возможностью удержания тактового сигнала.
    Поддержка общего вызова на шине. Флаг GCSTAT (I2CxSTAT<9>) позволяет быстро определить возникновение события общего вызова, без обращения к буферу приемника.
    Прерывание при приеме адреса совпадающего с маской. Модуль I2C семейства PIC24F в режиме работы «ведомый» может генерировать прерывание при совпадении принятого адреса (7- или 10-битного) с заданной маской произвольной конфигурации.
    Прием 10-битного адреса. Прием 10-битного адреса в микроконтроллерах PIC24F не требует операции побайтного считывания адреса из регистра приемника (как в микроконтроллерах PIC18). Логика детектирования 10-битного адреса устанавливает флаг ADD10 (I2CxSTAT<8>).

    2.5.3. Функции модуля I2C, отсутствующие в семействе PIC24F
    Модуль I2C семейства PIC24F не поддерживает режим работы «программный ведущий», который в микроконтроллерах PIC18 устанавливается битами SSPM<3:0> = 1011b. Таким образом, аппаратно поддерживаются только уровни VIH и VIL, то есть стандартные входные уровни.

    2.5.4. Портирование типового приложения
    Программные приложения, обеспечивающие работу I2C модуля в микроконтроллерах семейства PIC18, могут сильно отличаться в зависимости от конкретных условий и структуры системы. Поэтому полностью охватить все режимы работы, последовательности действий и реакции на различные события не представляется возможным. Наиболее простой способ портирования приложения с семейства PIC18 на микроконтроллер PIC24F состоит в пошаговом переносе алгоритма работы, с учетом специфики и дополнительных функций модуля I2C PIC24F. Такой подход кроме выполнения основной задачи, позволит значительно сократить объем исполняемого кода.

    2.5.5. Рекомендации по портированию приложения
    Значительные различия между модулями I2C семейств PIC18 и PIC24F могут привести к некоторым затруднениям при портировании приложения. Например, типичной проблемой является тот факт, что в семействе PIC18 младший бит в регистре адреса SSPxADD равен 1, в то время как в семействе PIC24F – 0 (регистр I2CxADD), что необходимо учитывать при работе в режиме ведомого.
    Часть устройств семейства PIC24F не имеют функции вывода микроконтроллера из режимов пониженного потребления SLEEP и IDLE при совпадении адреса, а так же не обновляют бит D/A при передаче в режиме ведомого. Указанные ограничения отражены в документации на конкретный контроллер.

    Определение частоты на линии тактирования в режиме ведомого в семействе PIC24F отличается от PIC18. Так как частота выполнения инструкций в PIC24F привязана к FOSC/2, частота обмена будет в 2 раза больше при прочих равных условиях. Формулы расчета и таблицы стандартных скоростей обмена приведены в документации на семейство PIC24F [1].