/*FUNCTION*------------------------------------------------------------------- * * Function Name : _bsp_usb_host_init * Returned Value : 0 for success, -1 for failure * Comments : * This function performs BSP-specific initialization related to USB * *END*----------------------------------------------------------------------*/ _mqx_int _bsp_usb_host_init(struct usb_host_if_struct *usb_if) { _mqx_int result; if (usb_if == NULL) { return IO_ERROR; } result = _bsp_usb_host_io_init(usb_if); if (result != MQX_OK) return result; if (usb_if->HOST_INIT_PARAM == &_khci0_host_init_param) { /* Do not configure enable USB regulator for host */ // SIM_SOPT1CFG_REG(SIM_BASE_PTR) |= SIM_SOPT1CFG_URWE_MASK; // SIM_SOPT1_REG(SIM_BASE_PTR) |= SIM_SOPT1_USBREGEN_MASK; /* Reset USB peripheral */ USB_USBTRC0_REG(USB0_BASE_PTR) |= USB_USBTRC0_USBRESET_MASK; /* Wait while resetting */ while (USB_USBTRC0_REG(USB0_BASE_PTR) & USB_USBTRC0_USBRESET_MASK) {} /* reset USB CTRL register */ USB_USBCTRL_REG(USB0_BASE_PTR) = 0; /* setup interrupt */ _bsp_int_init(INT_USB0, BSP_USB_INT_LEVEL, 0, TRUE); } else if (usb_if->HOST_INIT_PARAM == &_ehci0_host_init_param) { USBHS_USBCMD |= USBHS_USBCMD_RST_MASK; while (USBHS_USBCMD & USBHS_USBCMD_RST_MASK) { /* delay while resetting USB controller */ } USBHS_USBMODE = USBHS_USBMODE_CM_HOST_MASK; USBHS_USBCMD = USBHS_USBCMD_ASP(3) | USBHS_USBCMD_ITC(0); /* setup interrupt */ _bsp_int_init(INT_USBHS, BSP_USB_INT_LEVEL, 0, TRUE); } else { /* unknown controller */ result = IO_ERROR; } return result; }
/*FUNCTION*------------------------------------------------------------------- * * Function Name : _bsp_usb_host_init * Returned Value : 0 for success, -1 for failure * Comments : * This function performs BSP-specific initialization related to USB * *END*----------------------------------------------------------------------*/ _mqx_int _bsp_usb_host_init(struct usb_host_if_struct *usb_if) { _mqx_int result = _bsp_usb_host_io_init(usb_if); if (result != MQX_OK) return result; /* Do not configure enable USB regulator for host */ /* SIM_SOPT1_REG(SIM_BASE_PTR) |= SIM_SOPT1_USBREGEN_MASK; */ /* reset USB CTRL register */ USB_USBCTRL_REG(USB0_BASE_PTR) = 0; /* setup interrupt */ _bsp_int_init(INT_USB0, BSP_USB_INT_LEVEL, 0, TRUE); return MQX_OK; }
/*FUNCTION*------------------------------------------------------------------- * * Function Name : _bsp_usb_host_init * Returned Value : 0 for success, -1 for failure * Comments : * This function performs BSP-specific initialization related to USB * *END*----------------------------------------------------------------------*/ _mqx_int _bsp_usb_host_init(struct usb_host_if_struct *usb_if) { USB_MemMapPtr usb_ptr; USB_EHCI_HOST_INIT_STRUCT_PTR usb_init; _mqx_int result; if (usb_if == NULL) { return USBBSP_ERROR; } if (usb_if->HOST_INIT_PARAM == &_ehci0_host_init_param) { usb_ptr = USB0_BASE_PTR; } else if (usb_if->HOST_INIT_PARAM == &_ehci1_host_init_param) { usb_ptr = USB1_BASE_PTR; } else { return USBBSP_ERROR; /* unknown controller */ } result = _bsp_usb_host_io_init(usb_if); if (result != MQX_OK) return result; USB_USBCMD_REG(usb_ptr) &= ~USB_USBCMD_RS_MASK; while (USB_USBCMD_REG(usb_ptr) & USB_USBCMD_RS_MASK); { /* delay while resetting USB controller */ } USB_USBCMD_REG(usb_ptr) |= USB_USBCMD_RST_MASK; while (USB_USBCMD_REG(usb_ptr) & USB_USBCMD_RST_MASK) { /* delay while resetting USB controller */ } USB_USBMODE_REG(usb_ptr) = USB_USBMODE_CM_MASK; USB_USBCMD_REG(usb_ptr) = USB_USBCMD_ASP(3) | USB_USBCMD_ITC(0); /* setup interrupt */ usb_init = (USB_EHCI_HOST_INIT_STRUCT_PTR)usb_if->HOST_INIT_PARAM; result = _bsp_int_init(usb_init->VECTOR, BSP_USB_INT_LEVEL, 0, TRUE); return result; }