И вот тут как угадать, когда именно перенастраивать TWI?
Делал по всякому.
Например так
Код
TWI0->TWI_THR = 0x87; -- передается два байта, признак стоп не установлен.
while(!TWI_ByteSent());
TWI0->TWI_THR = bit7;
while(!TWI_ByteSent()); -- тут еще не закончился передаваться байт
TWI0->TWI_MMR = (0 << 8) | TWI_MMR_MREAD | (0x18 << 16); --- а я уже перестариваю на чтение у устанавливаю СТАРТ.
TWI0->TWI_CR=1;
do {
while (!TWI_ByteReceived());
a=TWI_ReadByte();
} while ((a&1)!=0);
while(!TWI_ByteSent());
TWI0->TWI_THR = bit7;
while(!TWI_ByteSent()); -- тут еще не закончился передаваться байт
TWI0->TWI_MMR = (0 << 8) | TWI_MMR_MREAD | (0x18 << 16); --- а я уже перестариваю на чтение у устанавливаю СТАРТ.
TWI0->TWI_CR=1;
do {
while (!TWI_ByteReceived());
a=TWI_ReadByte();
} while ((a&1)!=0);
Какие-то команды так выполняются, например Сброс 1-wire. Четко видно. И возвращается нужный статус.
А вот команда чтения байта - фигня какая-то.
СУдя по всему всегда читается байт статуса. Вне завимости от команды....
Ктоб направил на путь. А то писать руками программный I2c при наличии аппаратного как-то не очень.
Короче разобрался.
ПАузы между командами должны быть. И не смотреть на описание этой микросхемы. Его составляли враги.