/****************************************************************************** * Function: void Check_USBBus_Status(void) * Input: None * Output: None * Overview: This function can be used to detect if the USB bus has attached * on USB bus, we can use a GPIO, or KBI interrupt, it is disable here * *****************************************************************************/ void Check_USBBus_Status(void) { if(CTL_USBEN == 0) /* module off ? */ { EPCTL0 = 0x0D; INTSTAT = 0xBF; CTL = 0x00; INTENB = 0x00; /* disable USB interrupt*/ CTL_USBEN = 0x01; /* enable module */ USBCTL0 = UCFG_VAL; /* attach to USB bus*/ Usb_Device_State = ATTACHED_STATE; } if(Usb_Device_State == ATTACHED_STATE) { INTSTAT = 0xBF; /*clear USB interrupts*/ INTENB = 0xBF; Cpu_Delay100US(10000); } if(Usb_Device_State == USB_ENTER_SUSPEND) { USB_Suspend(); } }
void USB_LP_IRQHandler (void) { U32 istr, num, val; istr = ISTR; /* USB Reset Request */ if (istr & ISTR_RESET) { USB_Reset(); #if USB_RESET_EVENT USB_Reset_Event(); #endif ISTR = ~ISTR_RESET; } /* USB Suspend Request */ if (istr & ISTR_SUSP) { USB_Suspend(); #if USB_SUSPEND_EVENT USB_Suspend_Event(); #endif ISTR = ~ISTR_SUSP; } /* USB Wakeup */ if (istr & ISTR_WKUP) { USB_WakeUp(); #if USB_RESUME_EVENT USB_Resume_Event(); #endif ISTR = ~ISTR_WKUP; } /* Start of Frame */ if (istr & ISTR_SOF) { #if USB_SOF_EVENT USB_SOF_Event(); #endif ISTR = ~ISTR_SOF; } #if USB_ERROR_EVENT /* PMA Over/underrun */ if (istr & ISTR_PMAOVR) { USB_Error_Event(1); ISTR = ~ISTR_PMAOVR; } /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */ if (istr & ISTR_ERR) { USB_Error_Event(0); ISTR = ~ISTR_ERR; } #endif /* Endpoint Interrupts */ while ((istr = ISTR) & ISTR_CTR) { ISTR = ~ISTR_CTR; num = istr & ISTR_EP_ID; val = EPxREG(num); if (val & EP_CTR_RX) { EPxREG(num) = val & ~EP_CTR_RX & EP_MASK; if (USB_P_EP[num]) { if (val & EP_SETUP) { USB_P_EP[num](USB_EVT_SETUP); } else { USB_P_EP[num](USB_EVT_OUT); } } } if (val & EP_CTR_TX) { EPxREG(num) = val & ~EP_CTR_TX & EP_MASK; if (USB_P_EP[num]) { USB_P_EP[num](USB_EVT_IN); } } } }
void CmtUsbDev::IrqHandler() { uint32 istr, num, val; istr = ISTR; /* USB Reset Request */ if (istr & ISTR_RESET) { USB_Reset(); ISTR = ~ISTR_RESET; } /* USB Suspend Request */ if (istr & ISTR_SUSP) { USB_Suspend(); ISTR = ~ISTR_SUSP; } /* USB Wakeup */ if (istr & ISTR_WKUP) { USB_WakeUp(); ISTR = ~ISTR_WKUP; } /* Start of Frame */ if (istr & ISTR_SOF) { USB_StartOfFrame(); ISTR = ~ISTR_SOF; } /* PMA Over/underrun */ if (istr & ISTR_PMAOVR) { USB_Error(1); ISTR = ~ISTR_PMAOVR; } /* Error: No Answer, CRC Error, Bit Stuff Error, Frame Format Error */ if (istr & ISTR_ERR) { USB_Error(0); ISTR = ~ISTR_ERR; } /* Endpoint Interrupts */ while( (istr = ISTR) & ISTR_CTR) { ISTR = ~ISTR_CTR; num = istr & ISTR_EP_ID; val = EPxREG(num); if (val & EP_CTR_RX) { EPxREG(num) = val & ~EP_CTR_RX & EP_MASK; switch( num ) { case 0 : EndPoint0( val & EP_SETUP ? USB_EVT_SETUP : USB_EVT_OUT ); break; case 1 : EndPoint1( USB_EVT_OUT ); break; case 2 : EndPoint2( USB_EVT_OUT ); break; case 3 : EndPoint3( USB_EVT_OUT ); break; case 4 : EndPoint4( USB_EVT_OUT ); break; case 5 : EndPoint5( USB_EVT_OUT ); break; case 6 : EndPoint6( USB_EVT_OUT ); break; case 7 : EndPoint7( USB_EVT_OUT ); break; case 8 : EndPoint8( USB_EVT_OUT ); break; case 9 : EndPoint9( USB_EVT_OUT ); break; case 10 : EndPoint10( USB_EVT_OUT ); break; case 11 : EndPoint11( USB_EVT_OUT ); break; case 12 : EndPoint12( USB_EVT_OUT ); break; case 13 : EndPoint13( USB_EVT_OUT ); break; case 14 : EndPoint14( USB_EVT_OUT ); break; case 15 : EndPoint15( USB_EVT_OUT ); break; } } if (val & EP_CTR_TX) { EPxREG(num) = val & ~EP_CTR_TX & EP_MASK; switch( num ) { case 0 : EndPoint0( USB_EVT_IN ); break; case 1 : EndPoint1( USB_EVT_IN ); break; case 2 : EndPoint2( USB_EVT_IN ); break; case 3 : EndPoint3( USB_EVT_IN ); break; case 4 : EndPoint4( USB_EVT_IN ); break; case 5 : EndPoint5( USB_EVT_IN ); break; case 6 : EndPoint6( USB_EVT_IN ); break; case 7 : EndPoint7( USB_EVT_IN ); break; case 8 : EndPoint8( USB_EVT_IN ); break; case 9 : EndPoint9( USB_EVT_IN ); break; case 10 : EndPoint10( USB_EVT_IN ); break; case 11 : EndPoint11( USB_EVT_IN ); break; case 12 : EndPoint12( USB_EVT_IN ); break; case 13 : EndPoint13( USB_EVT_IN ); break; case 14 : EndPoint14( USB_EVT_IN ); break; case 15 : EndPoint15( USB_EVT_IN ); break; } } } }