void usb_irq(void) { P0_4 = 1; // // Split case into an if and a switch to force Keil into not using a library function: if (ivec == INT_USBRESET) { usbirq = 0x10; usb_state = DEFAULT; usb_current_config = 0; usb_current_alt_interface = 0; usb_bm_state = 0; } else { switch(ivec) { case INT_SUDAV: usbirq = 0x01; isr_sudav(); break; case INT_SOF: usbirq = 0x02; break; case INT_SUTOK: usbirq = 0x04; packetizer_data_ptr = NULL; packetizer_data_size = 0; packetizer_pkt_size = 0; break; case INT_SUSPEND: usbirq = 0x08; break; case INT_EP0IN: in_irq = 0x01; packetizer_isr_ep0_in(); break; case INT_EP0OUT: out_irq = 0x01; packetizer_data_size = 0; // req.misc_data = out0buf; USB_EP0_HSNAK(); break; case INT_E21IN: // Clear interrupt in_irq = 0x04; break; case INT_EP2OUT: // Clear interrupt out_irq = 0x04; packet_received = true; out2bc = 0xff; break; default: break; } } P0_4 = 0; }
void usb_irq(void) { switch(IVEC) { case INT_USBRESET: USBIRQ = 0x10; usb_state = DEFAULT; usb_current_config = 0; usb_current_alt_interface = 0; usb_bm_state = 0; break; case INT_SUDAV: USBIRQ = 0x01; isr_sudav(); break; case INT_SOF: USBIRQ = 0x02; break; case INT_SUTOK: USBIRQ = 0x04; packetizer_data_ptr = NULL; packetizer_data_size = 0; packetizer_pkt_size = 0; break; case INT_SUSPEND: USBIRQ = 0x08; break; case INT_EP0IN: IN_IRQ = 0x01; packetizer_isr_ep0_in(); break; case INT_EP0OUT: usb_handle_data(OUT0BUF, OUT0BC); OUT_IRQ = 0x01; OUT0BC=0xff; USB_EP0_HSNAK(); break; case INT_EP1IN: // Clear interrupt IN_IRQ = 0x02; IN1CS = 0x02; break; case INT_EP1OUT: // Clear interrupt OUT_IRQ = 0x02; OUT1BC = 0xff; break; default: break; } }