uint32_t USBH_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) { USB_OTG_GINTSTS_TypeDef gintsts; uint32_t retval = 0; gintsts.d32 = 0; /* Check if HOST Mode */ if (USB_OTG_IsHostMode(pdev)) { gintsts.d32 = USB_OTG_ReadCoreItr(pdev); if (!gintsts.d32) { return 0; } if (gintsts.b.sofintr) { retval |= USB_OTG_USBH_handle_sof_ISR (pdev); } if (gintsts.b.rxstsqlvl) { retval |= USB_OTG_USBH_handle_rx_qlvl_ISR (pdev); } if (gintsts.b.nptxfempty) { retval |= USB_OTG_USBH_handle_nptxfempty_ISR (pdev); } if (gintsts.b.ptxfempty) { retval |= USB_OTG_USBH_handle_ptxfempty_ISR (pdev); } if (gintsts.b.hcintr) { retval |= USB_OTG_USBH_handle_hc_ISR (pdev); } if (gintsts.b.portintr) { retval |= USB_OTG_USBH_handle_port_ISR (pdev); } if (gintsts.b.disconnect) { retval |= USB_OTG_USBH_handle_Disconnect_ISR (pdev); } if (gintsts.b.incomplisoout) { retval |= USB_OTG_USBH_handle_IncompletePeriodicXfer_ISR (pdev); } } return retval; }
/** * @brief This function handles OTG_HS Handler. * @param None * @retval None */ void OTG_HS_irq(void) { if (USB_OTG_IsHostMode(&USB_OTG_dev)) /* ensure that we are in device mode */ { USBH_OTG_ISR_Handler(&USB_OTG_dev); } else { USBD_OTG_ISR_Handler(&USB_OTG_dev); } }
void OTG_FS_IRQHandler(void) { //USBD_OTG_ISR_Handler (&USB_OTG_dev); if (USB_OTG_IsHostMode(&USB_OTG_Core)) /* ensure that we are in device mode */ { USBH_OTG_ISR_Handler(&USB_OTG_Core); } else { USBD_OTG_ISR_Handler(&USB_OTG_Core); } }
void OTG_FS_IRQHandler(void) #endif { if (USB_OTG_IsHostMode(&USB_OTG_dev)) { // host mode #ifdef USE_HOST_MODE USBH_OTG_ISR_Handler(&USB_OTG_dev); #endif //STM32_USBO_OTG_ISR_Handler(&USB_OTG_dev); // USE_OTG_MODE } else { // device mode #ifdef USE_DEVICE_MODE USBD_OTG_ISR_Handler(&USB_OTG_dev); #endif } }
/** * @brief USB_OTG_HandleOTG_ISR * handles the OTG Interrupts * @param None * @retval : status */ static uint32_t USB_OTG_HandleOTG_ISR(USB_OTG_CORE_HANDLE *pdev) { USB_OTG_GOTGINT_TypeDef gotgint; USB_OTG_GOTGCTL_TypeDef gotgctl; gotgint.d32 = 0; gotgctl.d32 = 0; gotgint.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGINT); gotgctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGCTL); if (gotgint.b.sesenddet) { gotgctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGCTL); if (USB_OTG_IsDeviceMode(pdev)) { } else if (USB_OTG_IsHostMode(pdev)) { } } /* ----> SRP SUCCESS or FAILURE INTERRUPT <---- */ if (gotgint.b.sesreqsucstschng) { gotgctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGCTL); if (gotgctl.b.sesreqscs) /* Session request success */ { if (USB_OTG_IsDeviceMode(pdev)) { } /* Clear Session Request */ gotgctl.d32 = 0; gotgctl.b.sesreq = 1; USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GOTGCTL, gotgctl.d32, 0); } else /* Session request failure */ { if (USB_OTG_IsDeviceMode(pdev)) { } } } /* ----> HNP SUCCESS or FAILURE INTERRUPT <---- */ if (gotgint.b.hstnegsucstschng) { gotgctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGCTL); if (gotgctl.b.hstnegscs) /* Host negotiation success */ { if (USB_OTG_IsHostMode(pdev)) /* The core AUTOMATICALLY sets the Host mode */ { } } else /* Host negotiation failure */ { } gotgint.b.hstnegsucstschng = 1; /* Ack "Host Negotiation Success Status Change" interrupt. */ } /* ----> HOST NEGOTIATION DETECTED INTERRUPT <---- */ if (gotgint.b.hstnegdet) { if (USB_OTG_IsDeviceMode(pdev)) /* The core AUTOMATICALLY sets the Host mode */ { } else { } } if (gotgint.b.adevtoutchng) {} if (gotgint.b.debdone) { USB_OTG_ResetPort(pdev); } /* Clear OTG INT */ USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GOTGINT, gotgint.d32); return 1; }