uint8_t USBH_Disconnected (USB_OTG_CORE_HANDLE *pdev) { USB_OTG_BSP_DriveVBUS(pdev,0); /* Disable all interrupts. */ USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTMSK, 0); /* Clear any pending interrupts. */ USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, 0xFFFFFFFF); USB_OTG_DisableGlobalInt(pdev); pdev->host.ConnSts = 0; return 0; }
void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOH , ENABLE); GPIO_InitStructure.GPIO_Pin = HOST_POWERSW_VBUS; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; GPIO_Init(HOST_POWERSW_PORT,&GPIO_InitStructure); /* By Default, DISABLE is needed on output of the Power Switch */ USB_OTG_BSP_DriveVBUS (pdev, 0); USB_OTG_BSP_mDelay(200); /* Delay is need for stabilising the Vbus Low in Reset Condition, when Vbus=1 and Reset-button is pressed by user */ }
//-------------------------------------------------------------- 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); }