8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 142 143 144 145 146 147 148 ... 195

Состояние с кодом $F8 является промежуточным. Наличие этого кода означает отсутствие какой-либо информации в связи с тем, что флаг TWINT не установлен.

Код статуса $00 сигнализирует об ошибке на шине. Такая ошибка возникает при формировании ведущим состояний СТАРТ или СТОП в неположенном месте, например во время передачи байта адреса, байта данных или бита подтверждения. Для выхода из таких ситуаций необходимо записать лог. 1 в биты TWSTO и TWINT. В результате модуль перейдет в режим неадресованного ведущего, освободит линии SDA и SCL и сбросит флаг TWSTO. Состояние СТОП в этой ситуации сформировано не будет.

11.5. Режимы работы модуля TWI

Модуль TWI, реализованный в микроконтроллерах семейства Mega, может работать в следующих режимах:

•ведущий-передатчик (Master Transmitter);

•ведущий-приемник (Master Receiver);

•ведомый-передатчик (Slave Transmitter);

•ведомый-приемник (Slave Receiver).

Выбор конкретного режима определяется логикой работы программы и соответственно выполняемыми действиями.

11.5.1. Режим «Ведущий-передатчик»

В режиме «Ведущий-передатчик» (Master Transmitter) осуществляется передача данных от ведущего устройства к ведомому. Для переключения устройства в режим ведущего модуль TWI должен сформировать на шине состояние СТАРТ. Формат передаваемого затем адресного пакета определяет, в каком из режимов будет работать ведущий. При передаче пакета SLA+W модуль переходит в режим «Ведущий-передатчик», а при передаче пакета SLA+R — в режим «Ведущий-приемник».

Формирование состояния СТАРТ начнется после записи в регистр TWCR следующего значения:

TWINT

TWEA

TWSTA

TWSTO

TWWC

TWEN

-

TWIE

1

X

1

0

1

0

X

-Разрешить работу модуля TWI

I-Сформировать состояние СТАРТ

-Сбросить флаг TWINT

В результате записи указанного значения модуль TWI начнет контролировать состояние шины и сформирует состояние СТАРТ сразу же, как только она станет свободной.


По окончании формирования состояния СТАРТ устанавливается флаг TWINT; код статуса должен при этом иметь значение, равное $08 (см. Табл. 11.7). Для переключения модуля в режим «Ведущий-передатчик» необходимо передать по шине пакет SLA+W. Для этого содержимое пакета загружается в регистр TWDR, а в регистр TWCR заносится следующее значение:

TWINT

TWEA

TWSTA

TWSTO

TWWC

TWEN

-

TWIE

1

X

0

0

X

1

0

X

-Разрешить работу модуля TWI

-Сбросить флаг TWINT

После передачи адресного пакета и приема бита подтверждения флаг TWINT снова устанавливается в 1. Код статуса на этом этапе может иметь одно из следующих значений: $18, $20 или $38. Какие действия необходимо предпринять при обнаружении того или иного кода, подробно рассмотрено в Табл. 11.8.

После передачи адресного пакета должны быть переданы пакеты данных. Значение байта данных загружается в регистр TWDR. Передача пакета данных начинается после записи в регистр TWCR следующего значения:

TWINT

TWEA

TWSTA

TWSTO

TWWC

TWEN

-

TWIE

1

X

0

0

X

1

0

X

T--Разрешить работу модуля TWI

-Сбросить флаг TWINT

Описанная процедура используется для передачи всех пакетов данных. После передачи последнего байта данных ведущий должен сформировать на шине состояние СТОП или ПОВСТАРТ. Формирование состояния СТОП начнется после записи в регистр TWCR следующего значения:

TWINT

TWEA

TWSTA

TWSTO

TWWC

TWEN

-

TWIE

1

X

0

1

X

1

0

X

-Разрешить работу модуля TWI

-Сформировать состояние СТОП

-Сбросить флаг TWI NT

А для формирования состояния ПОВСТАРТ в регистр TWCR необходимо занести значение:

TWINT

TWEA

TWSTA

TWSTO

TWWC

TWEN

-

TWIE

1

X

1

0

X

1

0

X

Разрешить работу модуля TWI Сформировать состояние СТАРТ Сбросить флаг TWINT


Таблица 11.8. Коды статуса для режима «Ведущий-передатчик»

Код статуса

Состояние шины и модуля TWI

Действия программы

Следующее действие, выполняемое модулем TWI

Чтение/запись в регистр TWDR

Запись в регистр TWCR

й

1

TWINT

TWEA

$08

Было сформировано состояние СТАРТ

Загрузить SLA+W

0

0

X

Будет передан SLA+W; будет получен АСК или NACK

$10

Было сформировано

состояние

ПОВСТАРТ

Загрузить SLA+W

0

0

X

Будет передан SLA+W; будет получен АСК или NACK

Загрузить SLA+R

0

0

X

Будет передан SLA+R; модуль переключится в режим «Ведущий-приемник»

$18

Был передан пакет SLA+W и принято подтверждение (АСК)

Загрузить данные

0

0

X

Будет передан байт данных; будет получен АСК или NACK

Нет действий

1

0

X

Будет сформировано состояние ПОВСТАРТ

Нет действий

0

1

X

Будет сформировано состояние СТОП (флаг TWSTO будет сброшен)

Нет действий

1

1

X

Будет сформировано

состояние СТОП,

а затем состояние СТАРТ

(флаг TWSTO будет

сброшен)

$20

Был передан пакет SLA+W, а подтверждение не было принято (NACK)

Загрузить данные

0

0

X

Будет передан байт данных; будет получен АСК или NACK

Нет действий

1

0

X

Будет сформировано состояние ПОВСТАРТ

Нет действий

0

1

X

Будет сформировано состояние СТОП (флаг TWSTO будет сброшен)

Нет действий

1

1

X

Будет сформировано

состояние СТОП,

а затем состояние СТАРТ

(флаг TWSTO будет

сброшен)



0 ... 142 143 144 145 146 147 148 ... 195