void usbPoll(void) { if (!USBIRQ) return; // clear USB interrupt flag USBIRQ = 0; switch (ivec) { case INT_SUDAV: // SETUP data packet usbirq = 0x01; // clear interrupt flag usbRequestReceived(); // process setup data // arm the EP0 OUT in case we have data after the request out0bc = USB_EP0_SIZE; break; case INT_SOF: // SOF packet usbirq = 0x02; // clear interrupt flag ++usbFrameCnt; break; /* case INT_SUTOK: // setup token usbirq = 0x04; // clear interrupt flag break; */ case INT_SUSPEND: // SUSPEND signal usbirq = 0x08; // clear interrupt flag break; case INT_USBRESET: // USB bus reset usbirq = 0x10; // clear interrupt flag usb_state = DEFAULT; // reset internal states usb_current_config = 0; break; case INT_EP0IN: in_irq = 0x01; // clear interrupt flag // update USB RAM EP0 IN with new data packetizer_isr_ep0_in(); break; case INT_EP0OUT: out_irq = 0x01; // clear interrupt flag usbRequestDataReceived(); out0bc = USB_EP0_SIZE; // rearm the next EP0 OUT break; case INT_EP1IN: in_irq = 0x02; // clear interrupt flag //out0bc = USB_EP0_SIZE; break; case INT_EP2IN: in_irq = 0x04; // clear interrupt flag //out0bc = USB_EP0_SIZE; break; } }
void usbPoll(void) { if (!USBIRQ) return; // clear USB interrupt flag USBIRQ = 0; switch (ivec) { case INT_SUDAV: // SETUP data packet usbirq = 0x01; // clear interrupt flag usbRequestReceived(); // process setup data // arm the EP0 OUT in case we have data after the request out0bc = 0x40; break; case INT_SOF: // SOF packet usbirq = 0x02; // clear interrupt flag ++usbFrameCnt; break; /* case INT_SUTOK: // setup token usbirq = 0x04; // clear interrupt flag break; */ case INT_SUSPEND: // SUSPEND signal usbirq = 0x08; // clear interrupt flag break; case INT_USBRESET: // USB bus reset usbirq = 0x10; // clear interrupt flag usb_state = DEFAULT; // reset internal states usb_current_config = 0; break; case INT_EP0IN: in_irq = 0x01; // clear interrupt flag // update USB RAM EP0 IN with new data packetizer_isr_ep0_in(); break; case INT_EP0OUT: out_irq = 0x01; // clear interrupt flag usbRequestDataReceived(); // rearm the next EP0 OUT out0bc = 0x40; break; case INT_EP1IN: in_irq = 0x02; // clear interrupt flag // user code will have already filled IN1 buffer and set byte count // USB controller clears busy flag when data is sent break; case INT_EP1OUT: out_irq = 0x02; // clear interrupt flag break; } }