Нет прерываний от конечной точки 0 , при подключении к компу.
Может что то пропустил в настройках, вот код инициализации:
Код
pPMC->PMC_PCER = (1UL << AT91C_ID_UDP);
pAIC->AIC_SMR[AT91C_ID_UDP] = 4;
pAIC->AIC_SVR[AT91C_ID_UDP] = (ULONG) USB_IRQ;
pAIC->AIC_ICCR = (1UL << AT91C_ID_UDP);
pAIC->AIC_IECR = (1UL << AT91C_ID_UDP);
pPIO ->PIO_CODR = USBDP;
pPIO->PIO_PPUDR = VBUS;
Этот код вызывается при нажатие на кнопку, он проверяет подключено или нет usb и настраивает прерывание от конечной точки.
Код
if(On_Of == 0){
AT91C_BASE_PIOA->PIO_CODR = USBDP;
}else{
if((AT91C_BASE_PIOA->PIO_PDSR) & VBUS){
AT91C_BASE_PIOA->PIO_CODR = USBDP; //oFF vcc DP
for(twait = 0; twait < 500000; twait++){}
AT91C_BASE_PIOA->PIO_SODR = USBDP; //oN vcc DP
AT91C_BASE_UDP->UDP_CSR[0] = ( 1UL << 15); //enpoint on
AT91C_BASE_UDP->UDP_RSTEP = ( 1UL << 0); //endpoint reset
AT91C_BASE_UDP->UDP_IER = ( 1UL << 0); //endpoint enable ir
}//end if
else{ AT91C_BASE_PIOA->PIO_CODR = USBDP; }
}//end else
В программа обработки прерывания вставил код который включает светодиод, и сбрасывает AIC.
Код
void USB_IRQ(void){
AT91C_BASE_PIOA->PIO_CODR = REL1;
AT91C_BASE_AIC->AIC_EOICR = 0;
}//end extern void USB_IRQ(void)
Прерывание не происходят, Вектор в svr записан правильный, пробовал записывал в PC содержимое SVR, программа переходила
на функцию USB_IRQ, но когда подключаю отключаю разъем прерывания не происходят.