Повесил для тестов на TWI такую флешку AT24C08A. Попробовал записать и столкнулся с несколькими вопросами:
1) Судя по даташиту используется 2х байтный внутренний адрес (8кб флешка), при этом шинный адрес TWI_MMR | DADR=1010 000(первые стандарт + 000 по ножкам)
2) Инициализация
Код
void InitTWI(void) {
AT91PS_TWI t_pTWI = AT91C_BASE_TWI;
t_pTWI-> TWI_CWGR = 7<<16|2<<8|2<<0; //задание делителей частоты
t_pTWI-> TWI_MMR = 0x50<<16|2<<8; // адрес ведомого, кол-во байт адреса флешки
t_pTWI-> TWI_IER = BIT8|BIT2|BIT1; // прер-я RXRDY, TXRDY, NACK
}
тактирование и прерывание включены в других частях, при попытке включить и послать один байт из тестового массива
Код
void TWI_ON (void)
{
t_pTWI->TWI_CR &= ~BIT3;
t_pTWI->TWI_CR |= BIT2;// разрешение обмена ведущему
t_pTWI->TWI_MMR &= ~BIT12; // выбор действия = запись
t_pTWI->TWI_IADR = last_addr_ext_flash_wr; // с какого адреса писать 0х0000 начальный
t_pTWI->TWI_THR = (ch0[twi_count_wr]); // запись в буфер символа 0х01 первый
last_addr_ext_flash_wr++;
twi_count_wr++;
}
В if ((t_pTWI->TWI_SR&AT91C_TWI_TXRDY)>>2) не дожидаюсь установление бита TXRDY о пустом буфере. В чем грабли?