/************************************************************************* * Function Name: USB_HwReset * Parameters: none * * Return: none * * Description: Reset USB engine * *************************************************************************/ void USB_HwReset (void) { Int32U Count; // Clear realized EP flag for(Count = 0; Count < ENP_MAX_NUMB; Count++) { EpCnfg[Count].pEpCtrl = NULL; } // Free entire USB packet memory for (Count = 0; Count < EP_MAX_SLOTS*2; Count++) { PacketMemBuff[Count].Size = 0; } // Resume delay counter DlyCnt = 0; // USB_Configure USB_Configure(FALSE); // Set Buffer table address USB_BTABLE = USB_OffsetOfDBT; // Init Packet memory table pPacketMemUse = NULL; // Control EP Init USB_RealizeEp(&USB_CtrlEpDescr0,&USB_CtrlEpExt0,TRUE); USB_RealizeEp(&USB_CtrlEpDescr1,&USB_CtrlEpExt1,TRUE); // Set address 0 USB_SetDefAdd(); // Enable Device interrupts USB_CNTR = bmCTRM | bmRESETM | bmSUSPM | bmWKUPM | (USB_SOF_EVENT ? bmSOFM : 0) | (USB_ERROR_EVENT ? bmERRM : 0) | (USB_PMAOVR_EVENT ? bmPMAOVRM : 0) ; }
/************************************************************************* * Function Name: UsbEpInterfaceCnfg * Parameters: pUsbStandardInterfaceDescriptor_t pInterface * Boolean Configure * * Return: none * * Description: Configure/deconfigure EPs of a certain interface * *************************************************************************/ static void UsbEpInterfaceCnfg(pUsbStandardInterfaceDescriptor_t pInterface, Boolean Configure) { pUsbStandardEpDescriptor_t pEp = NULL; const UsbEP_ExtData_t * pUsbEP_ExtData; assert(pInterface); while((pEp = UsbFindEP(pInterface,pEp)) != NULL) { pUsbEP_ExtData = USB_EP_ExtFind(pEp->bEndpointAddress); assert(pUsbEP_ExtData); USB_RealizeEp(pEp,pUsbEP_ExtData,Configure); } }