hcd work with esp32p4 in slave mode but have issue with DMA mode. In slave it enumerate device but has issue with msc bulk in
This commit is contained in:
@@ -60,21 +60,37 @@ static const dwc2_controller_t _dwc2_controller[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
static intr_handle_t usb_ih[TU_ARRAY_SIZE(_dwc2_controller)];
|
||||
|
||||
static void dcd_int_handler_wrap(void* arg) {
|
||||
const uint8_t rhport = (uint8_t)(uintptr_t) arg;
|
||||
dcd_int_handler(rhport);
|
||||
static void dwc2_int_handler_wrap(void* arg) {
|
||||
const uint8_t rhport = tu_u16_low((uint16_t)(uintptr_t)arg);
|
||||
const tusb_role_t role = (tusb_role_t) tu_u16_high((uint16_t)(uintptr_t)arg);
|
||||
#if CFG_TUD_ENABLED
|
||||
if (role == TUSB_ROLE_DEVICE) {
|
||||
dcd_int_handler(rhport);
|
||||
}
|
||||
#endif
|
||||
#if CFG_TUH_ENABLED
|
||||
if (role == TUSB_ROLE_HOST) {
|
||||
hcd_int_handler(rhport, true);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline void dwc2_dcd_int_enable(uint8_t rhport) {
|
||||
esp_intr_alloc(_dwc2_controller[rhport].irqnum, ESP_INTR_FLAG_LOWMED,
|
||||
dcd_int_handler_wrap, (void*)(uintptr_t) rhport, &usb_ih[rhport]);
|
||||
TU_ATTR_ALWAYS_INLINE static inline void dwc2_int_set(uint8_t rhport, tusb_role_t role, bool enabled) {
|
||||
if (enabled) {
|
||||
esp_intr_alloc(_dwc2_controller[rhport].irqnum, ESP_INTR_FLAG_LOWMED,
|
||||
dwc2_int_handler_wrap, (void*)(uintptr_t)tu_u16(role, rhport), &usb_ih[rhport]);
|
||||
} else {
|
||||
esp_intr_free(usb_ih[rhport]);
|
||||
}
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline void dwc2_dcd_int_disable(uint8_t rhport) {
|
||||
esp_intr_free(usb_ih[rhport]);
|
||||
}
|
||||
#define dwc2_dcd_int_enable(_rhport) dwc2_int_set(_rhport, TUSB_ROLE_DEVICE, true)
|
||||
#define dwc2_dcd_int_disable(_rhport) dwc2_int_set(_rhport, TUSB_ROLE_DEVICE, false)
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline void dwc2_remote_wakeup_delay(void) {
|
||||
vTaskDelay(pdMS_TO_TICKS(1));
|
||||
|
Reference in New Issue
Block a user