|
|
  |
NACK in TWI_SR, как отловиь NACK? |
|
|
|
Dec 25 2007, 09:16
|
Частый гость
 
Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042

|
Здравствуйте господа, прочитал несколько "хороших" отзывов о модуле 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. Как кто делал посоветуйте
|
|
|
|
|
Dec 25 2007, 14:06
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Terrabyte @ Dec 25 2007, 12:16)  значит что по `NACK` формируется STOP? Да. Посмотрите вот этот документик:
|
|
|
|
|
Dec 26 2007, 10:38
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Terrabyte @ Dec 26 2007, 12:23)  остался только один вопрос... по обслуживанию NACK при посылке bed address, понятно т.е. устанавливается TXRDY одновременно с NACK, и автоматом посылается STOP, а как тогда быть с no ask во время передачи блока данных? - произойдёт тоже самое что и при передпче адреса? т.е. STOP будет послан не зависимо от того был он разрешён в TWI_CR или нет, так? Да, после NACK стоп будет послан всегда. Цитата спасибо, документ очень помог, если это atmel -овский док., почему я его раньше ни где не видел, хорошо бы иметь такой док на каждый аппаратный узел. Они скрывают правду от народа Ловите ссылку: Описание модулей SAMСам несколько дней эту инфу искал, когда с TWI разбирался. P.S. Если кому будет не лень, перекиньте файлы в закрома...
|
|
|
|
|
Dec 29 2007, 11:23
|
Частый гость
 
Группа: Свой
Сообщений: 124
Регистрация: 2-01-07
Из: Russia
Пользователь №: 24 042

|
Ещё вопросик, можно ли сформировать restart, без предварительного stop? И интересно как ведёт себя TXCOMP: при посылке start он сбрасывается, до тех пор пока не будет выдан stop, а рестарт скорее всего, не влияет на TXCOMP , да? Как то странно, после настройки TWI, если все прерывания запрещены, биты TXRDY и TXCOMP взведены, а после окончания передачи все биты TWI_SR сброшены..
Сообщение отредактировал Terrabyte - Dec 29 2007, 12:11
|
|
|
|
|
Dec 29 2007, 13:30
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

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