summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-04-06 14:11:45 +0700
committerhathach <[email protected]>2020-04-06 14:11:45 +0700
commit2d6d298302be2d39374c36e7889341dee944d542 (patch)
tree1e935941eca71d06b84ad781a45144b1c88b4464
parent4430ea61e20844726cdce33602e60f40a136a99e (diff)
move irqhandler to application
tud_isr() must be called by application to forward the irqhandle to the stack
-rw-r--r--examples/device/board_test/Makefile6
-rw-r--r--hw/bsp/circuitplayground_express/circuitplayground_express.c10
-rw-r--r--hw/bsp/ea4088qs/ea4088qs.c32
-rw-r--r--hw/bsp/feather_m0_express/feather_m0_express.c8
-rw-r--r--hw/bsp/feather_m4_express/feather_m4_express.c23
-rw-r--r--hw/bsp/feather_nrf52840_express/feather_nrf52840_express.c1
-rw-r--r--hw/bsp/itsybitsy_m0/itsybitsy_m0.c8
-rw-r--r--hw/bsp/itsybitsy_m4/itsybitsy_m4.c23
-rw-r--r--hw/bsp/metro_m0_express/metro_m0_express.c8
-rw-r--r--hw/bsp/metro_m4_express/metro_m4_express.c23
-rw-r--r--hw/bsp/seeeduino_xiao/seeeduino_xiao.c8
-rw-r--r--src/device/dcd.h2
-rw-r--r--src/portable/microchip/samd/dcd_samd.c54
13 files changed, 138 insertions, 68 deletions
diff --git a/examples/device/board_test/Makefile b/examples/device/board_test/Makefile
index 5a455078e..ce34c7ccd 100644
--- a/examples/device/board_test/Makefile
+++ b/examples/device/board_test/Makefile
@@ -9,4 +9,10 @@ INC += \
EXAMPLE_SOURCE += $(wildcard src/*.c)
SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
+# board_test example is special example that doesn't enable device or host stack
+# This can cause some TinyUSB API missing, this hack to allow us to fill those API
+# to pass the compilation process
+CFLAGS += \
+ -D"tud_isr(x)= " \
+
include ../../rules.mk
diff --git a/hw/bsp/circuitplayground_express/circuitplayground_express.c b/hw/bsp/circuitplayground_express/circuitplayground_express.c
index cdd75580a..5ddf1c624 100644
--- a/hw/bsp/circuitplayground_express/circuitplayground_express.c
+++ b/hw/bsp/circuitplayground_express/circuitplayground_express.c
@@ -36,6 +36,14 @@
#include "hpl/pm/hpl_pm_base.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_Handler(void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 17
@@ -134,6 +142,7 @@ int board_uart_write(void const * buf, int len)
}
#if CFG_TUSB_OS == OPT_OS_NONE
+
volatile uint32_t system_ticks = 0;
void SysTick_Handler (void)
{
@@ -144,4 +153,5 @@ uint32_t board_millis(void)
{
return system_ticks;
}
+
#endif
diff --git a/hw/bsp/ea4088qs/ea4088qs.c b/hw/bsp/ea4088qs/ea4088qs.c
index 83b2d6b1e..3d4ce0367 100644
--- a/hw/bsp/ea4088qs/ea4088qs.c
+++ b/hw/bsp/ea4088qs/ea4088qs.c
@@ -27,6 +27,23 @@
#include "chip.h"
#include "../board.h"
+//--------------------------------------------------------------------+
+// USB Interrupt Handler
+//--------------------------------------------------------------------+
+void USB_IRQHandler(void)
+{
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+ tuh_isr(0);
+ #endif
+
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
+ tud_isr(0);
+ #endif
+}
+
+//--------------------------------------------------------------------+
+// MACRO TYPEDEF CONSTANT ENUM DECLARATION
+//--------------------------------------------------------------------+
#define LED_PORT 2
#define LED_PIN 19
@@ -114,21 +131,6 @@ void board_init(void)
}
//--------------------------------------------------------------------+
-// USB Interrupt Handler
-//--------------------------------------------------------------------+
-void USB_IRQHandler(void)
-{
- #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
- tuh_isr(0);
- #endif
-
- #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
- tud_isr(0);
- #endif
-}
-
-
-//--------------------------------------------------------------------+
// Board porting API
//--------------------------------------------------------------------+
diff --git a/hw/bsp/feather_m0_express/feather_m0_express.c b/hw/bsp/feather_m0_express/feather_m0_express.c
index df81940f2..b373b829e 100644
--- a/hw/bsp/feather_m0_express/feather_m0_express.c
+++ b/hw/bsp/feather_m0_express/feather_m0_express.c
@@ -36,6 +36,14 @@
#include "hpl/pm/hpl_pm_base.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_Handler(void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 17
diff --git a/hw/bsp/feather_m4_express/feather_m4_express.c b/hw/bsp/feather_m4_express/feather_m4_express.c
index 60939c99b..be8cc810b 100644
--- a/hw/bsp/feather_m4_express/feather_m4_express.c
+++ b/hw/bsp/feather_m4_express/feather_m4_express.c
@@ -33,6 +33,29 @@
#include "hpl_mclk_config.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_0_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_1_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_2_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_3_Handler (void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 23
diff --git a/hw/bsp/feather_nrf52840_express/feather_nrf52840_express.c b/hw/bsp/feather_nrf52840_express/feather_nrf52840_express.c
index 5dc3a4c40..a790b125d 100644
--- a/hw/bsp/feather_nrf52840_express/feather_nrf52840_express.c
+++ b/hw/bsp/feather_nrf52840_express/feather_nrf52840_express.c
@@ -92,6 +92,7 @@ void board_init(void)
nrfx_uarte_init(&_uart_id, &uart_cfg, NULL); //uart_handler);
+ //------------- USB -------------//
#if TUSB_OPT_DEVICE_ENABLED
// Priorities 0, 1, 4 (nRF52) are reserved for SoftDevice
// 2 is highest for application
diff --git a/hw/bsp/itsybitsy_m0/itsybitsy_m0.c b/hw/bsp/itsybitsy_m0/itsybitsy_m0.c
index dd7d4da04..ba31493ee 100644
--- a/hw/bsp/itsybitsy_m0/itsybitsy_m0.c
+++ b/hw/bsp/itsybitsy_m0/itsybitsy_m0.c
@@ -36,6 +36,14 @@
#include "hpl/pm/hpl_pm_base.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_Handler(void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 17
diff --git a/hw/bsp/itsybitsy_m4/itsybitsy_m4.c b/hw/bsp/itsybitsy_m4/itsybitsy_m4.c
index 43432d3e3..0b9cc89e0 100644
--- a/hw/bsp/itsybitsy_m4/itsybitsy_m4.c
+++ b/hw/bsp/itsybitsy_m4/itsybitsy_m4.c
@@ -33,6 +33,29 @@
#include "hpl_mclk_config.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_0_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_1_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_2_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_3_Handler (void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 22
diff --git a/hw/bsp/metro_m0_express/metro_m0_express.c b/hw/bsp/metro_m0_express/metro_m0_express.c
index df81940f2..b373b829e 100644
--- a/hw/bsp/metro_m0_express/metro_m0_express.c
+++ b/hw/bsp/metro_m0_express/metro_m0_express.c
@@ -36,6 +36,14 @@
#include "hpl/pm/hpl_pm_base.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_Handler(void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 17
diff --git a/hw/bsp/metro_m4_express/metro_m4_express.c b/hw/bsp/metro_m4_express/metro_m4_express.c
index 11a95b408..c735fa64d 100644
--- a/hw/bsp/metro_m4_express/metro_m4_express.c
+++ b/hw/bsp/metro_m4_express/metro_m4_express.c
@@ -33,6 +33,29 @@
#include "hpl_mclk_config.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_0_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_1_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_2_Handler (void)
+{
+ tud_isr(0);
+}
+
+void USB_3_Handler (void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 16
diff --git a/hw/bsp/seeeduino_xiao/seeeduino_xiao.c b/hw/bsp/seeeduino_xiao/seeeduino_xiao.c
index a3602d66e..799c56261 100644
--- a/hw/bsp/seeeduino_xiao/seeeduino_xiao.c
+++ b/hw/bsp/seeeduino_xiao/seeeduino_xiao.c
@@ -36,6 +36,14 @@
#include "hpl/pm/hpl_pm_base.h"
//--------------------------------------------------------------------+
+// Forward USB interrupt events to TinyUSB IRQ Handler
+//--------------------------------------------------------------------+
+void USB_Handler(void)
+{
+ tud_isr(0);
+}
+
+//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
#define LED_PIN 26
diff --git a/src/device/dcd.h b/src/device/dcd.h
index 143a2de34..5e1181d1b 100644
--- a/src/device/dcd.h
+++ b/src/device/dcd.h
@@ -89,7 +89,7 @@ typedef struct TU_ATTR_ALIGNED(4)
void dcd_init (uint8_t rhport);
// Interrupt Handler
-void dcd_isr (uint8_t rhport);
+void dcd_isr (uint8_t rhport) TU_ATTR_USED;
// Enable device interrupt
void dcd_int_enable (uint8_t rhport);
diff --git a/src/portable/microchip/samd/dcd_samd.c b/src/portable/microchip/samd/dcd_samd.c
index 148995520..9f91e3f96 100644
--- a/src/portable/microchip/samd/dcd_samd.c
+++ b/src/portable/microchip/samd/dcd_samd.c
@@ -324,7 +324,7 @@ void dcd_isr (uint8_t rhport)
uint32_t int_status = USB->DEVICE.INTFLAG.reg & USB->DEVICE.INTENSET.reg;
- /*------------- Interrupt Processing -------------*/
+ // Start of Frame
if ( int_status & USB_DEVICE_INTFLAG_SOF )
{
USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_SOF;
@@ -357,6 +357,7 @@ void dcd_isr (uint8_t rhport)
dcd_event_bus_signal(0, DCD_EVENT_RESUME, true);
}
+ // Enable of Reset
if ( int_status & USB_DEVICE_INTFLAG_EORST )
{
USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_EORST;
@@ -381,55 +382,4 @@ void dcd_isr (uint8_t rhport)
maybe_transfer_complete();
}
-#if CFG_TUSB_MCU == OPT_MCU_SAMD51
-
-/*
- *------------------------------------------------------------------*/
-/* USB_EORSM_DNRSM, USB_EORST_RST, USB_LPMSUSP_DDISC, USB_LPM_DCONN,
-USB_MSOF, USB_RAMACER, USB_RXSTP_TXSTP_0, USB_RXSTP_TXSTP_1,
-USB_RXSTP_TXSTP_2, USB_RXSTP_TXSTP_3, USB_RXSTP_TXSTP_4,
-USB_RXSTP_TXSTP_5, USB_RXSTP_TXSTP_6, USB_RXSTP_TXSTP_7,
-USB_STALL0_STALL_0, USB_STALL0_STALL_1, USB_STALL0_STALL_2,
-USB_STALL0_STALL_3, USB_STALL0_STALL_4, USB_STALL0_STALL_5,
-USB_STALL0_STALL_6, USB_STALL0_STALL_7, USB_STALL1_0, USB_STALL1_1,
-USB_STALL1_2, USB_STALL1_3, USB_STALL1_4, USB_STALL1_5, USB_STALL1_6,
-USB_STALL1_7, USB_SUSPEND, USB_TRFAIL0_TRFAIL_0, USB_TRFAIL0_TRFAIL_1,
-USB_TRFAIL0_TRFAIL_2, USB_TRFAIL0_TRFAIL_3, USB_TRFAIL0_TRFAIL_4,
-USB_TRFAIL0_TRFAIL_5, USB_TRFAIL0_TRFAIL_6, USB_TRFAIL0_TRFAIL_7,
-USB_TRFAIL1_PERR_0, USB_TRFAIL1_PERR_1, USB_TRFAIL1_PERR_2,
-USB_TRFAIL1_PERR_3, USB_TRFAIL1_PERR_4, USB_TRFAIL1_PERR_5,
-USB_TRFAIL1_PERR_6, USB_TRFAIL1_PERR_7, USB_UPRSM, USB_WAKEUP */
-void USB_0_Handler(void) {
- dcd_isr(0);
-}
-
-/* USB_SOF_HSOF */
-void USB_1_Handler(void) {
- dcd_isr(0);
-}
-
-// Bank zero is for OUT and SETUP transactions.
-/* USB_TRCPT0_0, USB_TRCPT0_1, USB_TRCPT0_2,
-USB_TRCPT0_3, USB_TRCPT0_4, USB_TRCPT0_5,
-USB_TRCPT0_6, USB_TRCPT0_7 */
-void USB_2_Handler(void) {
- dcd_isr(0);
-}
-
-// Bank one is used for IN transactions.
-/* USB_TRCPT1_0, USB_TRCPT1_1, USB_TRCPT1_2,
-USB_TRCPT1_3, USB_TRCPT1_4, USB_TRCPT1_5,
-USB_TRCPT1_6, USB_TRCPT1_7 */
-void USB_3_Handler(void) {
- dcd_isr(0);
-}
-
-#elif CFG_TUSB_MCU == OPT_MCU_SAMD21
-
-void USB_Handler(void) {
- dcd_isr(0);
-}
-
-#endif
-
#endif