19.8. Описание регистров модуля TWI
19.8.1. CTRL - общий регистр управления модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x00 |
- |
- |
- |
- |
- |
- |
SDAHOLD |
EDIEN |
|
CTRL |
Чтение/запись |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Биты 7:2 - Res: резервные биты
Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
- Бит 1 - SDAHOLD: разрешение задержки на линии SDA
Установка данного бита разрешает внутреннюю генерацию задержки на линии SDA по отношению к падающему фронту на линии SCL.
- Бит 0 - EDIEN: разрешение работы интерфейса внешнего драйвера
Установка данного бита активизирует работу интерфейса внешнего драйвера. При использовании интерфейса в обычном двухпроводном режиме данный бит должен быть равен нулю. Подробности см. в таблице 19.1.
Таблица 19.1. Разрешение работы интерфейса внешнего драйвера
EDIEN |
Режим |
Комментарий |
0 |
Нормальный TWI |
Двухпроводной интерфейс
Управляемая скорость фронтов, фильтрация входов |
1 |
Интерфейс внешнего драйвера |
Четырехпроводной интерфейс
Стандартный ввод-вывод, управление скоростью фронтов и фильтрация входов не предусмотрены |
19.9. Описание регистров ведущего модуля TWI
19.9.1. CTRLA - регистр управления А ведущего модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x01 |
INTLVL[1:0] |
RIEN |
WIEN |
ENABLE |
- |
- |
- |
|
CTRLA |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт. |
Чт. |
Чт. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Биты 7:6 - INTLVL[1:0]: уровень прерывания
Биты INTLVL позволяют выбрать уровень прерываний ведущего модуля TWI.
- Бит 5 - RIEN: разрешение прерывания по чтению
Установка бита RIEN разрешает генерацию прерывания по чтению при установке флага RIF в регистре STATUS. Чтобы генерация прерываний стала возможной, также необходимо записать отличное от нуля значение в биты INTLVL.
- Бит 4 - WIEN: разрешение прерывания по записи
Установка бита WIEN разрешает генерацию прерывания по записи при установке флага WIF в регистре STATUS. Чтобы генерация прерываний стала возможной, также необходимо записать отличное от нуля значение в биты INTLVL.
- Бит 3 - ENABLE: разрешение работы ведущего модуля TWI
Установка бита ENABLE разрешает работу ведущего модуля TWI.
- Биты 2:0 - Res: резервные биты
Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
19.9.2. CTRLB - регистр управления В ведущего модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x02 |
- |
- |
- |
- |
TIMEOUT[1:0] |
QCEN |
SMEN |
|
CTRLB |
Чтение/запись |
Чт. |
Чт. |
Чт. |
Чт. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Биты 7:4 - Res: резервные биты
Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
- Биты 3:2 - TIMEOUT[1:0]: выдержка времени для контроля интервалов бездействия шины
Запись отличного от нуля значения в биты TIMEOUT активизирует функцию контроля интервалов бездействия шины. Если шина оказывается неактивной дольше выбранной выдержки времени TIMEOUT, автомат состояний шины введет состояние IDLE.
Варианты настроек выдержки времени показаны в таблице 19.2.
Таблица 19.2. Настройки выдержки времени для контроля интервалов бездействия шины
TIMEOUT[1:0] |
Групповая конфигурация |
Описание |
00 |
DISABLED |
Функция отключена, обычно используется у шин I2C |
01 |
50US |
50 мкс, обычно используется у шин SMBus (100 кГц) |
10 |
100US |
100 мкс |
11 |
200US |
200 мкс |
- Бит 1 - QCEN: разрешение команды QUICK
Установка бита QCEN разрешает работу команды QUICK. В таком случае, условие STOP будет отправляться сразу после подтверждения адреса подчиненным устройством.
- Бит 0 - SMEN: разрешение режима SMART
Установка бита SMEN активизирует режим SMART. В таком случае, заданное битом ACKACT (регистр управления С) значение бита подтверждения будет отправляться сразу после чтения из регистра DATA.
19.9.3. CTRLC - регистр управления С ведущего модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x03 |
- |
- |
- |
- |
- |
ACKACT |
CMD[1:0] |
|
CTRLC |
Чтение/запись |
Чт. |
Чт. |
Чт. |
Чт. |
Чт. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Биты 7:3 - Res: резервные биты
Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.
- Бит 2 - ACKACT: выбор подтверждения
С помощью бита ACKACT можно задать значение бита подтверждения, который передается в режиме чтения ведущим устройством. Передача этого бита выполняется при записи команды в биты CMD. Если бит SMEN в регистре управления В равен единице, то заданный бит подтверждения передается при чтении из регистра DATA.
Описание настроек бита ACKACT представлено в таблице 19.3.
Таблица 19.3. Описание бита ACKACT
ACKACT |
Действие |
0 |
Отправляется ACK |
1 |
Отправляется NACK |
- Биты 1:0 - CMD[1:0]: команда
Запись в биты CMD инициирует выполнение ведущим устройством операции в соответствии с таблицей 19.4. Биты CMD являются стробами и всегда считываются с нулевым значением. Передача бита подтверждения со значением заданным битом ACKACT действительна только для режима чтения ведущим устройством (R). В режиме записи ведущим устройством (W), выполнение команды приводит только к генерации условия REPEATED START или STOP. Бит ACKACT и биты CMD необходимо записывать одновременно. В этом случае, перед исполнением команды будет выполнено обновление типа подтверждения.
Таблица 19.4. Описание бит CMD
CMD[1:0] |
MODE |
Команда |
00 |
X |
(резерв) |
00 |
X |
Выполнить заданное битом ACKACT подтверждение после условия REPEATED START |
10 |
/W |
Нет операции |
R |
Выполнить заданное битом ACKACT подтверждение после приема байта |
11 |
X |
Выполнить заданное битом ACKACT подтверждение после ввода условия STOP |
Запись команды в биты CMD приводит к сбросу флагов прерываний ведущего устройства и флага CLKHOLD.
19.9.4. STATUS - регистр статуса ведущего устройства
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x04 |
RIF |
WIF |
CLKHOLD |
RXACK |
ARBLOST |
BUSERR |
BUSSTATE[1:0] |
|
STATUS |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
- Бит 7 - RIF: флаг прерывания по чтению
Флаг прерывания по чтению (RIF) становится равным единице в случае успешного приема в режиме чтение ведущим устройством, т.е. когда во время передачи не был проигран арбитраж и не возникло ошибок. Запись единицы в данный бит приводит к сбросу флага RIF. Когда данный флаг равен единице, ведущее устройство удерживает линию SCL на низком уровне, задерживая синхронизацию шины TWI. После сброса флагов прерывания, линия SCL освобождается.
Данный флаг также автоматически сбрасывается в следующих случаях:
- Запись в регистр ADDR.
- Запись в регистр DATA.
- Чтение регистра DATA.
- Запись действительной команды в биты CMD (регистр CTRLC).
- Бит 6 - WIF: флаг прерывания по записи
Флаг прерывания по записи (WIF) становится равным единице после передачи байта в режиме записи ведущим устройством. Флаг устанавливается, независимо от ошибок шины и результата арбитража. Установка флага WIF происходит, даже если проигрывается арбитраж при отправке бита NACK в режиме чтения ведущим устройством и если вводится условие START при неопределенном состоянии шины (UNKNOWN). Запись единицы в данный бит приводит к сбросу флага WIF. Когда данный флаг равен единице, линия SCL удерживается на низком уровне, что приводит к задержке синхронизации шины TWI.
Освобождение линии SCL происходит после сброса всех флагов прерываний.
Автоматический сброс флага происходит при тех же условиях, что и у флага RIF.
- Бит 5 - CLKHOLD: флаг задержки синхронизации
Флаг задержки синхронизации ведущим устройством (CLKHOLD) становится равным единице, если ведущее устройство удерживает линию SCL в низком состоянии. Он является флагом статуса и доступен только для чтения. Флаг CLKHOLD равен единице, когда установлен флаг RIF и/или WIF. Сброс флагов прерываний приводит к освобождению линии SCL, а, следовательно, и к сбросу флага CLKHOLD.
Автоматический сброс флага происходит при тех же условиях, что и у флага RIF.
- Бит 4 - RXACK: флаг принятого подтверждения
Флаг принятого подтверждения (RXACK) содержит значение последнего принятого от подчиненного устройства бита подтверждения. Равенство данного флага нулю означает, что последним принятым подтверждением было ACK. Если же флаг равен единице, то в последний раз был принят бит подтверждения со значением NACK.
- Бит 3 - ARBLOST: флаг проигрыша арбитража
Флаг проигрыша арбитража (ARBLOST) становится равным единице, когда проигрывается арбитраж при передаче старшего бита данных, бита NACK или во время ввода на шине условия START или REPEATED START. Запись единицы в данный бит приводит к сбросу флага ARBLOST.
Автоматический сброс флага ARBLOST происходит во время записи в регистр ADDR.
- Бит 2 - BUSERR: флаг ошибки шины
Флаг ошибки шины (BUSERR) становится равным единице при возникновении на шине недопустимого условия. К таким условиям относятся возникшее на шине условие REPEATED START или STOP, а также передача по шине между условиями START некратного девяти числа бит. Запись единицы в данный бит приводит к сбросу флага BUSERR.
Автоматический сброс флага BUSERR происходит при записи в регистр ADDR.
- Биты 1:0 - BUSSTATE[1:0]: состояние шины
Биты BUSSTATE сигнализируют о текущем состоянии шины TWI в соответствии с таблицей 19.5. Состояние шины изменяется в зависимости от выполняющихся на ней действий. См. раздел 19.4 "Логика контроля состояния шины TWI".
Таблица 19.5. Состояние шины ведущего модуля TWI
BUSSTATE[1:0] |
Групповая конфигурация |
Описание |
00 |
UNKNOWN |
неопределенное состояние шины |
01 |
IDLE |
шина свободна |
10 |
OWNER |
шина занята её владельцем |
11 |
BUSY |
шина занята внешним устройством |
Запись значения 01 в биты BUSSTATE переводит автомат состояний шины в состояние IDLE. Ввод иных состояний через логику контроля состояния шины не предусмотрено. Когда ведущий модуль TWI отключен, а также когда МК находится в состоянии сброса, логика контроля состояния шины отключается, а шина находится в состоянии UNKNOWN.
19.9.5. BAUD - регистр скорости
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x05 |
|
BAUD |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Регистр скорости (BAUD) задает соотношение между частотой системной синхронизации и частотой синхронизации шины TWI (SCL). Данное соотношение можно представить в виде выражения:
fTWI = fSYS/[2(5+BAUD)], Гц (1)
В регистр BAUD необходимо записать значение, которому соответствует частота синхронизации шины TWI (fTWI) не более 100 кГц или не более 400 кГц, в зависимости от используемого в приложении стандарта.
После преобразования выражения (1) можно получить выражение для нахождения значения BAUD:
BAUD = (fSYS/2 · fTWI) - 5 (2)
Запись в регистр BAUD необходимо выполнить в отключенном состоянии ведущего модуля TWI.
19.9.6. ADDR - регистр адреса ведущего модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x06 |
|
ADDR |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Если шина находится в состоянии IDLE, то запись в регистр адреса (ADDR) 7-битного подчиненного адреса и бита направления (R/W) инициирует передачу условия START, семи бит адреса и бита R/W. Если во время такой записи шина была в состоянии OWNER, вводится условие REPEATED START. Если предыдущей транзакцией было чтение ведущим устройством и еще не было отправлено подтверждение, перед генерацией условия REPEATED START передается бит подтверждения со значением заданным битом ACKACT.
После завершения операции, и приема от подчиненного устройства бита подтверждения, линия SCL переводится в низкое состояние, но только при условии, что не был проигран арбитраж. Флаг WIF становится равным единице.
Если во время записи в ADDR состояние шины было неопределенным, устанавливаются флаги WIF и BUSERR.
Все флаги ведущего модуля TWI автоматически сбрасываются во время записи ADDR. К их числу относятся BUSERR, ARBLOST, RIF и WIF. Чтение регистра ADDR ведущего устройства можно выполнить в любой момент. Это никак не повлияет на текущую активность шины.
19.9.7. DATA - регистр данных ведущего модуля TWI
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
+0x07 |
|
DATA |
Чтение/запись |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Чт./Зап. |
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Регистр данных (DATA) используется для передачи и приема данных. Передача и приема данных выполняется путем логических сдвигов регистра DATA через линию SDA. Из этого следует, что доступ к регистру DATA во время передачи байта невозможен (блокируется на аппаратном уровне). Доступ к регистру данных возможен, только если линия SCL удерживается ведущим устройством в низком состоянии, т.е. когда бит CLKHOLD равен единице.
В режиме записи ведущим устройством, запись в регистр DATA запустит передачу байта данных, а, затем, прием подтверждения от подчиненного устройства. Флаги WIF и CLKHOLD становятся равными единице. В режиме чтения ведущим устройством флаги RIF и CLKHOLD принимают единичное значение по завершении приема регистром DATA одного байта данных. Если активен режим SMART, то чтение регистра DATA запустит заданную битом ACKACT операцию. При возникновении ошибок во время приема, вместо флага RIF, устанавливаются флаги WIF и BUSERR.
Доступ к регистру DATA приводит к сбросу флагов прерываний ведущего устройства и флага CLKHOLD.
|