Раздел:
Документация0 ...
145 146 147 148 149 150 151 ...
195 11.5.3. Режим «Ведомый-приемник»
В режиме «Ведомый-приемник» устройство осуществляет прием данных от ведущего. Перед тем как переключить модуль в режим «Ведомый-приемник», следует занести в старшие биты регистра TWAR адрес устройства и, в соответствии с логикой работы программы, установить или сбросить младший бит регистра (TWGCE). Затем необходимо записать в регистр TWCR следующее значение:
TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | - | TWIE |
| 1 | 0 | 0 | 0 | 1 | 0 | X |
-Разрешить работу модуля TWI
-Разрешить подтверждение
После инициализации регистров TWAR и TWCR модуль будет ожидать адресного пакета с адресом, указанным в регистре TWAR, или общего вызова (если его распознавание разрешено). Значение следующего за адресом бита направления определит режим, в который переключится модуль. Если этот бит будет сброшен в 0 (запись), модуль TWI переключится в режим «Ведомый-приемник». В противном случае модуль переключится в режим «Ведомый-передатчик». Напоминаю, что устройство также может самостоятельно переключиться в режим «Ведомый-приемник» из режима ведущего при потере приоритета (см. описание кодов статуса $68 и $78 в Табл. 11.10).
После приема пакета SLA+W установится флаг TWINT, и состояние обмена по шине можно будет, как обычно, определить по коду статуса. Возможные действия со стороны программы, соответствующие тому или иному коду статуса, указаны в Табл. 11.10.
Таблица 11.10. Коды статуса для режима «Ведомый-приемник»
| | Действия программы | |
| Состояние шины и модуля TWI | Чтение/запись в регистр TWDR | Запись в регистр TWCR | Следующее действие, выполняемое модулем TWI |
I | й | STO | TWINT | TWEA |
$60 | Был принят SLA+W с собственным адресом и послано подтверждение (АСК) | Нет действий | X | 0 | 1 | 0 | Будет принят байт данных и передано неподтверждение (NACK) |
Нет действий | X | 0 | 1 | 1 | Будет принят байт данных и передано подтверждение (АСК) |
(продолжение)
| | Действия программы | |
| Состояние шины и модуля TWI | Чтение/запись в регистр TWDR | Запись в регистр TWCR | Следующее действие, выполняемое модулем TWI |
1 | U | STO | TWINT | TWEA |
| Потеря приоритета в режиме ведущего во время передачи SLA+R/W; был принят SLA+W с собственным адресом и послано подтверждение (АСК) | Нет действий | X | 0 | 1 | 0 | Будет принят байт данных и передано неподтверждение (NACK) |
$68 | Нет действий | X | 0 | 1 | 1 | Будет принят байтданных и передано подтверждение (АСК) |
$70 | Был принят общий вызови послано | Нет действий | X | 0 | 1 | 0 | Будет принят байт данных и передано неподтверждение (NACK) |
подтверждение (АСК) | Нет действий | X | 0 | 1 | 1 | Будет принят байт данных и передано подтверждение (АСК) |
$78 | Потеря приоритета в режиме ведущего во время передачи SLA+R/W; был принят общий вызов и послано подтверждение (АСК) | Нет действий | X | 0 | 1 | 0 | Будет принят байт данных и передано не подтверждение (NACK) |
Нет действий | X | 0 | 1 | 1 | Будет принят байт данных и передано подтверждение (АСК) |
$80 | Устройство уже адресовано: был принят байт | Считать данные | X | 0 | 1 | 0 | Будет принят байт данных и передано неподтверждение (NACK) |
данных и послано подтверждение (АСК) | Считать данные | X | 0 | 1 | 1 | Будет принят байт данных и передано подтверждение (АСК) |
| Устройство уже адресовано: был принят байт данных и послано неподтверждение (NACK) | Считать данные | 0 | 0 | 1 | 0 | Переключение в режим неадресованного ведомого; распознавание любых адресов отключено |
$88 | Считать данные | 0 | 0 | 1 | 1 | Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE =1 |
(продолжение)
Код статуса | Состояние шины и модуля TWI | Действия программы | Следующее действие, выполняемое модулем TWI |
Чтение/запись в регистр TWDR | Запись в регистр TWCR |
й | STO | TWINT | 1 |
$88 | Устройство уже адресовано: был принят байт данных и послано неподтверждение (NACK) | Считать данные | 1 | 0 | 1 | 0 | Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ |
Считать данные | 1 | 0 | 1 | 1 | Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1; после освобождения шины будет сформировано состояние СТАРТ |
$90 | Устройство уже адресовано (общий вызов): был принят байт данных и послано подтверждение (АСК) | Считать данные | X | 0 | 1 | 0 | Будет принят байт данных и передано не подтверждение (NACK) |
Считать данные | X | 0 | 1 | 1 | Будет принят байт данных и передано подтверждение (АСК) |
$98 | Устройство уже адресовано (общий вызов): был принят байт данных и послано неподтверждение (NACK) | Считать данные | 0 | 0 | 1 | 0 | Переключение в режим неадресованного ведомого; распознавание любых вызовов отключено |
Считать данные | 0 | 0 | 1 | 1 | Переключение в режим неадресованного ведомого; разрешено распознавание SLA с собственным адресом; разрешено распознавание общих вызовов, если TWGCE = 1 |
Считать данные | 1 | 0 | 1 | 0 | Переключение в режим неадресованного ведомого; распознавание любых вызовов запрещено; после освобождения шины будет сформировано состояние СТАРТ |
0 ...
145 146 147 148 149 150 151 ...
195