void usb_handle_transaction(void) { usbrequesterrorflag = 0; trn_status = GetUsbTransaction(); EP0_Outbdp = &usb_bdt[USB_USTAT2BD(trn_status)]; EP0_Inbdp = &usb_bdt[USB_USTAT2BD(trn_status | DIRBIT)]; // All replies in IN direction switch (EP0_Outbdp->BDSTAT & USB_TOKEN_Mask) { case USB_TOKEN_SETUP: usb_handle_setup(); break; case USB_TOKEN_OUT: usb_handle_out(); break; case USB_TOKEN_IN: usb_handle_in(); break; //default: /* Default case of unknown TOKEN - discard */ } }
void usb_handle_transaction(void) { uLedToggle(); trn_status = GetUsbTransaction(); bdp = &usb_bdt[USB_USTAT2BD(trn_status)]; // JTR PIC24 fixup Added DIRBIT as it is different for PIC24F ( and different again for the PIC24E/dsPIC33E) // the USB_USTAT2BD macro is also altered to shift the result the correct number of places. rbdp = &usb_bdt[USB_USTAT2BD(trn_status | DIRBIT)]; // All replies in IN direction switch (bdp->BDSTAT & USB_TOKEN_Mask) { case USB_TOKEN_SETUP: usb_handle_setup(); break; case USB_TOKEN_OUT: usb_handle_out(); break; case USB_TOKEN_IN: usb_handle_in(); break; //default: /* Default case of unknown TOKEN - discard */ } }
void handle_irq_usb_irq(void) { unsigned status = readl(USB_INTSTAT); status &= readl(USB_INTEN); if (status & USB_INT_FRAME_INT) { usb_frames++; writel(USB_INT_FRAME_INT, USB_INTEN); } if (status & USB_INT_DEV_INT) usb_handle_dev_int(); if (status & USB_INT_EP0OUT) usb_handle_ep0out(); if (status & USB_INT_EP0IN) usb_handle_ep0in(); if (status & USB_INT_EP1OUT) usb_handle_out(&usb_ep_data[1], USB_INT_EP1OUT); if (status & USB_INT_EP1IN) usb_handle_in(&usb_ep_data[1], USB_INT_EP1IN); }