Портирование приложений с семейства PIC18 на PIC24F
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 при передаче в режиме ведомого. Указанные ограничения отражены в документации на конкретный контроллер.