Необходимо в обработчике прерывания производить чтение из Dataflash.
Если делать это из main то всё нормально. Если же читать Dataflash в обработчике прерывания от таймера (период 250 мс) или в другом обработчике прерывания, то происходит зацикливание при проверке (while (AT45_IsBusy(pAt45))

Обработчик прерывания от таймера:
Код
void IRQ_TIMER_TC0()
{
unsigned char temp_char;
volatile unsigned int dummy;
dummy = AT91C_BASE_TC0->TC_SR; // Сбрасываем статусный бит
temp_char=EPR_Rd(MyAdr);
}
{
unsigned char temp_char;
volatile unsigned int dummy;
dummy = AT91C_BASE_TC0->TC_SR; // Сбрасываем статусный бит
temp_char=EPR_Rd(MyAdr);
}
Функции чтения из Dataflash:
Код
char EPR_Rd(unsigned int adr)
{
unsigned char temp;
AT45_Read(&at45, &temp, 1, adr);
return(temp);
}
{
unsigned char temp;
AT45_Read(&at45, &temp, 1, adr);
return(temp);
}
Код
void AT45_Read (At45 *pAt45, unsigned char *pBuffer, unsigned int size, unsigned int address)
{
AT45_SendCommand(pAt45, AT45_CONTINUOUS_READ_LEG, 8, pBuffer, size, address, 0, 0); // Issue a continuous read array command
while (AT45_IsBusy(pAt45)); // Тут зацикливаемся
}
{
AT45_SendCommand(pAt45, AT45_CONTINUOUS_READ_LEG, 8, pBuffer, size, address, 0, 0); // Issue a continuous read array command
while (AT45_IsBusy(pAt45)); // Тут зацикливаемся
}