есть проблема. SPI на выдачу работает нормально, но как только создаю прерывание по появлению данных в RDR регистре все зависает по окончанию выполнения функции, вектор которой прописан в регистре AIC_SVR для AT91C_ID_SPI c нулевым приоритетом.
по идее нужно указать точку окончания команды прерывания записав в AIC_EOICR соответствующий бит и сбросить команды прерывания записью бита в AIC_ICCR. вроде все сделал как описано в мануале, но один фиК после выполнения команды прерывания МК зависает и чегото там ждет, вот только чего???
код инициализации прерывания:
Код
AIC_ConfigureIT(AT91C_ID_SPI, 0, ISR_SPI);
*AT91C_SPI_IER = AT91C_SPI_RDRF;
AIC_EnableIT(AT91C_ID_SPI);
код вызываемой функции:
CODE
void ISR_SPI(void)
{
unsigned int status;
// *AT91C_SPI_IDR = AT91C_SPI_RDRF;
status = dwSPITemp = (*AT91C_SPI_SR & 0xff);
if (((status & AT91C_SPI_RDRF) != 0))
{
dwSPITemp = *AT91C_SPI_RDR; // dwSPITemp (UINT32)
*AT91C_AIC_EOICR = 0xffffffff; // на всякий случай все регистры обнуляю
*AT91C_AIC_ICCR = 0xffffffff;
// AIC_ConfigureIT(AT91C_ID_SPI, 0, ISR_SPI);
// *AT91C_SPI_IER = AT91C_SPI_RDRF;
// AIC_EnableIT(AT91C_ID_SPI);
}
}
как видно, пробовал заново сконфигурировать прерывание и вырубать прерывание на момент выполнения функции. результат один - стопорится и все тут =(.
подскажите пожалуйста где ошибка и куда копать. может как новичок гдето делаю "глобальную" ошибку?