summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2021-10-25 00:39:37 +0700
committerhathach <[email protected]>2021-10-25 00:40:21 +0700
commit61c80840c30db790560076fef9808cccc3fdf361 (patch)
tree88139c4a119a722240de3420b298c4c63ec6f48c
parent4ab931a36167f579f556bd3fed4946cf78865646 (diff)
update dwc int enable/disable
-rw-r--r--src/portable/synopsys/dwc2/dcd_dwc2.c17
-rw-r--r--src/portable/synopsys/dwc2/dwc2_gd32.h22
-rw-r--r--src/portable/synopsys/dwc2/dwc2_stm32.h14
3 files changed, 38 insertions, 15 deletions
diff --git a/src/portable/synopsys/dwc2/dcd_dwc2.c b/src/portable/synopsys/dwc2/dcd_dwc2.c
index aae6e7004..367fc7b56 100644
--- a/src/portable/synopsys/dwc2/dcd_dwc2.c
+++ b/src/portable/synopsys/dwc2/dcd_dwc2.c
@@ -32,6 +32,7 @@
#if TUSB_OPT_DEVICE_ENABLED && (defined(DCD_ATTR_DWC2_STM32) || TU_CHECK_MCU(GD32VF103))
+#include "device/dcd.h"
#include "dwc2_type.h"
#if defined(DCD_ATTR_DWC2_STM32)
@@ -42,17 +43,15 @@
#error "Unsupported MCUs"
#endif
-#include "device/dcd.h"
-
//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM
//--------------------------------------------------------------------+
-#define CORE_REG(_port) ((dwc2_core_t*) DWC2_REG_BASE)
+#define CORE_REG(_port) ((dwc2_core_t*) DWC2_REG_BASE)
#define DEVICE_REG(_port) ((dwc2_device_t*) (DWC2_REG_BASE + DWC2_DEVICE_BASE))
-#define EPIN_REG(_port) ((dwc2_epin_t*) (DWC2_REG_BASE + DWC2_IN_ENDPOINT_BASE))
-#define EPOUT_REG(_port) ((dwc2_epout_t*) (DWC2_REG_BASE + DWC2_OUT_ENDPOINT_BASE))
-#define FIFO_BASE(_port, _x) ((volatile uint32_t*) (DWC2_REG_BASE + DWC2_FIFO_BASE + (_x) * DWC2_FIFO_SIZE))
+#define EPIN_REG(_port) ((dwc2_epin_t*) (DWC2_REG_BASE + DWC2_IN_ENDPOINT_BASE))
+#define EPOUT_REG(_port) ((dwc2_epout_t*) (DWC2_REG_BASE + DWC2_OUT_ENDPOINT_BASE))
+#define FIFO_BASE(_port, _x) ((volatile uint32_t*) (DWC2_REG_BASE + DWC2_FIFO_BASE + (_x) * DWC2_FIFO_SIZE))
enum
{
@@ -441,14 +440,12 @@ void dcd_init (uint8_t rhport)
void dcd_int_enable (uint8_t rhport)
{
- (void) rhport;
- NVIC_EnableIRQ(RHPORT_IRQn);
+ dcd_dwc2_int_enable(rhport);
}
void dcd_int_disable (uint8_t rhport)
{
- (void) rhport;
- NVIC_DisableIRQ(RHPORT_IRQn);
+ dcd_dwc2_int_disable(rhport);
}
void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
diff --git a/src/portable/synopsys/dwc2/dwc2_gd32.h b/src/portable/synopsys/dwc2/dwc2_gd32.h
index 3ace4d484..8fe390fd8 100644
--- a/src/portable/synopsys/dwc2/dwc2_gd32.h
+++ b/src/portable/synopsys/dwc2/dwc2_gd32.h
@@ -32,26 +32,38 @@
#define __NOP() __asm volatile ("nop")
// These numbers are the same for the whole GD32VF103 family.
-#define RHPORT_IRQn 86
+#define DWC2_REG_BASE 0x50000000UL
#define EP_MAX 4
#define EP_FIFO_SIZE 1280
-#define DWC2_REG_BASE 0x50000000UL
+#define RHPORT_IRQn 86
// The GD32VF103 is a RISC-V MCU, which implements the ECLIC Core-Local
// Interrupt Controller by Nuclei. It is nearly API compatible to the
// NVIC used by ARM MCUs.
#define ECLIC_INTERRUPT_ENABLE_BASE 0xD2001001UL
-#define NVIC_EnableIRQ __eclic_enable_interrupt
-#define NVIC_DisableIRQ __eclic_disable_interrupt
-
+TU_ATTR_ALWAYS_INLINE
static inline void __eclic_enable_interrupt (uint32_t irq) {
*(volatile uint8_t*)(ECLIC_INTERRUPT_ENABLE_BASE + (irq * 4)) = 1;
}
+TU_ATTR_ALWAYS_INLINE
static inline void __eclic_disable_interrupt (uint32_t irq){
*(volatile uint8_t*)(ECLIC_INTERRUPT_ENABLE_BASE + (irq * 4)) = 0;
}
+TU_ATTR_ALWAYS_INLINE
+static inline void dcd_dwc2_int_enable(uint8_t rhport)
+{
+ (void) rhport;
+ __eclic_enable_interrupt(RHPORT_IRQn);
+}
+
+TU_ATTR_ALWAYS_INLINE
+static inline void dcd_dwc2_int_disable (uint8_t rhport)
+{
+ (void) rhport;
+ __eclic_disable_interrupt(RHPORT_IRQn);
+}
#endif /* DWC2_GD32_H_ */
diff --git a/src/portable/synopsys/dwc2/dwc2_stm32.h b/src/portable/synopsys/dwc2/dwc2_stm32.h
index 3a5e1a9ac..d99e5502a 100644
--- a/src/portable/synopsys/dwc2/dwc2_stm32.h
+++ b/src/portable/synopsys/dwc2/dwc2_stm32.h
@@ -84,4 +84,18 @@
#endif
+TU_ATTR_ALWAYS_INLINE
+static inline void dcd_dwc2_int_enable(uint8_t rhport)
+{
+ (void) rhport;
+ NVIC_EnableIRQ(RHPORT_IRQn);
+}
+
+TU_ATTR_ALWAYS_INLINE
+static inline void dcd_dwc2_int_disable (uint8_t rhport)
+{
+ (void) rhport;
+ NVIC_DisableIRQ(RHPORT_IRQn);
+}
+
#endif /* DWC2_STM32_H_ */