Работа подчиненного модуля TWI 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа подчиненного модуля TWI



Подчиненный модуль TWI предназначен для побайтной передачи данных и поддерживает возможность генерации прерываний после передачи/приема каждого байта. Предусмотрены отдельное прерывание по данным и отдельное прерывание по адресу/условию STOP. Флаги прерывания могут использоваться для опроса состояния модуля. Предусмотрены отдельные флаги статуса для сигнализации приема бита ACK/NACK, задержки синхронизации, коллизии, ошибки шины и направления 'чтение/запись'.

Если флаг прерывания установлен, линия SCL удерживается в низком состоянии. Благодаря этому, подчиненное устройство получает время на реагирование или обработку данных, что в большинстве случаев требует взаимодействия с программой. Работу подчиненного модуля TWI демонстрирует рисунок 19.13. Ромбовидным значком с надписью SW отмечены места, где требуется взаимодействие с программой.


Рисунок 19.13. Работа подчиненного модуля TWI

Количество генерируемых прерываний поддерживается на минимуме за счет автоматической обработки большинства условий. При необходимости автоматического запуска операций и снижения сложности программы может быть разрешена команда QUICK.

Облегчить реализацию подчиненного устройства, которое должно реагировать на любой принятый адрес, поможет режим PROMISCUOUS.

Прием пакета адреса

После надлежащей конфигурации подчиненного модуля TWI он переходит к ожиданию появления на шине условия START. Если это происходит, начинается последовательный прием байта адреса, затем он поступает в логику сравнения адреса и, если она обнаруживает совпадение, отправляется бит ACK. Если совпадение адреса не обнаружено, прием адреса не подтверждается, а подчиненное устройство возвращается к ожиданию нового условия START.

Флаг прерывания по адресу/условию STOP устанавливается, когда вслед за условием START был обнаружен действительный пакет адреса. Этот флаг прерывания также устанавливается при обнаружении адреса общего вызова.

Условие START, которое передано сразу за условием STOP, является недопустимым и, в таком случае, устанавливается флаг ошибки шины.

Состояние флага направления R/W отражает состояние принятого в пакете адреса бита направления передачи. Для определения типа транзакции предусмотрена возможность программного опроса этого флага.

В зависимости от состояния бита направления (R/W) и состояния шины дальнейшая работа шины после приема пакета адреса может выполняться по 4 сценариям. Все эти сценарии необходимо реализовать программно.

Сценарий 1: принят пакета адреса с равным единице битом направления

Если флаг направления R/W равен единице, это указывает на транзакцию типа "чтение ведущим устройством". Линия SCL удерживается в низком состоянии для задержки синхронизации шины. Если подчиненное устройство отправило бит ACK, его схема установит флаг прерывания по данным, сигнализируя о необходимости передачи данных. Если же подчиненное устройство отправит бит NACK, оно перейдет к ожиданию нового условия START и совпадения адреса.

Сценарий 2: принят пакет адреса с равным нулю битом направления

Если флаг направления R/W равен нулю, это указывает на транзакцию типа "запись ведущим устройством". Линия SCL удерживается в низком состоянии, задерживая синхронизацию шины. Если подчиненное устройство отправило бит ACK, оно переходит к ожиданию приема данных. После этого, возможен прием данных, а также условий REPEATED START или STOP. Если же подчиненное устройство отправит NACK, оно перейдет к ожиданию нового условия START и совпадения адреса.

Сценарий 3: коллизия

Если подчиненное устройство не может отправить высокий уровень или бит NACK, устанавливается флаг коллизии и выход данных и подтверждения отключается от блока логики подчиненного устройства. Удержание линии синхронизации отменяется. В дальнейшем возможен прием условия START или REPEATED START.



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 236; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.196.248.93 (0.004 с.)