update dwc int enable/disable
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#if TUSB_OPT_DEVICE_ENABLED && (defined(DCD_ATTR_DWC2_STM32) || TU_CHECK_MCU(GD32VF103))
|
#if TUSB_OPT_DEVICE_ENABLED && (defined(DCD_ATTR_DWC2_STM32) || TU_CHECK_MCU(GD32VF103))
|
||||||
|
|
||||||
|
#include "device/dcd.h"
|
||||||
#include "dwc2_type.h"
|
#include "dwc2_type.h"
|
||||||
|
|
||||||
#if defined(DCD_ATTR_DWC2_STM32)
|
#if defined(DCD_ATTR_DWC2_STM32)
|
||||||
@@ -42,17 +43,15 @@
|
|||||||
#error "Unsupported MCUs"
|
#error "Unsupported MCUs"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "device/dcd.h"
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// MACRO TYPEDEF CONSTANT ENUM
|
// 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 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 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 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 FIFO_BASE(_port, _x) ((volatile uint32_t*) (DWC2_REG_BASE + DWC2_FIFO_BASE + (_x) * DWC2_FIFO_SIZE))
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -441,14 +440,12 @@ void dcd_init (uint8_t rhport)
|
|||||||
|
|
||||||
void dcd_int_enable (uint8_t rhport)
|
void dcd_int_enable (uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
dcd_dwc2_int_enable(rhport);
|
||||||
NVIC_EnableIRQ(RHPORT_IRQn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_int_disable (uint8_t rhport)
|
void dcd_int_disable (uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
dcd_dwc2_int_disable(rhport);
|
||||||
NVIC_DisableIRQ(RHPORT_IRQn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
|
void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
|
||||||
|
|||||||
@@ -32,26 +32,38 @@
|
|||||||
#define __NOP() __asm volatile ("nop")
|
#define __NOP() __asm volatile ("nop")
|
||||||
|
|
||||||
// These numbers are the same for the whole GD32VF103 family.
|
// 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_MAX 4
|
||||||
#define EP_FIFO_SIZE 1280
|
#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
|
// The GD32VF103 is a RISC-V MCU, which implements the ECLIC Core-Local
|
||||||
// Interrupt Controller by Nuclei. It is nearly API compatible to the
|
// Interrupt Controller by Nuclei. It is nearly API compatible to the
|
||||||
// NVIC used by ARM MCUs.
|
// NVIC used by ARM MCUs.
|
||||||
#define ECLIC_INTERRUPT_ENABLE_BASE 0xD2001001UL
|
#define ECLIC_INTERRUPT_ENABLE_BASE 0xD2001001UL
|
||||||
|
|
||||||
#define NVIC_EnableIRQ __eclic_enable_interrupt
|
TU_ATTR_ALWAYS_INLINE
|
||||||
#define NVIC_DisableIRQ __eclic_disable_interrupt
|
|
||||||
|
|
||||||
static inline void __eclic_enable_interrupt (uint32_t irq) {
|
static inline void __eclic_enable_interrupt (uint32_t irq) {
|
||||||
*(volatile uint8_t*)(ECLIC_INTERRUPT_ENABLE_BASE + (irq * 4)) = 1;
|
*(volatile uint8_t*)(ECLIC_INTERRUPT_ENABLE_BASE + (irq * 4)) = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TU_ATTR_ALWAYS_INLINE
|
||||||
static inline void __eclic_disable_interrupt (uint32_t irq){
|
static inline void __eclic_disable_interrupt (uint32_t irq){
|
||||||
*(volatile uint8_t*)(ECLIC_INTERRUPT_ENABLE_BASE + (irq * 4)) = 0;
|
*(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_ */
|
#endif /* DWC2_GD32_H_ */
|
||||||
|
|||||||
@@ -84,4 +84,18 @@
|
|||||||
|
|
||||||
#endif
|
#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_ */
|
#endif /* DWC2_STM32_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user