реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Что за хрень с TWI в SAM7X?
InsolentS
сообщение Dec 24 2007, 16:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



второй день мучаю - ни в какую. Регистр TWI_SR всегда содержит значение 0x00000008 что бы не происходило, хотя в даташите 3ий бит вообще определён как резервный!! такое чувство, что-то перепутано с адресами регистров и битов в этих регистрах. Компилятор RV, проц SAM7X256, надо записать 2 байта в потенциометр AD5241, вот код:
Код
  AT91C_BASE_PIOA->PIO_PDR=(1<<11)|(1<<10);  
  AT91C_BASE_PIOA->PIO_MDER=(1<<11)|(1<<10);
  AT91C_BASE_PIOA->PIO_PPUDR=(1<<11)|(1<<10);
  AT91C_BASE_PIOA->PIO_ASR=(1<<11)|(1<<10);
    
  AT91F_TWI_CfgPMC();

  AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_SWRST); //сброс, так и не понял для чего он нужен

  AT91C_BASE_TWI->TWI_CWGR=(1<<16)|(200<<8)|(200<<0); //МСК=47 МГц
  AT91C_BASE_TWI->TWI_CR=AT91C_TWI_MSEN;
  AT91C_BASE_TWI->TWI_MMR=(44<<16);       // у потенциометра 7ми битный адрес 44  

  AT91C_BASE_TWI->TWI_THR=0x24; //Первый регистр пошёл
  AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_START);
  while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXRDY)); //А вот с TWI_SR какая-то хрень
  AT91C_BASE_TWI->TWI_THR=0xFF; //Второй регистр пошёл
  while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXRDY));  

  AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_STOP);    
  while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXCOMP));


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 24 2007, 17:19
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(InsolentS @ Dec 24 2007, 19:37) *
второй день мучаю - ни в какую. Регистр TWI_SR всегда содержит значение 0x00000008 что бы не происходило, хотя в даташите 3ий бит вообще определён как резервный!!

Если только 2 день, то Вы еще только в самом начале пути... biggrin.gif

Посмотрите здесь: SAM7 + Mega8
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Dec 24 2007, 17:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



В общем, выяснилось следующее: скачал с атмеля новые заголовочные файлы, и вот что там увидел:
Код
// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register --------
#define AT91C_TWI_TXCOMP_SLAVE (0x1 <<  0) // (TWI) Transmission Completed
#define AT91C_TWI_TXCOMP_MASTER (0x1 <<  0) // (TWI) Transmission Completed
#define AT91C_TWI_RXRDY       (0x1 <<  1) // (TWI) Receive holding register ReaDY
#define AT91C_TWI_TXRDY_MASTER (0x1 <<  2) // (TWI) Transmit holding register ReaDY
#define AT91C_TWI_TXRDY_SLAVE (0x1 <<  2) // (TWI) Transmit holding register ReaDY
#define AT91C_TWI_SVREAD      (0x1 <<  3) // (TWI) Slave READ (used only in Slave mode)
#define AT91C_TWI_SVACC       (0x1 <<  4) // (TWI) Slave ACCess (used only in Slave mode)
#define AT91C_TWI_GACC        (0x1 <<  5) // (TWI) General Call ACcess (used only in Slave mode)
#define AT91C_TWI_OVRE        (0x1 <<  6) // (TWI) Overrun Error (used only in Master and Multi-master mode)
#define AT91C_TWI_NACK_SLAVE  (0x1 <<  8) // (TWI) Not Acknowledged
#define AT91C_TWI_NACK_MASTER (0x1 <<  8) // (TWI) Not Acknowledged
#define AT91C_TWI_ARBLST_MULTI_MASTER (0x1 <<  9) // (TWI) Arbitration Lost (used only in Multimaster mode)
#define AT91C_TWI_SCLWS       (0x1 << 10) // (TWI) Clock Wait State (used only in Slave mode)
#define AT91C_TWI_EOSACC      (0x1 << 11) // (TWI) End Of Slave ACCess (used only in Slave mode)
#define AT91C_TWI_ENDRX       (0x1 << 12) // (TWI) End of Receiver Transfer
#define AT91C_TWI_ENDTX       (0x1 << 13) // (TWI) End of Receiver Transfer
#define AT91C_TWI_RXBUFF      (0x1 << 14) // (TWI) RXBUFF Interrupt
#define AT91C_TWI_TXBUFE      (0x1 << 15) // (TWI) TXBUFE Interrupt

теперь сравним с описанием из даташита:

ЖЕСТЬ!!!
и TWI_SR не единственный, во многих остальных регистрах та же ситуация + некоторые регистры в даташите вообще не обьявлены. Про slave-mode в даташите тоже не слова.
Я не знаю как там в атмеле координируются проекты, но с меня пожалуй уже хватит mad.gif .
Почитав остальные посты на эту тему пришёл к выводу что гораздо легче будет сделать софтово запись моих 2х байтов


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 24 2007, 17:57
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(InsolentS @ Dec 24 2007, 20:36) *
В общем, выяснилось следующее: скачал с атмеля новые заголовочные файлы, и вот что там увидел:
ЖЕСТЬ!!!
и TWI_SR не единственный, во многих остальных регистрах та же ситуация + некоторые регистры в даташите вообще не обьявлены. Про slave-mode в даташите тоже не слова.
Все правильно 07.gif smile.gif , у Вас видимо заголовочные на все семейство SAM,
в некоторых из них действительно есть слейв, а в Вашем нету, от него только пару флагов
осталось, там атмель явно накосячил вырывая слейв из ip блока.
А слейв они вырывали видимо по причине его полной неработоспособности в реальных условиях
шины i2c.
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Dec 24 2007, 18:38
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(singlskv @ Dec 24 2007, 23:57) *
Все правильно 07.gif smile.gif , у Вас видимо заголовочные на все семейство SAM,

Файл называется AT91SAM7X256.h и скачан отсюда: http://www.atmel.com/dyn/resources/prod_do...256-IAR430A.zip .
Куда уж конкретнее 07.gif
Ещё, оказалось, у TWI есть DMA, о чём в даташите тоже скромно умолчали


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 24 2007, 18:58
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(InsolentS @ Dec 24 2007, 21:38) *
Файл называется AT91SAM7X256.h и скачан отсюда: http://www.atmel.com/dyn/resources/prod_do...256-IAR430A.zip .
Куда уж конкретнее 07.gif
Я тоже такое видел, например .h для CrossWorks, тока это ничего
не объясняет/доказывает для конкретного чипа, .h файлы обычно пекут из .h файлов
предыдущего чипа... ну и там уже зависит от добросовестности пекаря...
Цитата
Ещё, оказалось, у TWI есть DMA, о чём в даташите тоже скромно умолчали
Опять же, видимо планировали, но чего-то не срослось...
Go to the top of the page
 
+Quote Post
xelax
сообщение Dec 25 2007, 06:47
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Это фсё от жадности. Не хотят платить филипсу, вот и выдумывают twi велосипед.
А DMA и slave режим видимо мёртвые совсем, вот их и не включили в даташит.
В этом контроллере много чего мёртвого, достаточно полистать ерату в последней ревизии документа.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016