3.9.3.5 Регистры модуля usart в режиме i2c
Регистры I2C представлены в таблице ?
Таблица ?
-
Имя
Назначение регистра
Адрес
Нач.значен.
U0CTL
Управление USART0
70h
1
I2CTCTL
Управление передатчика I2C
71h
0
I2CDCTL
Контроль данных I2C
72h
0
I2CPSC
Управление предделителя
73h
0
I2CSCLH
Управление длительностью SCL в 1
74h
0
I2CSCLL
Управление длительностью SCL в 0
75h
0
I2CDRB/I2CDRW
Буфер приемника приемопередатчика
76h
0
I2CNDAT
Счетчик байтов транзакции
52h
0
I2CIE
Разрешение прерывания I2C
50h
0
I2CIFG
Флаги прерывания I2C
51h
0
I2COA
Собственный адрес ведомого
118h
0
I2CSA
Адрес ведомого при обращении
11Ah
0
I2CIV
Регистр идентификации прерывания
11Ch
0
U0CTL (USART Control) – 8-ми битный регистр, доступен по записи и чтению. Содержит биты управления USART.
7 6 5 4 3 2 1 0
-
RXDMAEN
TXDMAEN
I2C
XA
LISTEN
SYNC
MST
I2CEN
Бит 7 – RXDMAEN – разрешение работы DMA контроллера при приеме данных:
0 – DMA запрещен;
1 – DMA разрешен.
Бит 6 – TXDMAEN – разрешение работы DMA контроллера при передаче данных:
0 – DMA запрещен;
1 – DMA разрешен.
Бит 5 – I2C – для работы в режиме I2C должен быть установлен в 1;
Бит 4 – XA (Extended Addressing) – сбрасывается/устанавливается программно для задания режима 7-ми/10-ти битного адреса;
Бит 3 – LISTEN – прослушивание. При установка этого бита в 1 происходит внутреннее замыкание сдвигового регистра передатчика на сдвиговый регистр приемника. Назначение этого бита не совсем понятно, т.к. мастер – передатчик в любом случае прослушивает линию SDA на предмет определения коллизий. Вероятно, этот бит в режиме I2C является рудиментным и «достался в наследство» от режимов UART и SPI.
Бит 2 – SYNC - для работы в режиме I2C должен быть установлен в 1;
Бит 1 – MST (Master) – определяет режим работы модуля:
0 –режим ведомого;
1 – режим ведущего.
Бит 0 – I2CEN – установка/сброс этого бита разрешает/запрещает работу модуля I2C.
I2CTCTL (I2C Transmit Control) – 8-ми битный регистр управления передатчика. Биты 7..4 могут быть модифицированы только при условии I2CEN=0.
7 6 5 4 3 2 1 0
-
I2CWORD
I2CRM
I2CSSEL1,0
I2CTRX
I2CSTB
I2CSTP
I2CSTT
Бит 7 – I2CWORD – установка/сброс этого бита задает словный/байтовый формат при обращении к регистру I2CDR;
Бит 6 – I2CRM – (Repeat mode) – режим использования регистра I2CNDAT.
0 – содержимое регистра I2CNDAT определяет количество байтов
в транзакции;
1 – количество байтов в транзакции определяется программно,
содержимое I2CNDAT игнорируется.
Бит используется только в режиме ведущего.
Бит 5,4 – I2CSSEL1,0 (Clock Source Select) – комбинация этих бит выбирает источник тактирования I2C модуля
I2CSSEL1 |
I2CSSEL0 |
Источник |
0 |
0 |
I2C модуль не активен |
0 |
1 |
ACLK |
1 |
0 |
SMCLK |
1 |
1 |
SMCLK |
Бит 3 – I2CTRX - установка/сброс этого бита задает режим передачи/приема данных в том случае, если модуль конфигурирован как ведущий. Если модуль конфигурирован как ведомый, этот бит должен быть сброшен.
Бит 2 – I2CSTB (Start Byte) – в том случае, если модуль конфигурирован как мастер, установка этого бита инициирует передачу стартового байта (код 01h) после генерации стартового состояния шины.
Бит 1 – I2CSTP (Stop) – установка этого бита вызывает генерацию стопового состояния шины. После того, как данная операция выполнена, этот бит автоматически сбрасывается.
Бит 0 – I2CSTT (Start) – установка этого бита вызывает генерацию стартового состояния шины. После того, как данная операция выполнена, этот бит автоматически сбрасывается.
I2CDCTL (I2C Transmit Control) – 8-ми битный регистр содержит биты позволяющие определить текущее состояние шины. Регистр доступен только по чтению
7 6 5 4 3 2 1 0
-
-
I2CBUSY
I2CSCLLOW
I2CSBD
I2CTXUDF
I2CRXOVR
I2CBB
Бит 7,6 – не используются.
Бит 5 – I2CBUSY – модуль I2C занят. Устанавливается аппаратно если I2C модуль активизируется, в противном случае сбрасывается.
Бит 4 – I2CSCLLOW – устанавливается аппаратно, если ведомое устройство удерживает линию SCL в состоянии логического нуля, в противном случае сбрасывается. Бит используется только в режиме ведущего.
Бит 3 – I2CSBD (Single Byte Data) – единичный байт данных. Бит используется только в режиме 16-ти битного формата данных. Устанавливается аппаратно в единицу, если буфер приемника принял младший байт слова, сбрасывается аппаратно, когда все слово принято.
Бит 2 – I2CTXUDF (Transmit Underflow) – истощение передатчика. В режиме ведущего устанавливается если буферный и сдвиговый регистр передатчика не имеют данных для передачи. В режиме ведомого устанавливается в случае, если сдвиговый и буферный регистры передатчика пусты, а мастер продолжает запрашивать данные по шине, генерируя импульсы SCL. Сбрасывается после записи новых данных в буфер передатчика.
Бит 1 – I2CRXOVR (Receive Overrun) – переполнение приемника. Устанавливается в том случае, если сдвиговый регистр принял очередной байт, а предыдущий байт не был вычитан из буфера. В этом случае потеря данных не происходит, т.к. приемник автоматически блокирует дальнейшую передачу, удерживая линию SCL в состоянии логического нуля.
Бит 0 – I2CBB (Bus Busy) – шина занята. Устанавливается в единицу после обнаружения на шине стартового состояния, сбрасывается после стопового состояния.
I2CDR (I2C Data Register) – 8-ми иди 16-ти разрядный буфер данных приемопередатчика. В том случае, если используется словный формат данных ( I2CWORD=1) любая попытка модификации этого регистра с помощью байтовых форм инструкции будет игнорирована.
I2CNDAT (Number Data) – 8-ми разрядный регистр, поддерживающий автоматический подсчет переданных/принятых байт в режиме ведущего. Если используется 16-ти разрядный формат данных, его содержимое должно быть четным.
I2CPSC (Clock Prescaler) – делитель входной частоты тактирования I2C модуля для формирования скорости приема/передачи данных. Коэффициент деления при этом рассчитывается как I2CPSC+1. Не рекомендуется задавать значения этому регистру больше чем 4. Содержимое этого регистра может быть модифицировано при условии I2CEN=0.
I2CSCLH (SCL High) – 8-ми разрядный регистр, используемый для задания длительности сигнала SCL, когда он находится в состоянии логической единицы. Длительность сигнала определяется по формуле (I2CSCL+2)*/(I2CPSC+1)/ Fin, где Fin – частота тактирования модуля I2C. Приведенная формулы верна для значений I2CSCL=4..255, для значений I2CSCL=0..5, длительность рассчитывается по формуле 5*/(I2CPSC+1)/ Fin. Содержимое этого регистра может быть модифицировано при условии I2CEN=0.
I2CSCLL (SCL Low) – 8-ми разрядный регистр, используемый для задания длительности сигнала SCL, когда он находится в состоянии логической нуля. Расчет длительности проводится также как для регистра I2CSCLH. Содержимое этого регистра может быть модифицировано при условии I2CEN=0.
I2COA (Own Address) – собственный адрес. 16-разрядный регистр, куда записывается собственный адрес в том случае, если контроллер используется как ведомое устройство. Содержимое этого регистра может быть модифицировано при условии I2CEN=0.
I2CSA (Slave Address) – адрес ведомого. Содержимое этого 16-ти регистра передается автоматически после генерации стартового состояния. Регистр используется, если задан режим мастера шины.
I2CIFG (Interrupt Flag) – регистр содержит флаги требования прерывания. Все флаги устанавливаются аппаратно. Сброс большинства флагов осуществляется либо аппаратно при вычитывании соответствующего кода прерывания из регистра I2CIV (см. ниже), либо программно.
7 6 5 4 3 2 1 0
STTIFG |
GCIFG |
TXRDYIFG |
RXRDYIFG |
ARDYIFG |
OAIFG |
NACKIFG |
ALIFG |
Бит 7 – STTIFG (Start) – флаг требования прерывания при распознании стартового состояния шины. Используется только в режиме ведомого.
Бит 6 – GCIFG (Global Call) – флаг требования прерывания при регистрации общего вызова. Используется только в режиме приемника.
Бит 5 – TXRDYIFG (Transmit Ready) – флаг требования прерывания при готовности буфера передатчика. Сбрасывается также аппаратно, если имеются данные в сдвиговом и буферном регистрах. Не используется в режиме приемника.
Бит 4 – RXRDYIFG (Receive Ready) – флаг требования прерывания при приеме нового байта данных. Сбрасывается также аппаратно после вычитывания данных из буфера I2CDR, и не имеется новых данных для записи в буфер. Используется только в режиме приемника.
Бит 3 – ARDYIFG (Access Ready) – флаг требования прерывания по готовности регистров к доступу. Логика установки этого бита зависит от режима работы модуля I2C:
ведущий передатчик, I2CRM=0 – все данные переданы;
ведущий передатчик, I2CRM=1 – все данные переданы и бит I2CSTP=1;
ведущий приемник, I2CRM=0 – все данные, согласно содержимому I2CNDAT, приняты и вычитаны из I2CDR;
ведущий приемник, I2CRM=1 – принят и вычитан последний байт и бит I2CSTP=1;
ведомый передатчик – обнаружено стоповое состояние шины;
ведомый приемник – обнаружено стоповое состояние шины и все данные вычитаны.
Бит 2 – OAIFG (Own Address) – флаг требования прерывания при распознавании собственного адреса. Используется только в режиме ведомого;
Бит 1 – NACKIFG (No Acknowledge)) – флаг требования прерывания при отсутствии подтверждения на переданный байт данных. Используется только в режиме ведущего.
Бит 0 – ALIFG (Arbitration Lost) – флаг требования прерывания при потере арбитража. Используется только в режиме ведущего передатчика. При установке этого флага, режим автоматически переключается на ведомый приемник.
I2CIE (Interrupt Enable) – разрешение прерывания. Установка/сброс битов этого регистра разрешают/запрещают соответствующие прерывания.
7 6 5 4 3 2 1 0
-
STTIE
GCIE
TXRDYIE
RXRDYIE
ARDYIE
OAIE
NACKIE
ALIE
Бит 7 – STTIE (Start) – разрешение прерывания при установке флага STTIFG;
Бит 6 – GCIE (Global Call) – разрешение прерывания при установке флага GCIFG;
Бит 5 – TXRDYIE (Transmit Ready) – разрешение прерывания при установке флага TXRDYIFG;
Бит 4 – RXRDYIE (Receive Ready) – разрешение прерывания при установке флага RXRDYIFG;
Бит 3 – ARDYIE (Access Ready) – разрешение прерывания при установке флага ARDYIFG ;
Бит 2 – OAIE (Own Address) – разрешение прерывания при установке флага OAIFG;
Бит 1 – NACKIE (No Acknowledge) – разрешение прерывания при установке флага NACKIFG;
Бит 0 – ALIE (Arbitration Lost) – разрешение прерывания при установке флага ALIFG;
I2CIV (Interrupt Vector) – регистр идентификации прерывания от I2C модуля. Доступен только для чтения и содержит следующие коды:
0 – нет прерываний ;
2 – прерывание при потере арбитража (ALIFG);
4 – прерывание при отсутствии подтверждения (NACKIFG);
6 – прерывание при распознании собственного адреса (OAIFG);
8 – прерывание при передачи адреса ведомого (ARDYIFG);
10 – прерывание по готовности данных по чтению (RXRDYIFG);
12 – прерывание по готовности передатчика (TXRDYIFG);
14 – прерывание при общем вызове (GCIFG);
16 – прерывание при обнаружении стартового состояния (STTIFG).
Техника работы с этим регистром аналогична описанной в п.3.7.
ПРИМЕР
Ведомому устройству с адресом 1010000b передать по шине I2C тринадцать байт данных, расположенных в памяти, начиная с адреса 24Ah. Частота SMCLK – 8 MHz, скорость передачи по шине – 100kHz (длительность 1 SCL – 4.7 us, длительность 0 SCL – 4 us).
