enable pull-up in dcd_init() instead of usbd

This commit is contained in:
hathach 2020-08-01 20:14:58 +07:00
parent 310797a580
commit acde49ccc9
No known key found for this signature in database
GPG Key ID: 2FA891220FBFD581
12 changed files with 17 additions and 13 deletions

View File

@ -62,7 +62,7 @@ All of the code for the low-level device API is in `src/portable/<vendor>/<chip
##### dcd_init ##### dcd_init
Initializes the USB peripheral for device mode and enables it. Initializes the USB peripheral for device mode and enables it.
This function should leave an internal D+/D- pull-up in its default power-on state. `dcd_connect` will be called by the USBD core following `dcd_init`. This function should enable internal D+/D- pull-up for enumeration.
##### dcd_int_enable / dcd_int_disable ##### dcd_int_enable / dcd_int_disable

View File

@ -339,7 +339,6 @@ bool tud_init (void)
// Init device controller driver // Init device controller driver
dcd_init(TUD_OPT_RHPORT); dcd_init(TUD_OPT_RHPORT);
tud_connect();
dcd_int_enable(TUD_OPT_RHPORT); dcd_int_enable(TUD_OPT_RHPORT);
return true; return true;

View File

@ -555,10 +555,10 @@ static void handle_ep0_nak(void)
*------------------------------------------------------------------*/ *------------------------------------------------------------------*/
void dcd_init(uint8_t rhport) void dcd_init(uint8_t rhport)
{ {
(void)rhport;
USB->USB_MCTRL_REG = USB_USB_MCTRL_REG_USBEN_Msk; USB->USB_MCTRL_REG = USB_USB_MCTRL_REG_USBEN_Msk;
tusb_vbus_changed((CRG_TOP->ANA_STATUS_REG & CRG_TOP_ANA_STATUS_REG_VBUS_AVAILABLE_Msk) != 0); tusb_vbus_changed((CRG_TOP->ANA_STATUS_REG & CRG_TOP_ANA_STATUS_REG_VBUS_AVAILABLE_Msk) != 0);
dcd_connect(rhport);
} }
void dcd_int_enable(uint8_t rhport) void dcd_int_enable(uint8_t rhport)

View File

@ -165,8 +165,6 @@ static void enum_done_processing(void)
*------------------------------------------------------------------*/ *------------------------------------------------------------------*/
void dcd_init(uint8_t rhport) void dcd_init(uint8_t rhport)
{ {
(void)rhport;
ESP_LOGV(TAG, "DCD init - Start"); ESP_LOGV(TAG, "DCD init - Start");
// A. Disconnect // A. Disconnect
@ -204,6 +202,8 @@ void dcd_init(uint8_t rhport)
USB_ENUMDONEMSK_M | USB_ENUMDONEMSK_M |
USB_RESETDETMSK_M | USB_RESETDETMSK_M |
USB_DISCONNINTMSK_M; // host most only USB_DISCONNINTMSK_M; // host most only
dcd_connect(rhport);
} }
void dcd_set_address(uint8_t rhport, uint8_t dev_addr) void dcd_set_address(uint8_t rhport, uint8_t dev_addr)

View File

@ -154,9 +154,8 @@ static void bus_reset(void)
// Initialize controller to device mode // Initialize controller to device mode
void dcd_init (uint8_t rhport) void dcd_init (uint8_t rhport)
{ {
(void) rhport;
tu_memclr(_dcd_xfer, sizeof(_dcd_xfer)); tu_memclr(_dcd_xfer, sizeof(_dcd_xfer));
dcd_connect(rhport);
} }
// Enable device interrupt // Enable device interrupt

View File

@ -181,6 +181,8 @@ void dcd_init(uint8_t rhport)
LPC_USB->UDCAH = (uint32_t) _dcd.udca; LPC_USB->UDCAH = (uint32_t) _dcd.udca;
LPC_USB->DMAIntEn = (DMA_INT_END_OF_XFER_MASK /*| DMA_INT_NEW_DD_REQUEST_MASK*/ | DMA_INT_ERROR_MASK); LPC_USB->DMAIntEn = (DMA_INT_END_OF_XFER_MASK /*| DMA_INT_NEW_DD_REQUEST_MASK*/ | DMA_INT_ERROR_MASK);
dcd_connect(rhport);
// Clear pending IRQ // Clear pending IRQ
NVIC_ClearPendingIRQ(USB_IRQn); NVIC_ClearPendingIRQ(USB_IRQn);
} }

View File

@ -345,7 +345,8 @@ void dcd_init(uint8_t rhport)
dcd_reg->USBSTS = dcd_reg->USBSTS; dcd_reg->USBSTS = dcd_reg->USBSTS;
dcd_reg->USBINTR = INTR_USB | INTR_ERROR | INTR_PORT_CHANGE | INTR_RESET | INTR_SUSPEND /*| INTR_SOF*/; dcd_reg->USBINTR = INTR_USB | INTR_ERROR | INTR_PORT_CHANGE | INTR_RESET | INTR_SUSPEND /*| INTR_SOF*/;
dcd_reg->USBCMD &= ~0x00FF0000; // Interrupt Threshold Interval = 0 dcd_reg->USBCMD &= ~0x00FF0000; // Interrupt Threshold Interval = 0
dcd_reg->USBCMD |= USBCMD_RUN_STOP; // Connect
} }
void dcd_int_enable(uint8_t rhport) void dcd_int_enable(uint8_t rhport)

View File

@ -205,7 +205,6 @@ static inline void reg16_clear_bits(__IO uint16_t *reg, uint16_t mask) {
void dcd_init (uint8_t rhport) void dcd_init (uint8_t rhport)
{ {
(void)rhport;
/* Clocks should already be enabled */ /* Clocks should already be enabled */
/* Use __HAL_RCC_USB_CLK_ENABLE(); to enable the clocks before calling this function */ /* Use __HAL_RCC_USB_CLK_ENABLE(); to enable the clocks before calling this function */
@ -244,7 +243,8 @@ void dcd_init (uint8_t rhport)
USB->CNTR |= USB_CNTR_RESETM | (USE_SOF ? USB_CNTR_SOFM : 0) | USB_CNTR_ESOFM | USB_CNTR_CTRM | USB_CNTR_SUSPM | USB_CNTR_WKUPM; USB->CNTR |= USB_CNTR_RESETM | (USE_SOF ? USB_CNTR_SOFM : 0) | USB_CNTR_ESOFM | USB_CNTR_CTRM | USB_CNTR_SUSPM | USB_CNTR_WKUPM;
dcd_handle_bus_reset(); dcd_handle_bus_reset();
// Data-line pull-up is left disconnected. // Enable pull-up if supported
if ( dcd_connect ) dcd_connect(rhport);
} }
// Define only on MCU with internal pull-up. BSP can define on MCU without internal PU. // Define only on MCU with internal pull-up. BSP can define on MCU without internal PU.

View File

@ -453,6 +453,8 @@ void dcd_init (uint8_t rhport)
// Enable global interrupt // Enable global interrupt
usb_otg->GAHBCFG |= USB_OTG_GAHBCFG_GINT; usb_otg->GAHBCFG |= USB_OTG_GAHBCFG_GINT;
dcd_connect(rhport);
} }
void dcd_int_enable (uint8_t rhport) void dcd_int_enable (uint8_t rhport)

View File

@ -134,6 +134,9 @@ void dcd_init (uint8_t rhport)
// Enable reset and wait for it before continuing. // Enable reset and wait for it before continuing.
USBIE |= RSTRIE; USBIE |= RSTRIE;
// Enable pullup.
USBCNF |= PUR_EN;
USBKEYPID = 0; USBKEYPID = 0;
} }

View File

@ -199,7 +199,6 @@ void setUp(void)
if ( !tusb_inited() ) if ( !tusb_inited() )
{ {
dcd_init_Expect(rhport); dcd_init_Expect(rhport);
dcd_connect_Expect(rhport);
tusb_init(); tusb_init();
} }

View File

@ -127,7 +127,6 @@ void setUp(void)
{ {
mscd_init_Expect(); mscd_init_Expect();
dcd_init_Expect(rhport); dcd_init_Expect(rhport);
dcd_connect_Expect(rhport);
tusb_init(); tusb_init();
} }
} }