/** * @brief USB_OTG_InitiateHNP * Initiate HNP * @param None * @retval : None */ void USB_OTG_InitiateHNP(USB_OTG_CORE_HANDLE *pdev , uint8_t state, uint8_t mode) { USB_OTG_GOTGCTL_TypeDef otgctl; USB_OTG_HPRT0_TypeDef hprt0; otgctl.d32 = 0; hprt0.d32 = 0; otgctl.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GOTGCTL ); if (mode) { /* Device mode */ if (state) { otgctl.b.devhnpen = 1; /* B-Dev has been enabled to perform HNP */ otgctl.b.hnpreq = 1; /* Initiate an HNP req. to the connected USB host*/ USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GOTGCTL, otgctl.d32); } } else { /* Host mode */ if (state) { otgctl.b.hstsethnpen = 1; /* A-Dev has enabled B-device for HNP */ USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GOTGCTL, otgctl.d32); /* Suspend the bus so that B-dev will disconnect indicating the initial condition for HNP to DWC_Core */ hprt0.d32 = USB_OTG_ReadHPRT0(pdev); hprt0.b.prtsusp = 1; /* The core clear this bit when disconnect interrupt generated (GINTSTS.DisconnInt = '1') */ USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); } } }
//-------------------------------------------------------------- uint32_t USB_OTG_ResetPort(USB_OTG_CORE_HANDLE *pdev) { USB_OTG_HPRT0_TypeDef hprt0; hprt0.d32 = USB_OTG_ReadHPRT0(pdev); hprt0.b.prtrst = 1; USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); USB_OTG_BSP_mDelay (10); /* See Note #1 */ hprt0.b.prtrst = 0; USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); USB_OTG_BSP_mDelay (20); return 1; }
/** * @brief USB_OTG_BSP_Suspend * Handles the Enter USB to Suspend Mode * @param pdev: Selected device * @retval Status */ void USB_OTG_BSP_Suspend(USB_OTG_CORE_HANDLE *pdev) { USB_OTG_HPRT0_TypeDef hprt0; USB_OTG_PCGCCTL_TypeDef power; hprt0.d32 = 0; hprt0.d32 = USB_OTG_ReadHPRT0(pdev); hprt0.b.prtsusp = 1; USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); /* switch-off the clocks */ power.d32 = 0; power.b.stoppclk = 1; USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); power.b.gatehclk = 1; USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); }
//-------------------------------------------------------------- void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state) { USB_OTG_HPRT0_TypeDef hprt0; hprt0.d32 = 0; /* enable disable the external charge pump */ USB_OTG_BSP_DriveVBUS(pdev, state); /* Turn on the Host port power. */ hprt0.d32 = USB_OTG_ReadHPRT0(pdev); if ((hprt0.b.prtpwr == 0 ) && (state == 1 )) { hprt0.b.prtpwr = 1; USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); } if ((hprt0.b.prtpwr == 1 ) && (state == 0 )) { hprt0.b.prtpwr = 0; USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); } USB_OTG_BSP_mDelay(200); }