Аппартаный TWI настроен без прерываний.
Код посылки байта:
int TWI_Write(unsigned char address,//FM24V10_ADDRESS
unsigned int iaddress, // Адрес по которому записать
unsigned int isize, // Размер внутреннего адреса ведомого устрйоства AT91C_TWI_IADRSZ_2_BYTE
unsigned char *pData, // Указатель на данные, которые нада записать
unsigned int num) // Количество байт для записи
{
unsigned int status, err=0, Counter=0;
// Set internal address bytes
AT91C_BASE_TWI->TWI_IADR = 0;
AT91C_BASE_TWI->TWI_IADR = iaddress;
// Set slave address and number of internal address bytes
AT91C_BASE_TWI->TWI_MMR = 0;
AT91C_BASE_TWI->TWI_MMR = isize;
AT91C_BASE_TWI->TWI_MMR = (isize | (address << 16)) & ~AT91C_TWI_MREAD;
AT91C_BASE_TWI->TWI_THR=*pData;
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START | AT91C_TWI_STOP | AT91C_TWI_MSEN;
status = AT91C_BASE_TWI->TWI_SR;
while (!(status & AT91C_TWI_TXRDY))
{
status = AT91C_BASE_TWI->TWI_SR;
//************************************
if ((status & AT91C_TWI_NACK) == AT91C_TWI_NACK)
{
err++;
}
}
.......
Происходят 2 вещи:
1. Цикл while почему-то виснит. Зацикливается.
2. Если поставить небольшую задержку в место отмеченное //******************
то вроде проходит нормально, но имеются err, хотя запись происходит ВЕРНО!
Что не верно???