Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7S
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
SavageForest
пытаюсь воткнуть двухпроводный интерфейс в свой проект и ни в какую =(
описываю проблему:
при старте посылки DataPin сбрасыватся в 0 и CLK не приходит. проц висит...
вот пробные инициализация и посылка данных:
CODE

void TWI_ConfigureMaster(AT91S_TWI *pTwi, unsigned int twck, unsigned int mck)
{
unsigned int ckdiv = 0;
unsigned int cldiv;
unsigned char ok = 0;

SANITY_CHECK(pTwi);

// Reset the TWI
pTwi->TWI_CR = AT91C_TWI_SWRST;
pTwi->TWI_RHR;

pTwi->TWI_CR = AT91C_TWI_MSDIS;

pTwi->TWI_CR = AT91C_TWI_MSEN;

// Configure clock
while (!ok) {

cldiv = ((mck / (2 * twck)) - 3) / power(2, ckdiv);

if (cldiv <= 255) {

ok = 1;
}
else {

ckdiv++;
}
}

pTwi->TWI_CWGR = 0;
pTwi->TWI_CWGR = (ckdiv << 16) | (cldiv << 8) | cldiv;
}

void init_TWI(void)
{
PIO_Configure(TWIpins,1);
PMC_EnablePeripheral(AT91C_ID_TWI);
*AT91C_TWI_IDR = 0xFFFFF;
TWI_ConfigureMaster(AT91C_BASE_TWI, Clock, BOARD_MCK);
AIC_DisableIT(AT91C_ID_TWI);
}

void TWI_StartRead(
AT91S_TWI *pTwi,
unsigned char address,
unsigned int iaddress,
unsigned char isize)
{
SANITY_CHECK(pTwi);
SANITY_CHECK((address & 0x80) == 0);
SANITY_CHECK((iaddress & 0xFF000000) == 0);
SANITY_CHECK(isize < 4);

// Set slave address and number of internal address bytes
pTwi->TWI_MMR = 0;
pTwi->TWI_MMR = (isize << 8) | AT91C_TWI_MREAD | (address << 16);

// Set internal address bytes
pTwi->TWI_IADR = 0;
pTwi->TWI_IADR = iaddress;

// Send START condition
pTwi->TWI_CR = AT91C_TWI_START;
}

после init_TWI идет команда TWI_StartRead с соответствующими данными и стоп-посылка...
на старте все виснет и данные не поступают. CLK- вообще молчит как партизан..
частоты вроде-бы по даташитам правильные (400 кГц), пробовал и на 100, результат тот же.
подскажите пожалуйста что не так? куда смотреть и где копать?
ЗЫ: среда KEIL, RTX, AtmelLib'ы
aaarrr
Цитата(SavageForest @ Aug 23 2010, 19:02) *
подскажите пожалуйста что не так? куда смотреть и где копать?

Ох и много копий было сломано вокруг TWI в SAM7... Кратко изложу свое мнение:
Если не хотите плясать с бубном при подключении каждого нового слейва, перейдите на программную эмуляцию I2C.
Глюки и "особенности" железного широки и разнообразны, не стоит он потраченного на него времени.
SavageForest
Цитата(aaarrr @ Aug 23 2010, 19:07) *
...перейдите на программную эмуляцию I2C.....

я-бы рад отказаться от этого интерфейса, да вот память внешняя для хранения настроек уже впаяна, да и плату не переразведешь...
кстати, I2C вроде-бы только на SSC интерфейсе можно эмулировать, а у мну уже к TWI подцеплена память (AT24C128N для ясности...)...
aaarrr
I2C можно спокойно эмулировать через GPIO, но никак не через SSC. А с памятью он (TWI) как раз работает более-менее нормально.
SavageForest
проблема оказалась в железе: отсутствовал подтягивающий резюк на КЛОКе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.