Поиск по сайту: |
|
По базе: |
|
Главная страница > Обзоры по типам > Микроконтроллеры > AVR |
|
||||||||||||
19.4. Логика контроля состояния шины TWIПосле разрешения работы TWI в качестве ведущего устройства, логика контроля состояния шины непрерывно следит за активностью на линиях шины. Она остается в работе во всех экономичных режимах МК, в т.ч. режим POWER DOWN. Логика контроля состояния шины состоит из схемы обнаружения условий START и STOP, схемы обнаружения коллизий, таймера для измерения интервалов времени бездействия шины и счетчика бит. Все эти узлы используются для определения состояния шины. Программа может оценить состояние шины путем опроса бит статуса шины в регистре статуса ведущего устройства. Как показано на рисунке 19.11, шина может находиться в следующих состояниях: UNKNOWN (неопределенное). IDLE (незанятое), BUSY (занятое внешним устройством) и OWNER (занятое владельцем). На рисунке также представлены соответствующие состояниям шины значения бит статуса шины.
После системного сброса, состояние шины является неопределенным (UNKNOWN). Из этого состояния автомат состояний может перейти в состояние IDLE с одновременной соответствующей записью в биты состояния шины. Данное состояние также вводится, если иного состояния не было введено программой и обнаружено условие STOP. Дополнительно, переход в состояние IDLE происходит по истечении выдержки времени таймера, контролирующего интервалы бездействия шины (только при условии разрешения его работы). После перехода в любое известное состояние обратный переход в состояние UNKNOWN из любого другого состояния не предусмотрен. Состояние UNKNOWN вводится только системным сбросом или отключением ведущего модуля TWI. Нахождение шины в состоянии IDLE указывает на её готовность к новой транзакции. При обнаружении внешне сгенерированного условия START, шина переходит в занятое состояние (BUSY) вплоть до появления на шине следующего условия STOP. Условие STOP вновь переведет шину в состояние IDLE. Переход в это состояние также произойдет по истечении выдержки времени таймера контроля интервалов бездействия шины, но только при условии разрешения его работы. Если же из состояния IDLE условие START вводит модуль TWI, то осуществляется переход в состояние OWNER. В случае нормального выполнения транзакции, т.е. без обнаружения коллизий, ведущее устройство генерирует условие STOP и шина возвращается в состояние IDLE. В случае же обнаружения коллизии и проигрыша арбитража, шина переходит в состояние BUSY вплоть до обнаружения условия STOP. Условие REPEATED START способно изменить состояние шины только при проигрыше арбитража во время генерации этого условия. 19.5. Работа ведущего модуля TWI Ведущий модуль TWI предназначен для побайтной передачи данных и может генерировать прерывание после передачи/приема каждого байта. Предусмотрены отдельные прерывания для транзакций записи ведущим устройством и чтения ведущим устройством. При необходимости управления модулем путем опроса его состояния, могут использоваться флаги прерываний. Для сигнализации о приеме бита ACK/NACK, обнаружении ошибки, проигрыше арбитража, задержки синхронизации и состоянии шины предусмотрены отдельные биты статуса. После установки флага прерывания, линия SCL удерживается в низком состоянии. Данная задержка необходима ведущему устройству для реагирования на прерывание или обработку данных, что в большинстве случаев требует участия программы. Работу ведущего модуля TWI иллюстрирует рисунок 19.12. Ромбовидный значок с надписью SW указывает на участки, где требуется взаимодействие с программой. Освобождение линии SCL произойдет только после сброса флагов прерываний.
За счет автоматического выполнения многих операций количество генерируемых прерываний поддерживается на минимальном уровне. Для автоматического запуска операций и снижения сложности программы могут быть разрешены команда QUICK и режим SMART. 19.5.1. Передача пакета адреса После ввода условия START, ведущее устройство начнет транзакцию шины сразу после записи в регистр адреса ведущего устройства адреса подчиненного устройства и бита направления. Если шина находится в состоянии BUSY, то ведущий модуль TWI будет ожидать перехода шины в состояние IDLE. При обнаружении этого состояния ведущее устройство генерирует условие START, а затем передает байт адреса. В зависимости от результата арбитража и состояния бита направления R/W дальнейшая передача (по завершении передачи пакета адреса) может осуществляться по 4 сценариям. Все эти сценарии должны быть реализованы программно. 19.5.1.1. Сценарий M1: арбитраж проигран или ошибка во время передачи пакета адреса Если во время передачи пакета адреса ведущее устройство проигрывает арбитраж, происходит установка двух флагов: флага прерывания по записи ведущим устройством и флага проигрыша арбитража. В этом случае, модуль отключается от линии SDA и освобождает линию SCL. Ведущее устройств теряет дальнейшую возможность выполнять какие-либо действия на шине, пока шина не вернется в состояние IDLE. Ситуация с обнаружением ошибки на шине обрабатывается таким же образом, как и проигрыш арбитража, но затем исключением, что в дополнение к установке флагов прерывания по записи и проигрыша арбитража происходит установка флага ошибки. 19.5.1.2. Сценарий M2: Передача пакета адреса завершена, но он не подтвержден подчиненным устройством Если на переданный пакет адреса не отреагировало ни одно подчиненное устройство, устанавливаются флаг прерывания по записи ведущим устройством и флаг принятого подтверждения. В этой точке, во избежание дальнейшей активности на шине, линия синхронизации удерживается в активном состоянии. 19.5.1.3. Сценарий M3: Завершена передача пакета адреса с равным нулю битом направления Если ведущее устройство получает от подчиненного устройства бит ACK, устанавливается флаг прерывания по записи ведущим устройством и сбрасывается флаг принятого подтверждения. В этой точке, во избежание дальнейшей активности на шине, линия синхронизации удерживается в активном состоянии. 19.5.1.4. Сценарий M4: Завершена передача пакета адреса с равным единице битом направления Если ведущее устройство получает от подчиненного устройства бит ACK, ведущее устройство выполняет прием от подчиненного устройства следующего байта данных. После приема первого байта данных устанавливается флаг прерывания по чтению ведущим устройством и сбрасывается флаг принятого подтверждения ведущим устройством. В этой точке, во избежание дальнейшей активности на шине, линия синхронизации удерживается в активном состоянии. 19.5.2. Передача пакетов данных Передача данных ведущим устройством возможна по сценарию М3 после записи в регистр данных ведущего устройства. Если передача данных выполняется успешно, подчиненное устройство передает бит ACK. После этого, устанавливается флаг прерывания по записи ведущим устройством, сбрасывается флаг принятого подтверждения ведущим устройством и ведущее устройство может подготовить новые данные к отправке. Во время передачи данных ведущее устройство непрерывно контролирует шину на предмет обнаружения коллизий. Флаг принятого подтверждения необходимо проверять после передачи каждого пакета данных, перед отправкой очередного пакета данных. Ведущему устройству не позволяется продолжать передачу данных, если подчиненное устройство передает сигнал NACK. Если ведущее устройство обнаружит коллизию и проиграет арбитраж во время передачи данных, устанавливается флаг проигрыша арбитража. 19.5.3. Прием пакетов данных Прием данных ведущим устройством возможен по сценарию М4. После приема ведущим устройством первого байта данных, устанавливается флаг прерывания по чтению ведущим устройством и ведущее устройство может приступить к приему новых данных. На каждый принятый байт ведущее устройство должно ответить битом ACK или NACK. Передача бита NACK может оказаться безуспешной, если ведущее устройство проиграет арбитраж во время передачи этого бита. Если в результате обнаружения коллизии, ведущее устройство теряет арбитраж, устанавливается флаг проигрыша арбитража.
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|