
3.9.3.3 Арбитраж
Как правило, в состав I2C шины входят управляющий микроконтроллер в качестве ведущего устройства и несколько ведомых микросхем, таких как память, АЦП, ЦАП, часы реального времени и т.д. Однако I2C шина позволяет строить информационные сети, состоящие из нескольких контроллеров, каждый из которых может быть потенциальным мастером шины. Поэтому в такой системе необходим механизм разрешения конфликтов, возникающих, в том случае, если несколько ведущих устройств пытаются взять контроль над шиной.
Для разрешения конфликтов каждый передающий мастер прослушивает состояние линии SDA на соответствие передаваемой и принимаемой информации. Если один передатчик выставил на линии SDA логический ноль, а другой логическую единицу, то, поскольку все передатчики соединены по логике «монтажное или», на линии будет иметь место потенциал низкого уровня. Таким образом, передатчик, генерирующий логическую единицу, отвергается противостоящим ведущим, генерирующим логический сигнал низкого уровня. Процедура арбитража дает приоритет устройству, которое передает поток последовательных данных с наименьшим двоичным значением. Ведущий передатчик, потерявший арбитраж, переключается в ведомый режим приема и устанавливает флаг потери арбитража ALIFG регистра флагов прерывания. Если два или более устройства посылают одинаковые первые байты, арбитраж продолжается на последующих байтах.
3.9.3.4 Тактирование i2c модуля
Скорость тактирования I2C шины зависит от частоты источника тактирования всего модуля, определяемого битами I2CSSEL регистра управления передатчика, предварительного делителя частоты I2CPSC и содержимым регистров I2CSCLH и I2CSCLL, определяющих длительность импульсов SCL в состояниях логических единицы и нуля соответственно. В качестве источника тактирования могут выступать сигналы ACLK или SMCLK (см. п. 3.3). Регистр I2CPSC используется как делитель частоты тактирования, при этом коэффициент деления выражается как I2CPSC+1. Фирма производитель не рекомендует задавать значение I2CPSC не более 4. Содержимое I2CSCLH и I2CSCLL задает длительность импульсов SCL в количестве тактов частоты тактирования. При этом значения от 0 до 3 в этих регистрах соответствуют 5 периодам частоты делителя, значение 4 – 6 периодам, 5 – 7 периодам и т.д. Временные характеристики тактирования должны соответствовать самой медленной микросхеме, подключенной к шине. Скоростные характеристики периферийных микросхем определяются по их спецификации.
3.9.3.4 Инициализация модуля i2c
Регистр управления USART содержит биты, определяющие режим модуля. Бит I2CEN разрешает/запрещает работу I2C модуля. Состояние некоторых битов управления возможно изменить только при сброшенном бите I2CEN. Конфигурирование и реконфигурирование должно выполняться только при I2CEN=0. Сброс этого бита вызывает следующие эффекты:
связь по I2C шине останавливается;
линии SDA и SCL переводятся в высокоимпедансное состояние;
в регистре I2CTCTL очищаются биты 3-0, а биты 7-4 не изменяются;
очищаются регистры I2CDCTL и I2CDR;
сдвиговые регистры приема и передачи очищаются;
регистры U0CTL, I2CNDAT, I2CPSC, I2CSCLL, I2CSCLH не изменяются;
регистры I2COA, I2CSA, I2CIE, I2CIFG и I2CIV не изменяются.
При конфигурировании модуля I2C необходимо выполнить следующие действия:
линии микроконтроллера P3.1/SIMO0/SDA и P3.3/UCLK0/SCL конфигурировать для поддержки периферийных функций (см. 3.6.);
Бит I2CEN в регистре U0CTL установить в состояние 0;
Биты SYNC и I2C установить в 1 для задания режима I2C;
В зависимости от требуемого режима установить признак ведущий/ведомый;
В зависимости от требуемого режима установить 7-ми/10-битный адрес;
Если выбран режим ведомого, прописать собственный адрес в регистр I2COA;
Установить требуемую скорость приема/передачи;
Установить бит I2CEN в единицу.