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

 
 
> TWI в sam7s
Goofy
сообщение Jan 29 2008, 17:11
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 17-09-07
Из: Красноярск
Пользователь №: 30 600



Впервые для себя запускаю TWI на sam7s.

Использована атмеловская lib_twi

Запись
Код
int AT91F_TWI_WriteSingle(const AT91PS_TWI pTwi,
                        int SlaveAddr,
                        char *data)
{
    unsigned int end = 0, status, err=0;

    /* Enable Master Mode */
  //  AT91C_BASE_TWI->TWI_CR = AT91C_TWI_MSEN;

    /* Set the TWI Master Mode Register */
    AT91C_BASE_TWI->TWI_MMR =  (SlaveAddr<<16 ) & ~AT91C_TWI_MREAD;

    /* Write the data to send into THR. Start conditionn DADDR and R/W bit
       are sent automatically */
    AT91C_BASE_TWI->TWI_THR = *data;
    
    AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START;

    /* NACK errata handling */
    /* Do not poll the TWI_SR */
    /* Wait 3 x 9 TWCK pulse (max) 2 if IADRR not used, before reading TWI_SR */
    /* From 400Khz down to 1Khz, the time to wait will be in µs range.*/
    /* In this example the TWI period is 1/400KHz */
   AT91F_TWI_WaitMicroSecond (40);

    while (!end)
    {
      status = AT91C_BASE_TWI->TWI_SR;
      if ((status & AT91C_TWI_NACK) == AT91C_TWI_NACK)
      {
        err++;
        end=1;
      }
    /*  Wait for the Transmit ready is set */
      if ((status & AT91C_TWI_TXRDY) == AT91C_TWI_TXRDY)
        end=1;
    }
    AT91C_BASE_TWI->TWI_CR = AT91C_TWI_STOP;
    /* Wait for the Transmit complete is set */
    status = AT91C_BASE_TWI->TWI_SR;
    while (!(status & AT91C_TWI_TXCOMP))
      status = AT91C_BASE_TWI->TWI_SR;

    return err;
}


Инициализация (вызывается для 100кГц)
Код
void AT91F_TWI_Open(int TwiClock)
{
    /* Configure TWI PIOs */
    AT91F_TWI_CfgPIO ();

    /* Configure PMC by enabling TWI clock */
    AT91F_TWI_CfgPMC ();

    /* Reset the TWI */
    AT91C_BASE_TWI->TWI_CR = AT91C_TWI_SWRST;

    
    /* Configure TWI in master mode */
    AT91F_TWI_Configure (AT91C_BASE_TWI);


    /* Set TWI Clock Waveform Generator Register */
  //AT91C_BASE_TWI->TWI_CWGR=0x047575;
    AT91F_SetTwiClock(TwiClock);
}


Расчёт делителей
Код
void AT91F_SetTwiClock(int TwiClock)
{
  unsigned int cldiv,ckdiv=1;

  /* CLDIV = ((Tlow x 2^CKDIV) -3) x Tmck */
  /* CHDIV = ((THigh x 2^CKDIV) -3) x Tmck */
  /* Only CLDIV is computed since CLDIV = CHDIV (50% duty cycle) */
          cldiv = ( (MCK/(2*TwiClock))-3 ) / pow(2,ckdiv);
  while (  cldiv> 255 )
  {
   ckdiv++;
   cldiv = ( (MCK/(2*TwiClock))-3 ) / pow(2,ckdiv);

  }
  AT91C_BASE_TWI->TWI_CWGR =(ckdiv<<16)|((unsigned int)cldiv << 8)|(unsigned int)cldiv;
}



