второй день мучаю - ни в какую. Регистр TWI_SR всегда содержит значение 0x00000008 что бы не происходило, хотя в даташите 3ий бит вообще определён как резервный!! такое чувство, что-то перепутано с адресами регистров и битов в этих регистрах. Компилятор RV, проц SAM7X256, надо записать 2 байта в потенциометр AD5241, вот код:
Код
AT91C_BASE_PIOA->PIO_PDR=(1<<11)|(1<<10);
AT91C_BASE_PIOA->PIO_MDER=(1<<11)|(1<<10);
AT91C_BASE_PIOA->PIO_PPUDR=(1<<11)|(1<<10);
AT91C_BASE_PIOA->PIO_ASR=(1<<11)|(1<<10);
AT91F_TWI_CfgPMC();
AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_SWRST); //сброс, так и не понял для чего он нужен
AT91C_BASE_TWI->TWI_CWGR=(1<<16)|(200<<8)|(200<<0); //МСК=47 МГц
AT91C_BASE_TWI->TWI_CR=AT91C_TWI_MSEN;
AT91C_BASE_TWI->TWI_MMR=(44<<16); // у потенциометра 7ми битный адрес 44
AT91C_BASE_TWI->TWI_THR=0x24; //Первый регистр пошёл
AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_START);
while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXRDY)); //А вот с TWI_SR какая-то хрень
AT91C_BASE_TWI->TWI_THR=0xFF; //Второй регистр пошёл
while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXRDY));
AT91C_BASE_TWI->TWI_CR=(AT91C_TWI_STOP);
while(!(AT91C_BASE_TWI->TWI_SR&AT91C_TWI_TXCOMP));