/** * @brief USB_OTG_HandleConnectorIDStatusChange_ISR * handles the Connector ID Status Change Interrupt * @param None * @retval : status */ static uint32_t USB_OTG_HandleConnectorIDStatusChange_ISR(USB_OTG_CORE_HANDLE *pdev) { USB_OTG_GINTMSK_TypeDef gintmsk; USB_OTG_GOTGCTL_TypeDef gotgctl; USB_OTG_GINTSTS_TypeDef gintsts; gintsts.d32 = 0 ; gintmsk.d32 = 0 ; gotgctl.d32 = 0 ; gintmsk.b.sofintr = 1; USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GINTMSK, gintmsk.d32, 0); gotgctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGCTL); /* B-Device connector (Device Mode) */ if (gotgctl.b.conidsts) { USB_OTG_DisableGlobalInt(pdev); USB_OTG_CoreInitDev(pdev); USB_OTG_EnableGlobalInt(pdev); pdev->otg.OTG_State = B_PERIPHERAL; } else { USB_OTG_DisableGlobalInt(pdev); USB_OTG_CoreInitHost(pdev); USB_OTG_EnableGlobalInt(pdev); pdev->otg.OTG_State = A_HOST; } /* Set flag and clear interrupt */ gintsts.b.conidstschng = 1; USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); return 1; }
void DCD_Init(USB_OTG_CORE_HANDLE *pdev , USB_OTG_CORE_ID_TypeDef coreID) { uint32_t i; USB_OTG_EP *ep; USB_OTG_SelectCore (pdev , coreID); pdev->dev.device_status = USB_OTG_DEFAULT; pdev->dev.device_address = 0; /* Init ep structure */ for (i = 0; i < pdev->cfg.dev_endpoints ; i++) { ep = &pdev->dev.in_ep[i]; /* Init ep structure */ ep->is_in = 1; ep->num = i; ep->tx_fifo_num = i; /* Control until ep is actvated */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } for (i = 0; i < pdev->cfg.dev_endpoints; i++) { ep = &pdev->dev.out_ep[i]; /* Init ep structure */ ep->is_in = 0; ep->num = i; ep->tx_fifo_num = i; /* Control until ep is activated */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } USB_OTG_DisableGlobalInt(pdev); /*Init the Core (common init.) */ USB_OTG_CoreInit(pdev); /* Force Device Mode*/ USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); /* Init Device */ USB_OTG_CoreInitDev(pdev); /* Enable USB Global interrupt */ USB_OTG_EnableGlobalInt(pdev); }