mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-18 21:41:12 +00:00
Merge pull request #349 from hathach/nxp-dcd-disconnect
implement Nxp mcu dcd disconnect
This commit is contained in:
commit
33888519dd
2
.gitignore
vendored
2
.gitignore
vendored
@ -11,7 +11,7 @@ latex
|
|||||||
*.elf
|
*.elf
|
||||||
*.ind
|
*.ind
|
||||||
.env
|
.env
|
||||||
/examples/*/*/build-*
|
/examples/*/*/build*
|
||||||
test_old/
|
test_old/
|
||||||
tests_obsolete/
|
tests_obsolete/
|
||||||
_build
|
_build
|
||||||
|
@ -50,3 +50,7 @@ JLINK_IF = swd
|
|||||||
# flash by copying bin file to DAP Mass Storage
|
# flash by copying bin file to DAP Mass Storage
|
||||||
flash: $(BUILD)/$(BOARD)-firmware.bin
|
flash: $(BUILD)/$(BOARD)-firmware.bin
|
||||||
cp $< /media/$(USER)/RT1015-EVK/
|
cp $< /media/$(USER)/RT1015-EVK/
|
||||||
|
|
||||||
|
# flash using pyocd
|
||||||
|
#flash: $(BUILD)/$(BOARD)-firmware.hex
|
||||||
|
# pyocd flash -b MIMXRT1015-EVK $<
|
||||||
|
@ -106,10 +106,10 @@ void dcd_set_config (uint8_t rhport, uint8_t config_num);
|
|||||||
// Wake up host
|
// Wake up host
|
||||||
void dcd_remote_wakeup(uint8_t rhport);
|
void dcd_remote_wakeup(uint8_t rhport);
|
||||||
|
|
||||||
// Connect or disconnect D+/D- line pull-up resistor.
|
// Connect by enabling internal pull-up resistor on D+/D-
|
||||||
// Defined in dcd source if MCU has internal pull-up.
|
|
||||||
// Otherwise, may be defined in BSP.
|
|
||||||
void dcd_connect(uint8_t rhport) TU_ATTR_WEAK;
|
void dcd_connect(uint8_t rhport) TU_ATTR_WEAK;
|
||||||
|
|
||||||
|
// Disconnect by disabling internal pull-up resistor on D+/D-
|
||||||
void dcd_disconnect(uint8_t rhport) TU_ATTR_WEAK;
|
void dcd_disconnect(uint8_t rhport) TU_ATTR_WEAK;
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -181,9 +181,7 @@ 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);
|
||||||
|
|
||||||
sie_write(SIE_CMDCODE_DEVICE_STATUS, 1, 1); // connect
|
// Clear pending IRQ
|
||||||
|
|
||||||
// USB IRQ priority should be set by application previously
|
|
||||||
NVIC_ClearPendingIRQ(USB_IRQn);
|
NVIC_ClearPendingIRQ(USB_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,6 +217,18 @@ void dcd_remote_wakeup(uint8_t rhport)
|
|||||||
(void) rhport;
|
(void) rhport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dcd_connect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
sie_write(SIE_CMDCODE_DEVICE_STATUS, 1, SIE_DEV_STATUS_CONNECT_STATUS_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dcd_disconnect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
sie_write(SIE_CMDCODE_DEVICE_STATUS, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// CONTROL HELPER
|
// CONTROL HELPER
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -95,7 +95,7 @@ enum {
|
|||||||
CMDSTAT_DEVICE_ADDR_MASK = TU_BIT(7 )-1,
|
CMDSTAT_DEVICE_ADDR_MASK = TU_BIT(7 )-1,
|
||||||
CMDSTAT_DEVICE_ENABLE_MASK = TU_BIT(7 ),
|
CMDSTAT_DEVICE_ENABLE_MASK = TU_BIT(7 ),
|
||||||
CMDSTAT_SETUP_RECEIVED_MASK = TU_BIT(8 ),
|
CMDSTAT_SETUP_RECEIVED_MASK = TU_BIT(8 ),
|
||||||
CMDSTAT_DEVICE_CONNECT_MASK = TU_BIT(16), ///< reflect the softconnect only, does not reflect the actual attached state
|
CMDSTAT_DEVICE_CONNECT_MASK = TU_BIT(16), ///< reflect the soft-connect only, does not reflect the actual attached state
|
||||||
CMDSTAT_DEVICE_SUSPEND_MASK = TU_BIT(17),
|
CMDSTAT_DEVICE_SUSPEND_MASK = TU_BIT(17),
|
||||||
CMDSTAT_CONNECT_CHANGE_MASK = TU_BIT(24),
|
CMDSTAT_CONNECT_CHANGE_MASK = TU_BIT(24),
|
||||||
CMDSTAT_SUSPEND_CHANGE_MASK = TU_BIT(25),
|
CMDSTAT_SUSPEND_CHANGE_MASK = TU_BIT(25),
|
||||||
@ -209,6 +209,18 @@ void dcd_remote_wakeup(uint8_t rhport)
|
|||||||
(void) rhport;
|
(void) rhport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dcd_connect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
DCD_REGS->DEVCMDSTAT |= CMDSTAT_DEVICE_CONNECT_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dcd_disconnect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
DCD_REGS->DEVCMDSTAT &= ~CMDSTAT_DEVICE_CONNECT_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// DCD Endpoint Port
|
// DCD Endpoint Port
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -322,7 +322,7 @@ void dcd_init(uint8_t rhport)
|
|||||||
{
|
{
|
||||||
tu_memclr(&_dcd_data, sizeof(dcd_data_t));
|
tu_memclr(&_dcd_data, sizeof(dcd_data_t));
|
||||||
|
|
||||||
dcd_registers_t* const dcd_reg = _dcd_controller[rhport].regs;
|
dcd_registers_t* dcd_reg = _dcd_controller[rhport].regs;
|
||||||
|
|
||||||
// Reset controller
|
// Reset controller
|
||||||
dcd_reg->USBCMD |= USBCMD_RESET;
|
dcd_reg->USBCMD |= USBCMD_RESET;
|
||||||
@ -342,7 +342,6 @@ void dcd_init(uint8_t rhport)
|
|||||||
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 |= TU_BIT(0); // connect
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_int_enable(uint8_t rhport)
|
void dcd_int_enable(uint8_t rhport)
|
||||||
@ -376,6 +375,18 @@ void dcd_remote_wakeup(uint8_t rhport)
|
|||||||
(void) rhport;
|
(void) rhport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dcd_connect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
dcd_registers_t* dcd_reg = _dcd_controller[rhport].regs;
|
||||||
|
dcd_reg->USBCMD |= USBCMD_RUN_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dcd_disconnect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
dcd_registers_t* dcd_reg = _dcd_controller[rhport].regs;
|
||||||
|
dcd_reg->USBCMD &= ~USBCMD_RUN_STOP;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// HELPER
|
// HELPER
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -91,6 +91,18 @@ void dcd_remote_wakeup (uint8_t rhport)
|
|||||||
(void) rhport;
|
(void) rhport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Connect by enabling internal pull-up resistor on D+/D-
|
||||||
|
void dcd_connect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disconnect by disabling internal pull-up resistor on D+/D-
|
||||||
|
void dcd_disconnect(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Endpoint API
|
// Endpoint API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
Loading…
x
Reference in New Issue
Block a user