Проблема в том, что процедура передачи просто виснит, очевидно не получая из статус регистра TXRDY. TWI инициализирован приведённой выше процедурой.
Я не ошибаюсь, считая, что "железные" проблемы никак не влияют на работу модуля внутри?
Пока не идёт речи о корректности передачи, лишь о факте того, что статус регистр не ведёт себя должным образом.
Есть ли вероятность что модуль битый напрочь?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Goofy   TWI в sam7s   Jan 29 2008, 17:11
- - Хомяк   Запускал TWI на AT91SAM7A3 проблем не было. Но у м...   Jan 30 2008, 04:06
|- - Goofy   Цитата(Хомяк @ Jan 30 2008, 11:06) Запуск...   Jan 30 2008, 05:27
|- - gladov   Сразу бросается в глаза, что Вы делаете при переда...   Jan 30 2008, 10:49
|- - Goofy   Цитата(gladov @ Jan 30 2008, 17:49) Сразу...   Jan 30 2008, 11:20
||- - gladov   Цитата(Goofy @ Jan 30 2008, 14:20) Принуд...   Jan 30 2008, 12:44
||- - Goofy   Цитата(gladov @ Jan 30 2008, 19:44) А 100...   Jan 30 2008, 12:52
|- - cebotor   Цитата(gladov @ Jan 30 2008, 13:49) Влияе...   Feb 7 2008, 11:58
- - Хомяк   Я на TWI вешал 24LC256 подтягивал 2к Привожу свой...   Jan 30 2008, 13:16
|- - Goofy   Проблема решилась. При отсутствии устройства на ши...   Feb 1 2008, 05:03
|- - Ruslan1   Цитата(Goofy @ Feb 1 2008, 07:03) Проблем...   Feb 4 2008, 18:30
|- - Terrabyte   всё будет хорошо господа! читайте документ: h...   Feb 7 2008, 11:09
|- - singlskv   Цитата(Terrabyte @ Feb 7 2008, 15:09) всё...   Apr 6 2008, 21:27
- - pan_oleg   вот у меня такая ситуация, на STM32 не может сгене...   Apr 4 2008, 11:40
- - aaarrr   ИМХО, TWI на SAM7 все же неработоспособен. У меня ...   Apr 7 2008, 05:02
|- - Goofy   Цитата(aaarrr @ Apr 7 2008, 13:02) ИМХО, ...   Apr 24 2008, 12:23
||- - aaarrr   Цитата(Goofy @ Apr 24 2008, 16:23) А могл...   Apr 24 2008, 12:35
||- - Goofy   Цитата(aaarrr @ Apr 24 2008, 20:35) Что т...   Apr 24 2008, 12:43
||- - aaarrr   Цитата(Goofy @ Apr 24 2008, 16:43) До как...   Apr 24 2008, 12:49
|- - defunct   Цитата(aaarrr @ Apr 7 2008, 08:02) ИМХО, ...   Jun 16 2008, 22:41
|- - sonycman   Цитата(aaarrr @ Apr 7 2008, 09:02) ИМХО, ...   Jun 19 2008, 12:11
|- - aaarrr   Цитата(sonycman @ Jun 19 2008, 16:11) Да ...   Jun 19 2008, 12:28
- - JeDay   Работал с TWI в SAM7SE. Проблемы которые были в SA...   Apr 8 2008, 10:06
- - aaarrr   Да, исправляют потихоньку. Еще выпущен SAM9261S - ...   Apr 8 2008, 10:31
- - aaarrr   Плохо давили, значит. Не верю С 24-ми и у меня р...   Jun 16 2008, 23:01
|- - singlskv   Цитата(aaarrr @ Jun 17 2008, 02:01) Плохо...   Jan 12 2010, 23:10
|- - aaarrr   Не вижу смысла программно реанимировать откровенно...   Jan 12 2010, 23:50
||- - singlskv   Цитата(aaarrr @ Jan 13 2010, 02:50) Не ви...   Jan 13 2010, 10:08
||- - Terrabyte   Цитата(singlskv @ Jan 13 2010, 13:08) Вся...   Jan 6 2014, 11:07
|- - EugenB2   Цитата(singlskv @ Jan 13 2010, 01:10) А в...   Jan 16 2010, 08:10
- - defunct   Да вроде нормально давил ;> Попробовал фокус с ...   Jun 17 2008, 01:54
- - sonycman   Хм, что-же, приму к сведению, когда буду пробовать...   Jun 19 2008, 14:34
|- - ЕшТ   И снова TWI в AT91SAM7S256. Это нормально, что ста...   Jul 4 2008, 00:51
|- - ЕшТ   товарищи, у кого нибудь вообще тви аппаратный рабо...   Sep 3 2008, 23:09
|- - DmitryM   Цитата(ЕшТ @ Sep 4 2008, 03:09) товарищи,...   Sep 4 2008, 06:06
- - aaarrr   Выше посмотреть не пробовали?   Sep 4 2008, 05:51


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:45
Рейтинг@Mail.ru


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