// Callbacks //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //! \brief Callback invoked during the initialization of the USB driver //! //! Configures and enables USB controller and VBus monitoring interrupts //! \param pUsb Pointer to a S_usb instance //------------------------------------------------------------------------------ static void CBK_Init(const S_usb *pUsb) { // Configure and enable the USB controller interrupt AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, USB_GetDriverID(pUsb), AT91C_AIC_PRIOR_LOWEST, 0, //AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, ISR_Driver); AT91F_AIC_EnableIt(AT91C_BASE_AIC, USB_GetDriverID(pUsb)); #ifndef USB_BUS_POWERED // Configure VBus monitoring BRD_ConfigureVBus(USB_GetDriverInterface(pUsb)); // Configure and enable the Vbus detection interrupt AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_VBUS, AT91C_AIC_PRIOR_LOWEST, 0, //AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, ISR_VBus); AT91F_PIO_InterruptEnable(AT91C_PIO_VBUS, AT91C_VBUS); AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_VBUS); #else // Power up the USB controller USB_Attach(pUsb); #endif }
//------------------------------------------------------------------------------ // \brief Disables the peripheral clock of the USB controller associated with // the specified USB driver // \param pUsb Pointer to a S_usb instance // \see S_usb //------------------------------------------------------------------------------ INLINEFUNC void UDP_DisableMCK(const S_usb *pUsb) { AT91C_BASE_PMC->PMC_PCDR = 1 << USB_GetDriverID(pUsb); }