This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 9f4f9e704 tinyusb: Enable USB for STM32H7
9f4f9e704 is described below

commit 9f4f9e70406305a8745dd4c35c5c16c8ff1e5bb8
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Wed Mar 6 13:53:29 2024 +0100

    tinyusb: Enable USB for STM32H7
    
    STM32H7 uses same USB hardware block but requires
    enabling voltage detector to work.
    
    This slightly reworks code to work on all synopsys
    bases devices.
    
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 hw/usb/tinyusb/pkg.yml                    |  2 ++
 hw/usb/tinyusb/synopsys/include/tusb_hw.h |  2 ++
 hw/usb/tinyusb/synopsys/src/synopsys.c    | 48 ++++++++++++++++++++++---------
 3 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/hw/usb/tinyusb/pkg.yml b/hw/usb/tinyusb/pkg.yml
index 187deead1..df9554700 100644
--- a/hw/usb/tinyusb/pkg.yml
+++ b/hw/usb/tinyusb/pkg.yml
@@ -46,6 +46,8 @@ pkg.deps.'MCU_TARGET == "nRF5340_APP"':
     - "@apache-mynewt-core/hw/usb/tinyusb/nrf53"
 pkg.deps.MCU_STM32F4:
     - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
+pkg.deps.MCU_STM32H7:
+    - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
 pkg.deps.MCU_STM32F7:
     - "@apache-mynewt-core/hw/usb/tinyusb/synopsys"
 pkg.deps.MCU_STM32L4:
diff --git a/hw/usb/tinyusb/synopsys/include/tusb_hw.h 
b/hw/usb/tinyusb/synopsys/include/tusb_hw.h
index b54bb2a80..9b136122c 100755
--- a/hw/usb/tinyusb/synopsys/include/tusb_hw.h
+++ b/hw/usb/tinyusb/synopsys/include/tusb_hw.h
@@ -32,6 +32,8 @@
 #define CFG_TUSB_MCU OPT_MCU_STM32F4
 #elif MYNEWT_VAL(MCU_STM32F7)
 #define CFG_TUSB_MCU OPT_MCU_STM32F7
+#elif MYNEWT_VAL(MCU_STM32H7)
+#define CFG_TUSB_MCU OPT_MCU_STM32H7
 #elif MYNEWT_VAL(MCU_STM32L4)
 #define CFG_TUSB_MCU OPT_MCU_STM32L4
 #elif MYNEWT_VAL(MCU_STM32U5)
diff --git a/hw/usb/tinyusb/synopsys/src/synopsys.c 
b/hw/usb/tinyusb/synopsys/src/synopsys.c
index bca255082..c7f4db5a4 100755
--- a/hw/usb/tinyusb/synopsys/src/synopsys.c
+++ b/hw/usb/tinyusb/synopsys/src/synopsys.c
@@ -24,6 +24,7 @@
 
 #include <mcu/stm32_hal.h>
 
+#if defined(USB_OTG_FS)
 #if defined(STM32U5)
 #define GPIO_AF_USB GPIO_AF10_USB
 #else
@@ -36,13 +37,31 @@ OTG_FS_IRQHandler(void)
     /* TinyUSB provides interrupt handler code */
     tud_int_handler(0);
 }
+#define USB_OTG                 USB_OTG_FS
+#define USB_OTG_CLK_ENABLE      __HAL_RCC_USB_OTG_FS_CLK_ENABLE
+#elif defined(USB_OTG_HS)
+static void
+OTG_HS_IRQHandler(void)
+{
+    /* TinyUSB provides interrupt handler code */
+    tud_int_handler(0);
+}
+#define USB_OTG                 USB_OTG_HS
+#define USB_OTG_CLK_ENABLE      __HAL_RCC_USB_OTG_HS_CLK_ENABLE
+#define GPIO_AF10_OTG_FS        GPIO_AF10_OTG1_FS
+#define GPIO_AF_USB             GPIO_AF10_OTG_FS
+#endif
 
 void
 tinyusb_hardware_init(void)
 {
+#if defined(USB_OTG_FS)
     NVIC_SetVector(OTG_FS_IRQn, (uint32_t)OTG_FS_IRQHandler);
     NVIC_SetPriority(OTG_FS_IRQn, 2);
-
+#elif defined(USB_OTG_HS)
+    NVIC_SetVector(OTG_HS_IRQn, (uint32_t)OTG_HS_IRQHandler);
+    NVIC_SetPriority(OTG_HS_IRQn, 2);
+#endif
     /*
      * USB Pin Init
      * PA11- DM, PA12- DP
@@ -58,28 +77,31 @@ tinyusb_hardware_init(void)
 #endif
     hal_gpio_init_af(MCU_GPIO_PORTA(12), GPIO_AF_USB, GPIO_NOPULL, 
GPIO_MODE_AF_PP);
 
+#if MYNEWT_VAL(MCU_STM32H7)
+    HAL_PWREx_EnableUSBVoltageDetector();
+#endif
     /*
      * Enable USB OTG clock, force device mode
      */
-    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+    USB_OTG_CLK_ENABLE();
 
 #if MYNEWT_VAL(USB_ID_PIN_ENABLE)
     hal_gpio_init_af(MCU_GPIO_PORTA(10), GPIO_AF_USB, GPIO_PULLUP, 
GPIO_MODE_AF_OD);
 #else
-    USB_OTG_FS->GUSBCFG &= ~USB_OTG_GUSBCFG_FHMOD;
-    USB_OTG_FS->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD;
+    USB_OTG->GUSBCFG &= ~USB_OTG_GUSBCFG_FHMOD;
+    USB_OTG->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD;
 #endif
 
 #ifdef USB_OTG_GCCFG_NOVBUSSENS
 #if !MYNEWT_VAL(USB_VBUS_DETECTION_ENABLE)
     /* PA9- VUSB not used for USB */
-    USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
-    USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN;
-    USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN;
+    USB_OTG->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN;
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN;
 #else
-    USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS;
-    USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN;
-    USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSASEN;
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_NOVBUSSENS;
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN;
+    USB_OTG->GCCFG |= USB_OTG_GCCFG_VBUSASEN;
     hal_gpio_init_in(MCU_GPIO_PORTA(9), HAL_GPIO_PULL_NONE);
 #endif
 #elif USB_OTG_GCCFG_VBDEN
@@ -88,10 +110,10 @@ tinyusb_hardware_init(void)
     USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBDEN;
 #else
     /* PA9- VUSB not used for USB */
-    USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
+    USB_OTG->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
     /* B-peripheral session valid override enable */
-    USB_OTG_FS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
-    USB_OTG_FS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
+    USB_OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
+    USB_OTG->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
 #endif
 #endif
 

Reply via email to