From 9014ca55284d755d15c39cd4f721ee60ac239c40 Mon Sep 17 00:00:00 2001 From: hathach Date: Wed, 8 Apr 2020 16:26:14 +0700 Subject: [PATCH] move irq for stm32 fsdev --- hw/bsp/adafruit_clue/adafruit_clue.c | 7 +-- hw/bsp/stm32f070rbnucleo/stm32f070rbnucleo.c | 14 ++++- hw/bsp/stm32f072disco/stm32f072disco.c | 12 +++- hw/bsp/stm32f103bluepill/stm32f103bluepill.c | 22 +++++++- hw/bsp/stm32f303disco/stm32f303disco.c | 34 ++++++++++- hw/bsp/stm32l0538disco/stm32l0538disco.c | 12 +++- src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c | 56 +------------------ 7 files changed, 93 insertions(+), 64 deletions(-) diff --git a/hw/bsp/adafruit_clue/adafruit_clue.c b/hw/bsp/adafruit_clue/adafruit_clue.c index 7b090dd4..54b822fc 100644 --- a/hw/bsp/adafruit_clue/adafruit_clue.c +++ b/hw/bsp/adafruit_clue/adafruit_clue.c @@ -43,10 +43,9 @@ void USBD_IRQHandler(void) tud_irq_handler(0); } - -/*------------------------------------------------------------------*/ -/* MACRO TYPEDEF CONSTANT ENUM - *------------------------------------------------------------------*/ +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ #define _PINNUM(port, pin) ((port)*32 + (pin)) #define LED_PIN _PINNUM(1, 1) diff --git a/hw/bsp/stm32f070rbnucleo/stm32f070rbnucleo.c b/hw/bsp/stm32f070rbnucleo/stm32f070rbnucleo.c index b4d97aff..132da8ae 100644 --- a/hw/bsp/stm32f070rbnucleo/stm32f070rbnucleo.c +++ b/hw/bsp/stm32f070rbnucleo/stm32f070rbnucleo.c @@ -25,9 +25,19 @@ */ #include "../board.h" - #include "stm32f0xx_hal.h" +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void USB_IRQHandler(void) +{ + tud_irq_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ #define LED_PORT GPIOA #define LED_PIN GPIO_PIN_5 #define LED_STATE_ON 1 @@ -56,8 +66,6 @@ static void all_rcc_clk_enable(void) void board_init(void) { - - /* Configure the system clock to 48 MHz */ RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; diff --git a/hw/bsp/stm32f072disco/stm32f072disco.c b/hw/bsp/stm32f072disco/stm32f072disco.c index 7128eb4d..9a3a354e 100644 --- a/hw/bsp/stm32f072disco/stm32f072disco.c +++ b/hw/bsp/stm32f072disco/stm32f072disco.c @@ -25,9 +25,19 @@ */ #include "../board.h" - #include "stm32f0xx_hal.h" +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void USB_IRQHandler(void) +{ + tud_irq_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ #define LED_PORT GPIOC #define LED_PIN GPIO_PIN_6 #define LED_STATE_ON 1 diff --git a/hw/bsp/stm32f103bluepill/stm32f103bluepill.c b/hw/bsp/stm32f103bluepill/stm32f103bluepill.c index e68bdd1b..dbb58032 100644 --- a/hw/bsp/stm32f103bluepill/stm32f103bluepill.c +++ b/hw/bsp/stm32f103bluepill/stm32f103bluepill.c @@ -25,9 +25,29 @@ */ #include "../board.h" - #include "stm32f1xx_hal.h" +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void USB_HP_IRQHandler(void) +{ + tud_irq_handler(0); +} + +void USB_LP_IRQHandler(void) +{ + tud_irq_handler(0); +} + +void USBWakeUp_IRQHandler(void) +{ + tud_irq_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ #define LED_PORT GPIOC #define LED_PIN GPIO_PIN_13 #define LED_STATE_ON 0 diff --git a/hw/bsp/stm32f303disco/stm32f303disco.c b/hw/bsp/stm32f303disco/stm32f303disco.c index 44a342e0..444472a7 100644 --- a/hw/bsp/stm32f303disco/stm32f303disco.c +++ b/hw/bsp/stm32f303disco/stm32f303disco.c @@ -25,9 +25,41 @@ */ #include "../board.h" - #include "stm32f3xx_hal.h" +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ + +// USB defaults to using interrupts 19, 20, and 42 (based on SYSCFG_CFGR1.USB_IT_RMP) +// FIXME: Do all three need to be handled, or just the LP one? +// USB high-priority interrupt (Channel 19): Triggered only by a correct +// transfer event for isochronous and double-buffer bulk transfer to reach +// the highest possible transfer rate. +void USB_HP_CAN_TX_IRQHandler(void) +{ + tud_irq_handler(0); +} + +// USB low-priority interrupt (Channel 20): Triggered by all USB events +// (Correct transfer, USB reset, etc.). The firmware has to check the +// interrupt source before serving the interrupt. +void USB_LP_CAN_RX0_IRQHandler(void) +{ + tud_irq_handler(0); +} + +// USB wakeup interrupt (Channel 42): Triggered by the wakeup event from the USB +// Suspend mode. +void USBWakeUp_IRQHandler(void) +{ + tud_irq_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ + #define LED_PORT GPIOE #define LED_PIN GPIO_PIN_9 #define LED_STATE_ON 1 diff --git a/hw/bsp/stm32l0538disco/stm32l0538disco.c b/hw/bsp/stm32l0538disco/stm32l0538disco.c index 2d9b4995..0bfb1f84 100644 --- a/hw/bsp/stm32l0538disco/stm32l0538disco.c +++ b/hw/bsp/stm32l0538disco/stm32l0538disco.c @@ -25,9 +25,19 @@ */ #include "../board.h" - #include "stm32l0xx_hal.h" +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void USB_IRQHandler(void) +{ + tud_irq_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ #define LED_PORT GPIOA #define LED_PIN GPIO_PIN_5 #define LED_STATE_ON 1 diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c index f962a4be..21cd4439 100644 --- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c +++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c @@ -489,7 +489,9 @@ static void dcd_ep_ctr_handler(void) } } -static void dcd_fs_irqHandler(void) { +void dcd_irq_handler(uint8_t rhport) { + + (void) rhport; uint32_t int_status = USB->ISTR; //const uint32_t handled_ints = USB_ISTR_CTR | USB_ISTR_RESET | USB_ISTR_WKUP @@ -804,57 +806,5 @@ static bool dcd_read_packet_memory(void *__restrict dst, uint16_t src, size_t wN return true; } - -// Interrupt handlers -#if CFG_TUSB_MCU == OPT_MCU_STM32F0 || CFG_TUSB_MCU == OPT_MCU_STM32L0 -void USB_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} - -#elif CFG_TUSB_MCU == OPT_MCU_STM32F1 -void USB_HP_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} -void USB_LP_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} -void USBWakeUp_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} - -#elif (CFG_TUSB_MCU) == (OPT_MCU_STM32F3) -// USB defaults to using interrupts 19, 20, and 42 (based on SYSCFG_CFGR1.USB_IT_RMP) -// FIXME: Do all three need to be handled, or just the LP one? -// USB high-priority interrupt (Channel 19): Triggered only by a correct -// transfer event for isochronous and double-buffer bulk transfer to reach -// the highest possible transfer rate. -void USB_HP_CAN_TX_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} - -// USB low-priority interrupt (Channel 20): Triggered by all USB events -// (Correct transfer, USB reset, etc.). The firmware has to check the -// interrupt source before serving the interrupt. -void USB_LP_CAN_RX0_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} - -// USB wakeup interrupt (Channel 42): Triggered by the wakeup event from the USB -// Suspend mode. -void USBWakeUp_IRQHandler(void) -{ - dcd_fs_irqHandler(); -} - -#else - #error Which IRQ handler do you need? -#endif - #endif