Пытаюсь переделать образец с AT91.com для работы через прерывания. В половине случаев при старте возникает Spurious Interrupt. Есть предположение что как-то неправильно включаю превывание от endpoint0. Посмотрите, может кто сталкивался
void UDP_interrupt()
{
AT91_REG isr = pUDP->UDP_ISR;
isr &= pUDP->UDP_IMR;
if (isr & AT91C_UDP_ENDBUSRES) {
pUDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
// reset all endpoints
AT91C_BASE_UDP->UDP_RSTEP = (unsigned int)-1;
AT91C_BASE_UDP->UDP_RSTEP = 0;
// Enable the function
pUDP->UDP_FADDR = AT91C_UDP_FEN;
//__disable_interrupt();
AT91C_BASE_UDP->UDP_CSR[0] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL);
AT91C_BASE_UDP->UDP_IER = (AT91C_UDP_EPINT0);
// __enable_interrupt();
}
if (isr & AT91C_UDP_EPINT0) {
pUDP->UDP_ICR = AT91C_UDP_EPINT0;
AT91F_CDC_Enumerate();
}
};