Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NACK in TWI_SR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Terrabyte
Здравствуйте господа, прочитал несколько "хороших" отзывов о модуле twi в sam7, но так и не нашёл ответа на следующее:
Как отловить прерывание по NACK?

Но про бит TXRDY сказано что он устанавливается, если данные перенесены из TWI_THR в internal shifter or if a NACK error is detected !!! и TXRDY бит устанавливается одновременно с TXCOMP и NACK – это что?! , значит что по `NACK` формируется STOP?

В Errata сказано !!!!!!!, что если регистр TWI_SR читать перед установкой TXCOMP, то:
the NACK bit is not set ! Решение проблемы описано: user должен ожидать прерывания от TXCOMP, и не должен читать TWI_SR, пока “transmission is not completed”. Но тогда получается, что я не могу реагировать на TXRDY,
т.е. - как тогда ловить TXRDY, если нельзя читать TWI_SR до TXCOMP
( TXCOMP устанавливается когда : “..both holding and shifter registers are empty and STOP condition has been sent..”).

Единственный выход – попробовать проверять NACK по TXRDY , интересно, что в стартовом коде вообще не проверяется NACK бит, и программа работает не по прерываниям, да и в форуме я ни у кого не увидел проверку NACK. Как кто делал посоветуйте
singlskv
Цитата(Terrabyte @ Dec 25 2007, 12:16) *
значит что по `NACK` формируется STOP?
Да.

Посмотрите вот этот документик:
Terrabyte
спасибо, документ очень помог, если это atmel -овский док., почему я его раньше ни где не видел, хорошо бы иметь такой док на каждый аппаратный узел.
остался только один вопрос...
по обслуживанию NACK при посылке bed address, понятно т.е. устанавливается TXRDY одновременно с NACK, и автоматом посылается STOP,
а как тогда быть с no ask во время передачи блока данных? - произойдёт тоже самое что и при передпче адреса? т.е. STOP будет послан не зависимо от того был он разрешён в TWI_CR или нет, так?
singlskv
Цитата(Terrabyte @ Dec 26 2007, 12:23) *
остался только один вопрос...
по обслуживанию NACK при посылке bed address, понятно т.е. устанавливается TXRDY одновременно с NACK, и автоматом посылается STOP,
а как тогда быть с no ask во время передачи блока данных? - произойдёт тоже самое что и при передпче адреса? т.е. STOP будет послан не зависимо от того был он разрешён в TWI_CR или нет, так?
Да, после NACK стоп будет послан всегда.
Цитата
спасибо, документ очень помог, если это atmel -овский док., почему я его раньше ни где не видел, хорошо бы иметь такой док на каждый аппаратный узел.
Они скрывают правду от народа crying.gif

Ловите ссылку:
Описание модулей SAM

Сам несколько дней эту инфу искал, когда с TWI разбирался.

P.S. Если кому будет не лень, перекиньте файлы в закрома...
Terrabyte
большущее спасибо! удачи вам ! beer.gif
Terrabyte
а TXRDY и RXRDY не сбрасываются при чтении TWI_SR ?

если сбрасываются, тогда у меня наверное автоматом не сформируется STOP после принятия последнего быйта,
и тогда нужно будет либо самому формировать стопы, либо, чтоб не читать TWI_SR:
при приёме ждать ПРЕДпоследнего: читать его, разр. стоп, вырубать прерывание по RXRDY и ждать TXCOMP.
а при передаче так же ждать ПРЕДпоследнего: записывать последний, разреш. стоп, вырубать TXRDY и ждать TXCOMP.
singlskv
Цитата(Terrabyte @ Dec 26 2007, 18:26) *
при приёме ждать ПРЕДпоследнего: читать его, разр. стоп, вырубать прерывание по RXRDY и ждать TXCOMP.
а при передаче так же ждать ПРЕДпоследнего: записывать последний, разреш. стоп, вырубать TXRDY и ждать TXCOMP.
Именно так и нужно.
И еще, в каждый момент разрешайте только 1 прерывание.
Terrabyte
Ещё вопросик, можно ли сформировать restart, без предварительного stop?
И интересно как ведёт себя TXCOMP: при посылке start он сбрасывается, до тех пор пока не будет выдан stop, а рестарт скорее всего, не влияет на TXCOMP , да?
Как то странно, после настройки TWI, если все прерывания запрещены, биты TXRDY и TXCOMP взведены, а после окончания передачи все биты TWI_SR сброшены..
singlskv
Цитата(Terrabyte @ Dec 29 2007, 14:23) *
Ещё вопросик, можно ли сформировать restart, без предварительного stop?
И интересно как ведёт себя TXCOMP: при посылке start он сбрасывается, до тех пор пока не будет выдан stop, а рестарт скорее всего, не влияет на TXCOMP , да?
про рестарт точно не скажу, но думаю, учитывая все проблеммы с TWI,
рестарт не очень работоспособен...
Цитата
Как то странно, после настройки TWI, если все прерывания запрещены, биты TXRDY и TXCOMP взведены, а после окончания передачи все биты TWI_SR сброшены..

Все правильно, TXRDY и TXCOMP взводятся в момент настройки TWI,
поэтому прерывания должны быть в этот момент запрещены.
Более того, лучше всего разрешать прерывания TXRDY и RXRDY только после начала
передачи/приема.
Terrabyte
Вопрос с TWI был решен, извиняюсь за стиль.
С микросхемой часов PCF__ TWI работает, благодаря документации находящейся по ссылке "Описание модулей SAM".
В последних версиях at91 с I2C не должно быть проблем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.