Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: twi на at91sam7s256
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
romez777
Приветствую,

пытаюсь завести TWI в режиме мастера под at91sam7s256. Судя по форуму, не я первый smile.gif Компилятор - arm-gcc. Взял appnote от Атмела с описанием TWI и кодом под IAR. Перенес на gcc, получилось следующее:

Код
#include "project.h"
#include "lib_twi.h"

...

#define TWI_BUS_CLOCK   100000   /* in Hz */
#define AT91C_MXL7001_I2C_ADDRESS (0xC0)

int main()
{
   char ConfigReg = 0xaa;
   /* TWI initialization @ TWI_BUS_CLOCK */
  AT91F_TWI_Open(TWI_BUS_CLOCK);

  while (1) {
     AT91F_TWI_WriteSingleIadr(AT91C_BASE_TWI,
                                             AT91C_MXL7001_I2C_ADDRESS,
                                             (char)0x0a,
                                             AT91C_TWI_IADRSZ_1_BYTE,
                                             &ConfigReg);
  }
}


Функции AT91F_TWI_* - взяты из lib_twi, идущей с reference кодом.
То есть посылаю в цикле 1 байт. На осциллографе вижу: start бит, первый бит адреса, потом нули (хотя посылаю 0xAA, "гребенку"), ACK и STOP бит.

Явно, что-то не так: независимо от посылаемых данных, картинка не меняется.

В чем проблема, где ошибка? Бракованный референс-код или проблемы в чипе?

Заранее премного благодарен!
sergik_vrn
Цитата(romez777 @ Dec 28 2007, 08:42) *
Приветствую,

пытаюсь завести TWI в режиме мастера под at91sam7s256. Судя по форуму, не я первый smile.gif Компилятор - arm-gcc. Взял appnote от Атмела с описанием TWI и кодом под IAR. Перенес на gcc, получилось следующее:

Код
#include "project.h"
#include "lib_twi.h"

...

#define TWI_BUS_CLOCK   100000   /* in Hz */
#define AT91C_MXL7001_I2C_ADDRESS (0xC0)

int main()
{
   char ConfigReg = 0xaa;
   /* TWI initialization @ TWI_BUS_CLOCK */
  AT91F_TWI_Open(TWI_BUS_CLOCK);

  while (1) {
     AT91F_TWI_WriteSingleIadr(AT91C_BASE_TWI,
                                             AT91C_MXL7001_I2C_ADDRESS,
                                             (char)0x0a,
                                             AT91C_TWI_IADRSZ_1_BYTE,
                                             &ConfigReg);
  }
}


Функции AT91F_TWI_* - взяты из lib_twi, идущей с reference кодом.
То есть посылаю в цикле 1 байт. На осциллографе вижу: start бит, первый бит адреса, потом нули (хотя посылаю 0xAA, "гребенку"), ACK и STOP бит.

Явно, что-то не так: независимо от посылаемых данных, картинка не меняется.

В чем проблема, где ошибка? Бракованный референс-код или проблемы в чипе?

Заранее премного благодарен!

аппаратно-то у Вас все правильно? линии должны быть подтянуты к "+"
romez777
Цитата(sergik_vrn @ Dec 28 2007, 17:28) *
аппаратно-то у Вас все правильно? линии должны быть подтянуты к "+"

Да, железо проверяли - все корректно.
sergik_vrn
Цитата(romez777 @ Dec 29 2007, 09:57) *
Да, железо проверяли - все корректно.

тогда, раз уж Вы посылаете данные в цикле, может стоит проверить конец передачи? или это уже реализовано внутри библиотечной функции? я просто с этим чипом и библиотекой не работал
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.