Terrabyte 0 25 декабря, 2007 Опубликовано 25 декабря, 2007 · Жалоба Здравствуйте господа, прочитал несколько "хороших" отзывов о модуле 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 0 25 декабря, 2007 Опубликовано 25 декабря, 2007 · Жалоба значит что по `NACK` формируется STOP?Да. Посмотрите вот этот документик: TWI___Two_Wire_Interface.ppt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба спасибо, документ очень помог, если это atmel -овский док., почему я его раньше ни где не видел, хорошо бы иметь такой док на каждый аппаратный узел. остался только один вопрос... по обслуживанию NACK при посылке bed address, понятно т.е. устанавливается TXRDY одновременно с NACK, и автоматом посылается STOP, а как тогда быть с no ask во время передачи блока данных? - произойдёт тоже самое что и при передпче адреса? т.е. STOP будет послан не зависимо от того был он разрешён в TWI_CR или нет, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба остался только один вопрос... по обслуживанию NACK при посылке bed address, понятно т.е. устанавливается TXRDY одновременно с NACK, и автоматом посылается STOP, а как тогда быть с no ask во время передачи блока данных? - произойдёт тоже самое что и при передпче адреса? т.е. STOP будет послан не зависимо от того был он разрешён в TWI_CR или нет, так? Да, после NACK стоп будет послан всегда. спасибо, документ очень помог, если это atmel -овский док., почему я его раньше ни где не видел, хорошо бы иметь такой док на каждый аппаратный узел.Они скрывают правду от народа :crying: Ловите ссылку: Описание модулей SAM Сам несколько дней эту инфу искал, когда с TWI разбирался. P.S. Если кому будет не лень, перекиньте файлы в закрома... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба большущее спасибо! удачи вам ! :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба а TXRDY и RXRDY не сбрасываются при чтении TWI_SR ? если сбрасываются, тогда у меня наверное автоматом не сформируется STOP после принятия последнего быйта, и тогда нужно будет либо самому формировать стопы, либо, чтоб не читать TWI_SR: при приёме ждать ПРЕДпоследнего: читать его, разр. стоп, вырубать прерывание по RXRDY и ждать TXCOMP. а при передаче так же ждать ПРЕДпоследнего: записывать последний, разреш. стоп, вырубать TXRDY и ждать TXCOMP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 26 декабря, 2007 Опубликовано 26 декабря, 2007 · Жалоба при приёме ждать ПРЕДпоследнего: читать его, разр. стоп, вырубать прерывание по RXRDY и ждать TXCOMP. а при передаче так же ждать ПРЕДпоследнего: записывать последний, разреш. стоп, вырубать TXRDY и ждать TXCOMP. Именно так и нужно. И еще, в каждый момент разрешайте только 1 прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 29 декабря, 2007 Опубликовано 29 декабря, 2007 (изменено) · Жалоба Ещё вопросик, можно ли сформировать restart, без предварительного stop? И интересно как ведёт себя TXCOMP: при посылке start он сбрасывается, до тех пор пока не будет выдан stop, а рестарт скорее всего, не влияет на TXCOMP , да? Как то странно, после настройки TWI, если все прерывания запрещены, биты TXRDY и TXCOMP взведены, а после окончания передачи все биты TWI_SR сброшены.. Изменено 29 декабря, 2007 пользователем Terrabyte Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 декабря, 2007 Опубликовано 29 декабря, 2007 · Жалоба Ещё вопросик, можно ли сформировать restart, без предварительного stop? И интересно как ведёт себя TXCOMP: при посылке start он сбрасывается, до тех пор пока не будет выдан stop, а рестарт скорее всего, не влияет на TXCOMP , да? про рестарт точно не скажу, но думаю, учитывая все проблеммы с TWI, рестарт не очень работоспособен... Как то странно, после настройки TWI, если все прерывания запрещены, биты TXRDY и TXCOMP взведены, а после окончания передачи все биты TWI_SR сброшены.. Все правильно, TXRDY и TXCOMP взводятся в момент настройки TWI, поэтому прерывания должны быть в этот момент запрещены. Более того, лучше всего разрешать прерывания TXRDY и RXRDY только после начала передачи/приема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terrabyte 0 6 января, 2014 Опубликовано 6 января, 2014 · Жалоба Вопрос с TWI был решен, извиняюсь за стиль. С микросхемой часов PCF__ TWI работает, благодаря документации находящейся по ссылке "Описание модулей SAM". В последних версиях at91 с I2C не должно быть проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться