mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
commit
c04006bc13
1
.github/workflows/build_arm.yml
vendored
1
.github/workflows/build_arm.yml
vendored
@ -57,6 +57,7 @@ jobs:
|
|||||||
- 'stm32f7'
|
- 'stm32f7'
|
||||||
- 'stm32h7'
|
- 'stm32h7'
|
||||||
- 'stm32l4'
|
- 'stm32l4'
|
||||||
|
- 'xmc4000'
|
||||||
steps:
|
steps:
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -131,3 +131,6 @@
|
|||||||
path = hw/mcu/broadcom
|
path = hw/mcu/broadcom
|
||||||
url = https://github.com/adafruit/broadcom-peripherals.git
|
url = https://github.com/adafruit/broadcom-peripherals.git
|
||||||
branch = main-build
|
branch = main-build
|
||||||
|
[submodule "hw/mcu/infineon/mtb-xmclib-cat3"]
|
||||||
|
path = hw/mcu/infineon/mtb-xmclib-cat3
|
||||||
|
url = https://github.com/Infineon/mtb-xmclib-cat3.git
|
||||||
|
@ -34,6 +34,7 @@ The stack supports the following MCUs:
|
|||||||
|
|
||||||
- **Dialog:** DA1469x
|
- **Dialog:** DA1469x
|
||||||
- **Espressif:** ESP32-S2, ESP32-S3
|
- **Espressif:** ESP32-S2, ESP32-S3
|
||||||
|
- **Infineon:** XMC4500
|
||||||
- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x
|
- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x
|
||||||
- **NordicSemi:** nRF52833, nRF52840, nRF5340
|
- **NordicSemi:** nRF52833, nRF52840, nRF5340
|
||||||
- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
|
- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
|
||||||
|
@ -149,6 +149,14 @@ Espressif ESP32-S2
|
|||||||
- `ESP32-S2-Kaluga-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html>`__
|
- `ESP32-S2-Kaluga-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html>`__
|
||||||
- `ESP32-S2-Saola-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html>`__
|
- `ESP32-S2-Saola-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html>`__
|
||||||
|
|
||||||
|
Infineon
|
||||||
|
---------
|
||||||
|
|
||||||
|
XMC4000
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
- `XMC4500 Relax (Lite) Kit <https://www.infineon.com/cms/en/product/evaluation-boards/kit_xmc45_relax_lite_v1/>`__
|
||||||
|
|
||||||
MicroChip
|
MicroChip
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ enum {
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
board_init();
|
board_init();
|
||||||
|
board_led_write(true);
|
||||||
|
|
||||||
uint32_t start_ms = 0;
|
uint32_t start_ms = 0;
|
||||||
bool led_state = false;
|
bool led_state = false;
|
||||||
|
@ -136,6 +136,10 @@
|
|||||||
|
|
||||||
#elif CFG_TUSB_MCU == OPT_MCU_MM32F327X
|
#elif CFG_TUSB_MCU == OPT_MCU_MM32F327X
|
||||||
#include "mm32_device.h"
|
#include "mm32_device.h"
|
||||||
|
|
||||||
|
#elif CFG_TUSB_MCU == OPT_MCU_XMC4000
|
||||||
|
#include "xmc_device.h"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "Missing MCU header"
|
#error "Missing MCU header"
|
||||||
#endif
|
#endif
|
||||||
|
@ -76,6 +76,8 @@ static inline void board_clock_init(void)
|
|||||||
RCC_OscInitStruct.PLL.PLLQ = 9;
|
RCC_OscInitStruct.PLL.PLLQ = 9;
|
||||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
|
||||||
|
// TODO need to enable usb clock source
|
||||||
|
|
||||||
/* Activate the OverDrive to reach the 216 MHz Frequency */
|
/* Activate the OverDrive to reach the 216 MHz Frequency */
|
||||||
HAL_PWREx_EnableOverDrive();
|
HAL_PWREx_EnableOverDrive();
|
||||||
|
|
||||||
|
190
hw/bsp/stm32g4/boards/stm32g474nucleo/STM32G474RETx_FLASH.ld
Normal file
190
hw/bsp/stm32g4/boards/stm32g474nucleo/STM32G474RETx_FLASH.ld
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
******************************************************************************
|
||||||
|
**
|
||||||
|
|
||||||
|
** File : LinkerScript.ld
|
||||||
|
**
|
||||||
|
** Author : Auto-generated by Ac6 System Workbench
|
||||||
|
**
|
||||||
|
** Abstract : Linker script for STM32G474RETx series
|
||||||
|
** 512Kbytes FLASH and 160Kbytes RAM
|
||||||
|
**
|
||||||
|
** Set heap size, stack size and stack location according
|
||||||
|
** to application requirements.
|
||||||
|
**
|
||||||
|
** Set memory bank area and size if external memory is used.
|
||||||
|
**
|
||||||
|
** Target : STMicroelectronics STM32
|
||||||
|
**
|
||||||
|
** Distribution: The file is distributed <20>as is,<2C> without any warranty
|
||||||
|
** of any kind.
|
||||||
|
**
|
||||||
|
*****************************************************************************
|
||||||
|
** @attention
|
||||||
|
**
|
||||||
|
** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
** are permitted provided that the following conditions are met:
|
||||||
|
** 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
** this list of conditions and the following disclaimer in the documentation
|
||||||
|
** and/or other materials provided with the distribution.
|
||||||
|
** 3. Neither the name of Ac6 nor the names of its contributors
|
||||||
|
** may be used to endorse or promote products derived from this software
|
||||||
|
** without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**
|
||||||
|
*****************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Entry Point */
|
||||||
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
|
/* Highest address of the user mode stack */
|
||||||
|
_estack = 0x20020000; /* end of RAM */
|
||||||
|
/* Generate a link error if heap and stack don't fit into RAM */
|
||||||
|
_Min_Heap_Size = 0x200; /* required amount of heap */
|
||||||
|
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||||
|
|
||||||
|
/* Specify the memory areas */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
|
||||||
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
|
||||||
|
CCMSRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 32K
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Define output sections */
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* The startup code goes first into FLASH */
|
||||||
|
.isr_vector :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
KEEP(*(.isr_vector)) /* Startup code */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* The program code and other data goes into FLASH */
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.text) /* .text sections (code) */
|
||||||
|
*(.text*) /* .text* sections (code) */
|
||||||
|
*(.glue_7) /* glue arm to thumb code */
|
||||||
|
*(.glue_7t) /* glue thumb to arm code */
|
||||||
|
*(.eh_frame)
|
||||||
|
|
||||||
|
KEEP (*(.init))
|
||||||
|
KEEP (*(.fini))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_etext = .; /* define a global symbols at end of code */
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* Constant data goes into FLASH */
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||||
|
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
|
||||||
|
.ARM : {
|
||||||
|
__exidx_start = .;
|
||||||
|
*(.ARM.exidx*)
|
||||||
|
__exidx_end = .;
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
.preinit_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array*))
|
||||||
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
.init_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__init_array_start = .);
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array*))
|
||||||
|
PROVIDE_HIDDEN (__init_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
.fini_array :
|
||||||
|
{
|
||||||
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||||
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
|
KEEP (*(.fini_array*))
|
||||||
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||||
|
} >FLASH
|
||||||
|
|
||||||
|
/* used by the startup to initialize data */
|
||||||
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
|
/* Initialized data sections goes into RAM, load LMA copy after code */
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
. = ALIGN(4);
|
||||||
|
_sdata = .; /* create a global symbol at data start */
|
||||||
|
*(.data) /* .data sections */
|
||||||
|
*(.data*) /* .data* sections */
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_edata = .; /* define a global symbol at data end */
|
||||||
|
} >RAM AT> FLASH
|
||||||
|
|
||||||
|
|
||||||
|
/* Uninitialized data section */
|
||||||
|
. = ALIGN(4);
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
/* This is used by the startup in order to initialize the .bss secion */
|
||||||
|
_sbss = .; /* define a global symbol at bss start */
|
||||||
|
__bss_start__ = _sbss;
|
||||||
|
*(.bss)
|
||||||
|
*(.bss*)
|
||||||
|
*(COMMON)
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_ebss = .; /* define a global symbol at bss end */
|
||||||
|
__bss_end__ = _ebss;
|
||||||
|
} >RAM
|
||||||
|
|
||||||
|
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||||
|
._user_heap_stack :
|
||||||
|
{
|
||||||
|
. = ALIGN(8);
|
||||||
|
PROVIDE ( end = . );
|
||||||
|
PROVIDE ( _end = . );
|
||||||
|
. = . + _Min_Heap_Size;
|
||||||
|
. = . + _Min_Stack_Size;
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >RAM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Remove information from the standard libraries */
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
libc.a ( * )
|
||||||
|
libm.a ( * )
|
||||||
|
libgcc.a ( * )
|
||||||
|
}
|
||||||
|
|
||||||
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
130
hw/bsp/stm32g4/boards/stm32g474nucleo/board.h
Normal file
130
hw/bsp/stm32g4/boards/stm32g474nucleo/board.h
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020, Ha Thach (tinyusb.org)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOARD_H_
|
||||||
|
#define BOARD_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// G474RE Nucleo does not has usb connection. We need to manually connect
|
||||||
|
// - PA11 for D+, CN10.14
|
||||||
|
// - PA12 for D-, CN10.12
|
||||||
|
|
||||||
|
// LED
|
||||||
|
#define LED_PORT GPIOA
|
||||||
|
#define LED_PIN GPIO_PIN_5
|
||||||
|
#define LED_STATE_ON 0
|
||||||
|
|
||||||
|
// Button
|
||||||
|
#define BUTTON_PORT GPIOC
|
||||||
|
#define BUTTON_PIN GPIO_PIN_13
|
||||||
|
#define BUTTON_STATE_ACTIVE 1
|
||||||
|
|
||||||
|
// UART Enable for STLink VCOM
|
||||||
|
#define UART_DEV LPUART1
|
||||||
|
#define UART_CLK_EN __HAL_RCC_LPUART1_CLK_ENABLE
|
||||||
|
#define UART_GPIO_PORT GPIOA
|
||||||
|
#define UART_GPIO_AF GPIO_AF12_LPUART1
|
||||||
|
#define UART_TX_PIN GPIO_PIN_2
|
||||||
|
#define UART_RX_PIN GPIO_PIN_3
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// RCC Clock
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
static inline void board_clock_init(void)
|
||||||
|
{
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
|
||||||
|
// Configure the main internal regulator output voltage
|
||||||
|
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
|
||||||
|
|
||||||
|
// Initializes the CPU, AHB and APB busses clocks
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
||||||
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||||
|
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
||||||
|
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;
|
||||||
|
RCC_OscInitStruct.PLL.PLLN = 85;
|
||||||
|
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
||||||
|
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
|
||||||
|
// Initializes the CPU, AHB and APB busses clocks
|
||||||
|
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
|
||||||
|
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_8);
|
||||||
|
|
||||||
|
#if 0 // TODO need to check if USB clock is enabled
|
||||||
|
/* Enable HSI48 */
|
||||||
|
memset(&RCC_OscInitStruct, 0, sizeof(RCC_OscInitStruct));
|
||||||
|
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
|
||||||
|
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
|
||||||
|
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
|
||||||
|
/*Enable CRS Clock*/
|
||||||
|
RCC_CRSInitTypeDef RCC_CRSInitStruct= {0};
|
||||||
|
__HAL_RCC_CRS_CLK_ENABLE();
|
||||||
|
|
||||||
|
/* Default Synchro Signal division factor (not divided) */
|
||||||
|
RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
|
||||||
|
|
||||||
|
/* Set the SYNCSRC[1:0] bits according to CRS_Source value */
|
||||||
|
RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
|
||||||
|
|
||||||
|
/* HSI48 is synchronized with USB SOF at 1KHz rate */
|
||||||
|
RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000, 1000);
|
||||||
|
RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
|
||||||
|
|
||||||
|
/* Set the TRIM[5:0] to the default value */
|
||||||
|
RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
|
||||||
|
|
||||||
|
/* Start automatic synchronization */
|
||||||
|
HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void board_vbus_sense_init(void)
|
||||||
|
{
|
||||||
|
// Enable VBUS sense (B device) via pin PA9
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* BOARD_H_ */
|
8
hw/bsp/stm32g4/boards/stm32g474nucleo/board.mk
Normal file
8
hw/bsp/stm32g4/boards/stm32g474nucleo/board.mk
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
CFLAGS += -DSTM32G474xx
|
||||||
|
|
||||||
|
LD_FILE = $(BOARD_PATH)/STM32G474RETx_FLASH.ld
|
||||||
|
|
||||||
|
SRC_S += $(ST_CMSIS)/Source/Templates/gcc/startup_stm32g474xx.s
|
||||||
|
|
||||||
|
# For flash-jlink target
|
||||||
|
JLINK_DEVICE = stm32g474re
|
186
hw/bsp/stm32g4/family.c
Normal file
186
hw/bsp/stm32g4/family.c
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Ha Thach (tinyusb.org)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stm32g4xx_hal.h"
|
||||||
|
#include "bsp/board.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Forward USB interrupt events to TinyUSB IRQ Handler
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void USB_HP_IRQHandler(void)
|
||||||
|
{
|
||||||
|
tud_int_handler(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void USB_LP_IRQHandler(void)
|
||||||
|
{
|
||||||
|
tud_int_handler(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void USBWakeUp_IRQHandler(void)
|
||||||
|
{
|
||||||
|
tud_int_handler(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// MACRO TYPEDEF CONSTANT ENUM
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
UART_HandleTypeDef UartHandle;
|
||||||
|
|
||||||
|
void board_init(void)
|
||||||
|
{
|
||||||
|
board_clock_init();
|
||||||
|
|
||||||
|
// Enable All GPIOs clocks
|
||||||
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
|
__HAL_RCC_GPIOG_CLK_ENABLE();
|
||||||
|
|
||||||
|
UART_CLK_EN();
|
||||||
|
|
||||||
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
|
// 1ms tick timer
|
||||||
|
SysTick_Config(SystemCoreClock / 1000);
|
||||||
|
#elif CFG_TUSB_OS == OPT_OS_FREERTOS
|
||||||
|
// Explicitly disable systick to prevent its ISR runs before scheduler start
|
||||||
|
SysTick->CTRL &= ~1U;
|
||||||
|
|
||||||
|
// If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
|
||||||
|
NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
|
|
||||||
|
// LED
|
||||||
|
GPIO_InitStruct.Pin = LED_PIN;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
board_led_write(false);
|
||||||
|
|
||||||
|
// Button
|
||||||
|
GPIO_InitStruct.Pin = BUTTON_PIN;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
GPIO_InitStruct.Pull = BUTTON_STATE_ACTIVE ? GPIO_PULLDOWN : GPIO_PULLUP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
#ifdef UART_DEV
|
||||||
|
// UART
|
||||||
|
GPIO_InitStruct.Pin = UART_TX_PIN | UART_RX_PIN;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
GPIO_InitStruct.Alternate = UART_GPIO_AF;
|
||||||
|
HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
UartHandle = (UART_HandleTypeDef){
|
||||||
|
.Instance = UART_DEV,
|
||||||
|
.Init.BaudRate = CFG_BOARD_UART_BAUDRATE,
|
||||||
|
.Init.WordLength = UART_WORDLENGTH_8B,
|
||||||
|
.Init.StopBits = UART_STOPBITS_1,
|
||||||
|
.Init.Parity = UART_PARITY_NONE,
|
||||||
|
.Init.HwFlowCtl = UART_HWCONTROL_NONE,
|
||||||
|
.Init.Mode = UART_MODE_TX_RX,
|
||||||
|
.Init.OverSampling = UART_OVERSAMPLING_16
|
||||||
|
};
|
||||||
|
HAL_UART_Init(&UartHandle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// USB Pins TODO double check USB clock and pin setup
|
||||||
|
// Configure USB DM and DP pins. This is optional, and maintained only for user guidance.
|
||||||
|
// GPIO_InitStruct.Pin = (GPIO_PIN_11 | GPIO_PIN_12);
|
||||||
|
// GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
|
// GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
// GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
// HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
//
|
||||||
|
// __HAL_RCC_USB_CLK_ENABLE();
|
||||||
|
|
||||||
|
board_vbus_sense_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Board porting API
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
void board_led_write(bool state)
|
||||||
|
{
|
||||||
|
HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_button_read(void)
|
||||||
|
{
|
||||||
|
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_uart_read(uint8_t* buf, int len)
|
||||||
|
{
|
||||||
|
(void) buf; (void) len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_uart_write(void const * buf, int len)
|
||||||
|
{
|
||||||
|
#ifdef UART_DEV
|
||||||
|
HAL_UART_Transmit(&UartHandle, (uint8_t*)(uintptr_t) buf, len, 0xffff);
|
||||||
|
return len;
|
||||||
|
#else
|
||||||
|
(void) buf; (void) len; (void) UartHandle;
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
|
volatile uint32_t system_ticks = 0;
|
||||||
|
void SysTick_Handler (void)
|
||||||
|
{
|
||||||
|
system_ticks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_millis(void)
|
||||||
|
{
|
||||||
|
return system_ticks;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void HardFault_Handler (void)
|
||||||
|
{
|
||||||
|
asm("bkpt");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Required by __libc_init_array in startup code if we are compiling using
|
||||||
|
// -nostdlib/-nostartfiles.
|
||||||
|
void _init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
44
hw/bsp/stm32g4/family.mk
Normal file
44
hw/bsp/stm32g4/family.mk
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
UF2_FAMILY_ID = 0x4c71240a
|
||||||
|
ST_FAMILY = g4
|
||||||
|
DEPS_SUBMODULES += lib/CMSIS_5 hw/mcu/st/cmsis_device_$(ST_FAMILY) hw/mcu/st/stm32$(ST_FAMILY)xx_hal_driver
|
||||||
|
|
||||||
|
ST_CMSIS = hw/mcu/st/cmsis_device_$(ST_FAMILY)
|
||||||
|
ST_HAL_DRIVER = hw/mcu/st/stm32$(ST_FAMILY)xx_hal_driver
|
||||||
|
|
||||||
|
include $(TOP)/$(BOARD_PATH)/board.mk
|
||||||
|
|
||||||
|
CFLAGS += \
|
||||||
|
-flto \
|
||||||
|
-mthumb \
|
||||||
|
-mabi=aapcs \
|
||||||
|
-mcpu=cortex-m4 \
|
||||||
|
-mfloat-abi=hard \
|
||||||
|
-mfpu=fpv4-sp-d16 \
|
||||||
|
-nostdlib -nostartfiles \
|
||||||
|
-DCFG_TUSB_MCU=OPT_MCU_STM32G4
|
||||||
|
|
||||||
|
# suppress warning caused by vendor mcu driver
|
||||||
|
CFLAGS += -Wno-error=cast-align
|
||||||
|
|
||||||
|
SRC_C += \
|
||||||
|
src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c \
|
||||||
|
$(ST_CMSIS)/Source/Templates/system_stm32$(ST_FAMILY)xx.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_cortex.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_pwr_ex.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_rcc.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_rcc_ex.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_uart.c \
|
||||||
|
$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_gpio.c
|
||||||
|
|
||||||
|
INC += \
|
||||||
|
$(TOP)/$(BOARD_PATH) \
|
||||||
|
$(TOP)/lib/CMSIS_5/CMSIS/Core/Include \
|
||||||
|
$(TOP)/$(ST_CMSIS)/Include \
|
||||||
|
$(TOP)/$(ST_HAL_DRIVER)/Inc
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORT = ARM_CM4F
|
||||||
|
|
||||||
|
# flash target using on-board stlink
|
||||||
|
flash: flash-stlink
|
381
hw/bsp/stm32g4/stm32g4xx_hal_conf.h
Normal file
381
hw/bsp/stm32g4/stm32g4xx_hal_conf.h
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32g4xx_hal_conf.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief HAL configuration file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||||||
|
* the "License"; You may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at:
|
||||||
|
* opensource.org/licenses/BSD-3-Clause
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef STM32G4xx_HAL_CONF_H
|
||||||
|
#define STM32G4xx_HAL_CONF_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ########################## Module Selection ############################## */
|
||||||
|
/**
|
||||||
|
* @brief This is the list of modules to be used in the HAL driver
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HAL_MODULE_ENABLED
|
||||||
|
|
||||||
|
/*#define HAL_ADC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_COMP_MODULE_ENABLED */
|
||||||
|
/*#define HAL_CORDIC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_CRC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_CRYP_MODULE_ENABLED */
|
||||||
|
/*#define HAL_DAC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_FDCAN_MODULE_ENABLED */
|
||||||
|
/*#define HAL_FMAC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_HRTIM_MODULE_ENABLED */
|
||||||
|
/*#define HAL_IRDA_MODULE_ENABLED */
|
||||||
|
/*#define HAL_IWDG_MODULE_ENABLED */
|
||||||
|
/*#define HAL_I2C_MODULE_ENABLED */
|
||||||
|
/*#define HAL_I2S_MODULE_ENABLED */
|
||||||
|
/*#define HAL_LPTIM_MODULE_ENABLED */
|
||||||
|
/*#define HAL_NAND_MODULE_ENABLED */
|
||||||
|
/*#define HAL_NOR_MODULE_ENABLED */
|
||||||
|
/*#define HAL_OPAMP_MODULE_ENABLED */
|
||||||
|
/*#define HAL_PCD_MODULE_ENABLED */
|
||||||
|
/*#define HAL_QSPI_MODULE_ENABLED */
|
||||||
|
/*#define HAL_RNG_MODULE_ENABLED */
|
||||||
|
/*#define HAL_RTC_MODULE_ENABLED */
|
||||||
|
/*#define HAL_SAI_MODULE_ENABLED */
|
||||||
|
/*#define HAL_SMARTCARD_MODULE_ENABLED */
|
||||||
|
/*#define HAL_SMBUS_MODULE_ENABLED */
|
||||||
|
/*#define HAL_SPI_MODULE_ENABLED */
|
||||||
|
/*#define HAL_SRAM_MODULE_ENABLED */
|
||||||
|
/*#define HAL_TIM_MODULE_ENABLED */
|
||||||
|
#define HAL_UART_MODULE_ENABLED
|
||||||
|
/*#define HAL_USART_MODULE_ENABLED */
|
||||||
|
/*#define HAL_WWDG_MODULE_ENABLED */
|
||||||
|
#define HAL_GPIO_MODULE_ENABLED
|
||||||
|
#define HAL_EXTI_MODULE_ENABLED
|
||||||
|
#define HAL_DMA_MODULE_ENABLED
|
||||||
|
#define HAL_RCC_MODULE_ENABLED
|
||||||
|
#define HAL_FLASH_MODULE_ENABLED
|
||||||
|
#define HAL_PWR_MODULE_ENABLED
|
||||||
|
#define HAL_CORTEX_MODULE_ENABLED
|
||||||
|
|
||||||
|
/* ########################## Register Callbacks selection ############################## */
|
||||||
|
/**
|
||||||
|
* @brief This is the list of modules where register callback can be used
|
||||||
|
*/
|
||||||
|
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_COMP_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_EXTI_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_RNG_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_SAI_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_UART_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_USART_REGISTER_CALLBACKS 0U
|
||||||
|
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U
|
||||||
|
|
||||||
|
/* ########################## Oscillator Values adaptation ####################*/
|
||||||
|
/**
|
||||||
|
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
|
||||||
|
* This value is used by the RCC HAL module to compute the system frequency
|
||||||
|
* (when HSE is used as system clock source, directly or through the PLL).
|
||||||
|
*/
|
||||||
|
#if !defined (HSE_VALUE)
|
||||||
|
#define HSE_VALUE (24000000UL) /*!< Value of the External oscillator in Hz */
|
||||||
|
#endif /* HSE_VALUE */
|
||||||
|
|
||||||
|
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||||
|
#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */
|
||||||
|
#endif /* HSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Internal High Speed oscillator (HSI) value.
|
||||||
|
* This value is used by the RCC HAL module to compute the system frequency
|
||||||
|
* (when HSI is used as system clock source, directly or through the PLL).
|
||||||
|
*/
|
||||||
|
#if !defined (HSI_VALUE)
|
||||||
|
#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
|
||||||
|
#endif /* HSI_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG.
|
||||||
|
* This internal oscillator is mainly dedicated to provide a high precision clock to
|
||||||
|
* the USB peripheral by means of a special Clock Recovery System (CRS) circuitry.
|
||||||
|
* When the CRS is not used, the HSI48 RC oscillator runs on it default frequency
|
||||||
|
* which is subject to manufacturing process variations.
|
||||||
|
*/
|
||||||
|
#if !defined (HSI48_VALUE)
|
||||||
|
#define HSI48_VALUE (48000000UL) /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz.
|
||||||
|
The real value my vary depending on manufacturing process variations.*/
|
||||||
|
#endif /* HSI48_VALUE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Internal Low Speed oscillator (LSI) value.
|
||||||
|
*/
|
||||||
|
#if !defined (LSI_VALUE)
|
||||||
|
/*!< Value of the Internal Low Speed oscillator in Hz
|
||||||
|
The real value may vary depending on the variations in voltage and temperature.*/
|
||||||
|
#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/
|
||||||
|
#endif /* LSI_VALUE */
|
||||||
|
/**
|
||||||
|
* @brief External Low Speed oscillator (LSE) value.
|
||||||
|
* This value is used by the UART, RTC HAL module to compute the system frequency
|
||||||
|
*/
|
||||||
|
#if !defined (LSE_VALUE)
|
||||||
|
#define LSE_VALUE (32768UL) /*!< Value of the External Low Speed oscillator in Hz */
|
||||||
|
#endif /* LSE_VALUE */
|
||||||
|
|
||||||
|
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||||
|
#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */
|
||||||
|
#endif /* LSE_STARTUP_TIMEOUT */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief External clock source for I2S and SAI peripherals
|
||||||
|
* This value is used by the I2S and SAI HAL modules to compute the I2S and SAI clock source
|
||||||
|
* frequency, this source is inserted directly through I2S_CKIN pad.
|
||||||
|
*/
|
||||||
|
#if !defined (EXTERNAL_CLOCK_VALUE)
|
||||||
|
#define EXTERNAL_CLOCK_VALUE (12288000UL) /*!< Value of the External oscillator in Hz*/
|
||||||
|
#endif /* EXTERNAL_CLOCK_VALUE */
|
||||||
|
|
||||||
|
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||||
|
=== you can define the HSE value in your toolchain compiler preprocessor. */
|
||||||
|
|
||||||
|
/* ########################### System Configuration ######################### */
|
||||||
|
/**
|
||||||
|
* @brief This is the HAL system configuration section
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */
|
||||||
|
#define TICK_INT_PRIORITY (0UL) /*!< tick interrupt priority (lowest by default) */
|
||||||
|
#define USE_RTOS 0U
|
||||||
|
#define PREFETCH_ENABLE 0U
|
||||||
|
#define INSTRUCTION_CACHE_ENABLE 1U
|
||||||
|
#define DATA_CACHE_ENABLE 1U
|
||||||
|
|
||||||
|
/* ########################## Assert Selection ############################## */
|
||||||
|
/**
|
||||||
|
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||||
|
* HAL drivers code
|
||||||
|
*/
|
||||||
|
/* #define USE_FULL_ASSERT 1U */
|
||||||
|
|
||||||
|
/* ################## SPI peripheral configuration ########################## */
|
||||||
|
|
||||||
|
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
|
||||||
|
* Activated: CRC code is present inside driver
|
||||||
|
* Deactivated: CRC code cleaned from driver
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define USE_SPI_CRC 0U
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Include module's header file
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAL_RCC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_rcc.h"
|
||||||
|
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_gpio.h"
|
||||||
|
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DMA_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_dma.h"
|
||||||
|
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_cortex.h"
|
||||||
|
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_adc.h"
|
||||||
|
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_COMP_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_comp.h"
|
||||||
|
#endif /* HAL_COMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CORDIC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_cordic.h"
|
||||||
|
#endif /* HAL_CORDIC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_crc.h"
|
||||||
|
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_CRYP_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_cryp.h"
|
||||||
|
#endif /* HAL_CRYP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_DAC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_dac.h"
|
||||||
|
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_exti.h"
|
||||||
|
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FDCAN_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_fdcan.h"
|
||||||
|
#endif /* HAL_FDCAN_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_flash.h"
|
||||||
|
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_FMAC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_fmac.h"
|
||||||
|
#endif /* HAL_FMAC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_HRTIM_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_hrtim.h"
|
||||||
|
#endif /* HAL_HRTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_irda.h"
|
||||||
|
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_iwdg.h"
|
||||||
|
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2C_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_i2c.h"
|
||||||
|
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_I2S_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_i2s.h"
|
||||||
|
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_LPTIM_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_lptim.h"
|
||||||
|
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NAND_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_nand.h"
|
||||||
|
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_NOR_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_nor.h"
|
||||||
|
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_OPAMP_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_opamp.h"
|
||||||
|
#endif /* HAL_OPAMP_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PCD_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_pcd.h"
|
||||||
|
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_PWR_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_pwr.h"
|
||||||
|
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_qspi.h"
|
||||||
|
#endif /* HAL_QSPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RNG_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_rng.h"
|
||||||
|
#endif /* HAL_RNG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_RTC_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_rtc.h"
|
||||||
|
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SAI_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_sai.h"
|
||||||
|
#endif /* HAL_SAI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_smartcard.h"
|
||||||
|
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_smbus.h"
|
||||||
|
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SPI_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_spi.h"
|
||||||
|
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_sram.h"
|
||||||
|
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_TIM_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_tim.h"
|
||||||
|
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_UART_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_uart.h"
|
||||||
|
#endif /* HAL_UART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_USART_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_usart.h"
|
||||||
|
#endif /* HAL_USART_MODULE_ENABLED */
|
||||||
|
|
||||||
|
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||||
|
#include "stm32g4xx_hal_wwdg.h"
|
||||||
|
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
/**
|
||||||
|
* @brief The assert_param macro is used for function's parameters check.
|
||||||
|
* @param expr: If expr is false, it calls assert_failed function
|
||||||
|
* which reports the name of the source file and the source
|
||||||
|
* line number of the call that failed.
|
||||||
|
* If expr is true, it returns no value.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
void assert_failed(uint8_t *file, uint32_t line);
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32G4xx_HAL_CONF_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
88
hw/bsp/xmc4000/boards/xmc4500_relax/board.h
Normal file
88
hw/bsp/xmc4000/boards/xmc4500_relax/board.h
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021, Ha Thach (tinyusb.org)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOARD_H_
|
||||||
|
#define BOARD_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LED_PIN P1_1
|
||||||
|
#define LED_STATE_ON 1
|
||||||
|
|
||||||
|
#define BUTTON_PIN P1_14
|
||||||
|
#define BUTTON_STATE_ACTIVE 0
|
||||||
|
|
||||||
|
//#define UART_DEV USART6
|
||||||
|
//#define UART_CLK_EN __HAL_RCC_USART6_CLK_ENABLE
|
||||||
|
//#define UART_GPIO_AF GPIO_AF8_USART6
|
||||||
|
//
|
||||||
|
//#define UART_TX_PORT GPIOC
|
||||||
|
//#define UART_TX_PIN GPIO_PIN_6
|
||||||
|
//
|
||||||
|
//#define UART_RX_PORT GPIOC
|
||||||
|
//#define UART_RX_PIN GPIO_PIN_7
|
||||||
|
|
||||||
|
static inline void board_clock_init(void)
|
||||||
|
{
|
||||||
|
/* Clock configuration */
|
||||||
|
/* fPLL = 120MHz */
|
||||||
|
/* fSYS = 120MHz */
|
||||||
|
/* fUSBPLL = 192MHz */
|
||||||
|
/* fUSB = 48MHz */
|
||||||
|
const XMC_SCU_CLOCK_CONFIG_t clock_config =
|
||||||
|
{
|
||||||
|
.syspll_config.p_div = 2,
|
||||||
|
.syspll_config.n_div = 80,
|
||||||
|
.syspll_config.k_div = 4,
|
||||||
|
.syspll_config.mode = XMC_SCU_CLOCK_SYSPLL_MODE_NORMAL,
|
||||||
|
.syspll_config.clksrc = XMC_SCU_CLOCK_SYSPLLCLKSRC_OSCHP,
|
||||||
|
.enable_oschp = true,
|
||||||
|
.calibration_mode = XMC_SCU_CLOCK_FOFI_CALIBRATION_MODE_FACTORY,
|
||||||
|
.fsys_clksrc = XMC_SCU_CLOCK_SYSCLKSRC_PLL,
|
||||||
|
.fsys_clkdiv = 1,
|
||||||
|
.fcpu_clkdiv = 1,
|
||||||
|
.fccu_clkdiv = 1,
|
||||||
|
.fperipheral_clkdiv = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Setup settings for USB clock */
|
||||||
|
XMC_SCU_CLOCK_Init(&clock_config);
|
||||||
|
|
||||||
|
XMC_SCU_CLOCK_EnableUsbPll();
|
||||||
|
XMC_SCU_CLOCK_StartUsbPll(2, 64);
|
||||||
|
XMC_SCU_CLOCK_SetUsbClockDivider(4);
|
||||||
|
XMC_SCU_CLOCK_SetUsbClockSource(XMC_SCU_CLOCK_USBCLKSRC_USBPLL);
|
||||||
|
XMC_SCU_CLOCK_EnableClock(XMC_SCU_CLOCK_USB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* BOARD_H_ */
|
9
hw/bsp/xmc4000/boards/xmc4500_relax/board.mk
Normal file
9
hw/bsp/xmc4000/boards/xmc4500_relax/board.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
MCU_VARIANT = XMC4500
|
||||||
|
CFLAGS += \
|
||||||
|
-DXMC4500_F100x1024 \
|
||||||
|
|
||||||
|
LD_FILE = $(MCU_DIR)/CMSIS/Infineon/COMPONENT_$(MCU_VARIANT)/Source/TOOLCHAIN_GCC_ARM/XMC4500x1024.ld
|
||||||
|
|
||||||
|
JLINK_DEVICE = XMC4500-1024
|
||||||
|
|
||||||
|
flash: flash-jlink
|
130
hw/bsp/xmc4000/family.c
Normal file
130
hw/bsp/xmc4000/family.c
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021, Ha Thach (tinyusb.org)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xmc_gpio.h"
|
||||||
|
#include "xmc_scu.h"
|
||||||
|
|
||||||
|
#include "bsp/board.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Forward USB interrupt events to TinyUSB IRQ Handler
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void USB0_0_IRQHandler(void)
|
||||||
|
{
|
||||||
|
tud_int_handler(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_init(void)
|
||||||
|
{
|
||||||
|
board_clock_init();
|
||||||
|
SystemCoreClockUpdate();
|
||||||
|
|
||||||
|
// LED
|
||||||
|
XMC_GPIO_CONFIG_t led_cfg;
|
||||||
|
led_cfg.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL;
|
||||||
|
led_cfg.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH;
|
||||||
|
led_cfg.output_strength = XMC_GPIO_OUTPUT_STRENGTH_MEDIUM;
|
||||||
|
XMC_GPIO_Init(LED_PIN, &led_cfg);
|
||||||
|
|
||||||
|
// Button
|
||||||
|
XMC_GPIO_CONFIG_t button_cfg;
|
||||||
|
button_cfg.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
|
||||||
|
XMC_GPIO_Init(BUTTON_PIN, &button_cfg);
|
||||||
|
|
||||||
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
|
// 1ms tick timer
|
||||||
|
SysTick_Config(SystemCoreClock / 1000);
|
||||||
|
|
||||||
|
#elif CFG_TUSB_OS == OPT_OS_FREERTOS
|
||||||
|
// Explicitly disable systick to prevent its ISR runs before scheduler start
|
||||||
|
SysTick->CTRL &= ~1U;
|
||||||
|
|
||||||
|
// If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
|
||||||
|
NVIC_SetPriority(USB0_0_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// USB Power Enable
|
||||||
|
XMC_SCU_RESET_DeassertPeripheralReset(XMC_SCU_PERIPHERAL_RESET_USB0);
|
||||||
|
XMC_SCU_POWER_EnableUsb();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// Board porting API
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
void board_led_write(bool state)
|
||||||
|
{
|
||||||
|
uint32_t is_high = state ? LED_STATE_ON : (1-LED_STATE_ON);
|
||||||
|
|
||||||
|
XMC_GPIO_SetOutputLevel(LED_PIN, is_high ? XMC_GPIO_OUTPUT_LEVEL_HIGH : XMC_GPIO_OUTPUT_LEVEL_LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_button_read(void)
|
||||||
|
{
|
||||||
|
return BUTTON_STATE_ACTIVE == XMC_GPIO_GetInput(BUTTON_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_uart_read(uint8_t* buf, int len)
|
||||||
|
{
|
||||||
|
#ifdef UART_DEV
|
||||||
|
for(int i=0;i<len;i++) {
|
||||||
|
buf[i] = uart_getc(uart_inst);
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
#else
|
||||||
|
(void) buf; (void) len;
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_uart_write(void const * buf, int len)
|
||||||
|
{
|
||||||
|
#ifdef UART_DEV
|
||||||
|
char const* bufch = (char const*) buf;
|
||||||
|
for(int i=0;i<len;i++) {
|
||||||
|
uart_putc(uart_inst, bufch[i]);
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
#else
|
||||||
|
(void) buf; (void) len;
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
|
volatile uint32_t system_ticks = 0;
|
||||||
|
void SysTick_Handler(void)
|
||||||
|
{
|
||||||
|
system_ticks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_millis(void)
|
||||||
|
{
|
||||||
|
return system_ticks;
|
||||||
|
}
|
||||||
|
#endif
|
40
hw/bsp/xmc4000/family.mk
Normal file
40
hw/bsp/xmc4000/family.mk
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
UF2_FAMILY_ID = 0x00
|
||||||
|
MCU_DIR = hw/mcu/infineon/mtb-xmclib-cat3
|
||||||
|
|
||||||
|
DEPS_SUBMODULES += $(MCU_DIR)
|
||||||
|
|
||||||
|
include $(TOP)/$(BOARD_PATH)/board.mk
|
||||||
|
|
||||||
|
CFLAGS += \
|
||||||
|
-flto \
|
||||||
|
-mthumb \
|
||||||
|
-mabi=aapcs \
|
||||||
|
-mcpu=cortex-m4 \
|
||||||
|
-mfloat-abi=hard \
|
||||||
|
-mfpu=fpv4-sp-d16 \
|
||||||
|
-nostdlib -nostartfiles \
|
||||||
|
-DCFG_TUSB_MCU=OPT_MCU_XMC4000
|
||||||
|
|
||||||
|
# mcu driver cause following warnings
|
||||||
|
#CFLAGS += -Wno-error=shadow -Wno-error=cast-align
|
||||||
|
|
||||||
|
SKIP_NANOLIB = 1
|
||||||
|
|
||||||
|
SRC_C += \
|
||||||
|
src/portable/synopsys/dwc2/dcd_dwc2.c \
|
||||||
|
$(MCU_DIR)/Newlib/syscalls.c \
|
||||||
|
$(MCU_DIR)/CMSIS/Infineon/COMPONENT_$(MCU_VARIANT)/Source/system_$(MCU_VARIANT).c \
|
||||||
|
$(MCU_DIR)/XMCLib/src/xmc4_gpio.c \
|
||||||
|
$(MCU_DIR)/XMCLib/src/xmc4_scu.c
|
||||||
|
|
||||||
|
|
||||||
|
SRC_S += $(MCU_DIR)/CMSIS/Infineon/COMPONENT_$(MCU_VARIANT)/Source/TOOLCHAIN_GCC_ARM/startup_$(MCU_VARIANT).S
|
||||||
|
|
||||||
|
INC += \
|
||||||
|
$(TOP)/$(BOARD_PATH) \
|
||||||
|
$(TOP)/$(MCU_DIR)/CMSIS/Core/Include \
|
||||||
|
$(TOP)/$(MCU_DIR)/CMSIS/Infineon/COMPONENT_$(MCU_VARIANT)/Include \
|
||||||
|
$(TOP)/$(MCU_DIR)/XMCLib/inc
|
||||||
|
|
||||||
|
# For freeRTOS port source
|
||||||
|
FREERTOS_PORT = ARM_CM4F
|
1
hw/mcu/infineon/mtb-xmclib-cat3
Submodule
1
hw/mcu/infineon/mtb-xmclib-cat3
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit daf5500d03cba23e68c2f241c30af79cd9d63880
|
@ -119,6 +119,9 @@
|
|||||||
#define DCD_ATTR_ENDPOINT_MAX 9
|
#define DCD_ATTR_ENDPOINT_MAX 9
|
||||||
#define DCD_ATTR_DWC2_STM32
|
#define DCD_ATTR_DWC2_STM32
|
||||||
|
|
||||||
|
#elif TU_CHECK_MCU(OPT_MCU_STM32G4)
|
||||||
|
#define DCD_ATTR_ENDPOINT_MAX 8
|
||||||
|
|
||||||
#elif TU_CHECK_MCU(OPT_MCU_STM32L0, OPT_MCU_STM32L1)
|
#elif TU_CHECK_MCU(OPT_MCU_STM32L0, OPT_MCU_STM32L1)
|
||||||
#define DCD_ATTR_ENDPOINT_MAX 8
|
#define DCD_ATTR_ENDPOINT_MAX 8
|
||||||
|
|
||||||
@ -185,6 +188,10 @@
|
|||||||
#elif TU_CHECK_MCU(OPT_MCU_BCM2711)
|
#elif TU_CHECK_MCU(OPT_MCU_BCM2711)
|
||||||
#define DCD_ATTR_ENDPOINT_MAX 8
|
#define DCD_ATTR_ENDPOINT_MAX 8
|
||||||
|
|
||||||
|
//------------- Broadcom -------------//
|
||||||
|
#elif TU_CHECK_MCU(OPT_MCU_XMC4000)
|
||||||
|
#define DCD_ATTR_ENDPOINT_MAX 8
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#warning "DCD_ATTR_ENDPOINT_MAX is not defined for this MCU, default to 8"
|
#warning "DCD_ATTR_ENDPOINT_MAX is not defined for this MCU, default to 8"
|
||||||
#define DCD_ATTR_ENDPOINT_MAX 8
|
#define DCD_ATTR_ENDPOINT_MAX 8
|
||||||
|
@ -110,7 +110,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TUSB_OPT_DEVICE_ENABLED && \
|
#if TUSB_OPT_DEVICE_ENABLED && \
|
||||||
( TU_CHECK_MCU(OPT_MCU_STM32F0, OPT_MCU_STM32F3, OPT_MCU_STM32L0, OPT_MCU_STM32L1) || \
|
( TU_CHECK_MCU(OPT_MCU_STM32F0, OPT_MCU_STM32F3, OPT_MCU_STM32L0, OPT_MCU_STM32L1, OPT_MCU_STM32G4) || \
|
||||||
(TU_CHECK_MCU(OPT_MCU_STM32F1) && defined(STM32F1_FSDEV)) \
|
(TU_CHECK_MCU(OPT_MCU_STM32F1) && defined(STM32F1_FSDEV)) \
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -296,8 +296,10 @@ void dcd_int_enable (uint8_t rhport)
|
|||||||
__ISB();
|
__ISB();
|
||||||
#if CFG_TUSB_MCU == OPT_MCU_STM32F0 || CFG_TUSB_MCU == OPT_MCU_STM32L0
|
#if CFG_TUSB_MCU == OPT_MCU_STM32F0 || CFG_TUSB_MCU == OPT_MCU_STM32L0
|
||||||
NVIC_EnableIRQ(USB_IRQn);
|
NVIC_EnableIRQ(USB_IRQn);
|
||||||
|
|
||||||
#elif CFG_TUSB_MCU == OPT_MCU_STM32L1
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32L1
|
||||||
NVIC_EnableIRQ(USB_LP_IRQn);
|
NVIC_EnableIRQ(USB_LP_IRQn);
|
||||||
|
|
||||||
#elif CFG_TUSB_MCU == OPT_MCU_STM32F3
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32F3
|
||||||
// Some STM32F302/F303 devices allow to remap the USB interrupt vectors from
|
// Some STM32F302/F303 devices allow to remap the USB interrupt vectors from
|
||||||
// shared USB/CAN IRQs to separate CAN and USB IRQs.
|
// shared USB/CAN IRQs to separate CAN and USB IRQs.
|
||||||
@ -320,6 +322,12 @@ void dcd_int_enable (uint8_t rhport)
|
|||||||
NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
|
NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
|
||||||
NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
|
NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||||
NVIC_EnableIRQ(USBWakeUp_IRQn);
|
NVIC_EnableIRQ(USBWakeUp_IRQn);
|
||||||
|
|
||||||
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32G4
|
||||||
|
NVIC_EnableIRQ(USB_HP_IRQn);
|
||||||
|
NVIC_EnableIRQ(USB_LP_IRQn);
|
||||||
|
NVIC_EnableIRQ(USBWakeUp_IRQn);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Unknown arch in USB driver
|
#error Unknown arch in USB driver
|
||||||
#endif
|
#endif
|
||||||
@ -356,6 +364,12 @@ void dcd_int_disable(uint8_t rhport)
|
|||||||
NVIC_DisableIRQ(USB_HP_CAN1_TX_IRQn);
|
NVIC_DisableIRQ(USB_HP_CAN1_TX_IRQn);
|
||||||
NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn);
|
NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||||
NVIC_DisableIRQ(USBWakeUp_IRQn);
|
NVIC_DisableIRQ(USBWakeUp_IRQn);
|
||||||
|
|
||||||
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32G4
|
||||||
|
NVIC_DisableIRQ(USB_HP_IRQn);
|
||||||
|
NVIC_DisableIRQ(USB_LP_IRQn);
|
||||||
|
NVIC_DisableIRQ(USBWakeUp_IRQn);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Unknown arch in USB driver
|
#error Unknown arch in USB driver
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,6 +87,10 @@
|
|||||||
#include "stm32l1xx.h"
|
#include "stm32l1xx.h"
|
||||||
#define PMA_LENGTH (512u)
|
#define PMA_LENGTH (512u)
|
||||||
|
|
||||||
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32G4
|
||||||
|
#include "stm32g4xx.h"
|
||||||
|
#define PMA_LENGTH (1024u)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error You are using an untested or unimplemented STM32 variant. Please update the driver.
|
#error You are using an untested or unimplemented STM32 variant. Please update the driver.
|
||||||
// This includes L1x0, L1x1, L1x2, L4x2 and L4x3, G1x1, G1x3, and G1x4
|
// This includes L1x0, L1x1, L1x2, L4x2 and L4x3, G1x1, G1x3, and G1x4
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#if TUSB_OPT_DEVICE_ENABLED && \
|
#if TUSB_OPT_DEVICE_ENABLED && \
|
||||||
( defined(DCD_ATTR_DWC2_STM32) || \
|
( defined(DCD_ATTR_DWC2_STM32) || \
|
||||||
TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_GD32VF103) || \
|
TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_GD32VF103) || \
|
||||||
TU_CHECK_MCU(OPT_MCU_EFM32GG, OPT_MCU_BCM2711) )
|
TU_CHECK_MCU(OPT_MCU_EFM32GG, OPT_MCU_BCM2711, OPT_MCU_XMC4000) )
|
||||||
|
|
||||||
#include "device/dcd.h"
|
#include "device/dcd.h"
|
||||||
#include "dwc2_type.h"
|
#include "dwc2_type.h"
|
||||||
@ -48,6 +48,8 @@
|
|||||||
#include "dwc2_bcm.h"
|
#include "dwc2_bcm.h"
|
||||||
#elif TU_CHECK_MCU(OPT_MCU_EFM32GG)
|
#elif TU_CHECK_MCU(OPT_MCU_EFM32GG)
|
||||||
#include "dwc2_efm32.h"
|
#include "dwc2_efm32.h"
|
||||||
|
#elif TU_CHECK_MCU(OPT_MCU_XMC4000)
|
||||||
|
#include "dwc2_xmc.h"
|
||||||
#else
|
#else
|
||||||
#error "Unsupported MCUs"
|
#error "Unsupported MCUs"
|
||||||
#endif
|
#endif
|
||||||
|
87
src/portable/synopsys/dwc2/dwc2_xmc.h
Normal file
87
src/portable/synopsys/dwc2/dwc2_xmc.h
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 Rafael Silva (@perigoso)
|
||||||
|
* Copyright (c) 2021, Ha Thach (tinyusb.org)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DWC2_XMC_H_
|
||||||
|
#define _DWC2_XMC_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "xmc_device.h"
|
||||||
|
|
||||||
|
// XMC has custom control register before DWC registers
|
||||||
|
#define DWC2_REG_BASE USB0_BASE
|
||||||
|
#define DWC2_EP_MAX 7
|
||||||
|
#define DWC2_EP_FIFO_SIZE 2048
|
||||||
|
|
||||||
|
TU_ATTR_ALWAYS_INLINE
|
||||||
|
static inline void dwc2_dcd_int_enable(uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
NVIC_EnableIRQ(USB0_0_IRQn);
|
||||||
|
}
|
||||||
|
|
||||||
|
TU_ATTR_ALWAYS_INLINE
|
||||||
|
static inline void dwc2_dcd_int_disable (uint8_t rhport)
|
||||||
|
{
|
||||||
|
(void) rhport;
|
||||||
|
NVIC_DisableIRQ(USB0_0_IRQn);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dwc2_remote_wakeup_delay(void)
|
||||||
|
{
|
||||||
|
// try to delay for 1 ms
|
||||||
|
// uint32_t count = SystemCoreClock / 1000;
|
||||||
|
// while ( count-- ) __NOP();
|
||||||
|
}
|
||||||
|
|
||||||
|
// MCU specific PHY init, called BEFORE core reset
|
||||||
|
static inline void dwc2_phy_init(dwc2_regs_t * dwc2, uint8_t hs_phy_type)
|
||||||
|
{
|
||||||
|
(void) dwc2;
|
||||||
|
(void) hs_phy_type;
|
||||||
|
|
||||||
|
// Enable PHY
|
||||||
|
//USB->ROUTE = USB_ROUTE_PHYPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
// MCU specific PHY update, it is called AFTER init() and core reset
|
||||||
|
static inline void dwc2_phy_update(dwc2_regs_t * dwc2, uint8_t hs_phy_type)
|
||||||
|
{
|
||||||
|
(void) dwc2;
|
||||||
|
(void) hs_phy_type;
|
||||||
|
|
||||||
|
// XMC Manual: turn around must be 5 (reset & default value)
|
||||||
|
// dwc2->gusbcfg = (dwc2->gusbcfg & ~GUSBCFG_TRDT_Msk) | (5u << GUSBCFG_TRDT_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -720,3 +720,58 @@ hw_cfg4->dedicated_fifos = 0
|
|||||||
hw_cfg4->num_dev_in_eps = 0
|
hw_cfg4->num_dev_in_eps = 0
|
||||||
hw_cfg4->dma_desc_enable = 0
|
hw_cfg4->dma_desc_enable = 0
|
||||||
hw_cfg4->dma_dynamic = 0
|
hw_cfg4->dma_dynamic = 0
|
||||||
|
|
||||||
|
## XMC4500
|
||||||
|
|
||||||
|
dwc2->guid = AEC000
|
||||||
|
dwc2->gsnpsid = 4F54292A
|
||||||
|
dwc2->ghwcfg1 = 0
|
||||||
|
|
||||||
|
dwc2->ghwcfg2 = 228F5930
|
||||||
|
hw_cfg2->op_mode = 0
|
||||||
|
hw_cfg2->arch = 2
|
||||||
|
hw_cfg2->point2point = 1
|
||||||
|
hw_cfg2->hs_phy_type = 0
|
||||||
|
hw_cfg2->fs_phy_type = 1
|
||||||
|
hw_cfg2->num_dev_ep = 6
|
||||||
|
hw_cfg2->num_host_ch = 13
|
||||||
|
hw_cfg2->period_channel_support = 1
|
||||||
|
hw_cfg2->enable_dynamic_fifo = 1
|
||||||
|
hw_cfg2->mul_cpu_int = 0
|
||||||
|
hw_cfg2->nperiod_tx_q_depth = 2
|
||||||
|
hw_cfg2->host_period_tx_q_depth = 2
|
||||||
|
hw_cfg2->dev_token_q_depth = 8
|
||||||
|
hw_cfg2->otg_enable_ic_usb = 0
|
||||||
|
|
||||||
|
dwc2->ghwcfg3 = 27A01E5
|
||||||
|
hw_cfg3->xfer_size_width = 5
|
||||||
|
hw_cfg3->packet_size_width = 6
|
||||||
|
hw_cfg3->otg_enable = 1
|
||||||
|
hw_cfg3->i2c_enable = 1
|
||||||
|
hw_cfg3->vendor_ctrl_itf = 0
|
||||||
|
hw_cfg3->optional_feature_removed = 0
|
||||||
|
hw_cfg3->synch_reset = 0
|
||||||
|
hw_cfg3->otg_adp_support = 0
|
||||||
|
hw_cfg3->otg_enable_hsic = 0
|
||||||
|
hw_cfg3->battery_charger_support = 0
|
||||||
|
hw_cfg3->lpm_mode = 0
|
||||||
|
hw_cfg3->total_fifo_size = 634
|
||||||
|
|
||||||
|
dwc2->ghwcfg4 = DBF08030
|
||||||
|
hw_cfg4->num_dev_period_in_ep = 0
|
||||||
|
hw_cfg4->power_optimized = 1
|
||||||
|
hw_cfg4->ahb_freq_min = 1
|
||||||
|
hw_cfg4->hibernation = 0
|
||||||
|
hw_cfg4->service_interval_mode = 0
|
||||||
|
hw_cfg4->ipg_isoc_en = 0
|
||||||
|
hw_cfg4->acg_enable = 0
|
||||||
|
hw_cfg4->utmi_phy_data_width = 2
|
||||||
|
hw_cfg4->dev_ctrl_ep_num = 0
|
||||||
|
hw_cfg4->iddg_filter_enabled = 1
|
||||||
|
hw_cfg4->vbus_valid_filter_enabled = 1
|
||||||
|
hw_cfg4->a_valid_filter_enabled = 1
|
||||||
|
hw_cfg4->b_valid_filter_enabled = 1
|
||||||
|
hw_cfg4->dedicated_fifos = 1
|
||||||
|
hw_cfg4->num_dev_in_eps = 13
|
||||||
|
hw_cfg4->dma_desc_enable = 0
|
||||||
|
hw_cfg4->dma_dynamic = 1
|
||||||
|
@ -68,16 +68,18 @@
|
|||||||
#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family
|
#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family
|
||||||
|
|
||||||
// STM32
|
// STM32
|
||||||
#define OPT_MCU_STM32F0 300 ///< ST STM32F0
|
#define OPT_MCU_STM32F0 300 ///< ST F0
|
||||||
#define OPT_MCU_STM32F1 301 ///< ST STM32F1
|
#define OPT_MCU_STM32F1 301 ///< ST F1
|
||||||
#define OPT_MCU_STM32F2 302 ///< ST STM32F2
|
#define OPT_MCU_STM32F2 302 ///< ST F2
|
||||||
#define OPT_MCU_STM32F3 303 ///< ST STM32F3
|
#define OPT_MCU_STM32F3 303 ///< ST F3
|
||||||
#define OPT_MCU_STM32F4 304 ///< ST STM32F4
|
#define OPT_MCU_STM32F4 304 ///< ST F4
|
||||||
#define OPT_MCU_STM32F7 305 ///< ST STM32F7
|
#define OPT_MCU_STM32F7 305 ///< ST F7
|
||||||
#define OPT_MCU_STM32H7 306 ///< ST STM32H7
|
#define OPT_MCU_STM32H7 306 ///< ST H7
|
||||||
#define OPT_MCU_STM32L0 307 ///< ST STM32L0
|
#define OPT_MCU_STM32L1 308 ///< ST L1
|
||||||
#define OPT_MCU_STM32L1 308 ///< ST STM32L1
|
#define OPT_MCU_STM32L0 307 ///< ST L0
|
||||||
#define OPT_MCU_STM32L4 309 ///< ST STM32L4
|
#define OPT_MCU_STM32L4 309 ///< ST L4
|
||||||
|
#define OPT_MCU_STM32G0 310 ///< ST G0
|
||||||
|
#define OPT_MCU_STM32G4 311 ///< ST G4
|
||||||
|
|
||||||
// Sony
|
// Sony
|
||||||
#define OPT_MCU_CXD56 400 ///< SONY CXD56
|
#define OPT_MCU_CXD56 400 ///< SONY CXD56
|
||||||
@ -128,6 +130,9 @@
|
|||||||
// Broadcom
|
// Broadcom
|
||||||
#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711
|
#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711
|
||||||
|
|
||||||
|
// Infineon
|
||||||
|
#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000
|
||||||
|
|
||||||
// Helper to check if configured MCU is one of listed
|
// Helper to check if configured MCU is one of listed
|
||||||
// Apply _TU_CHECK_MCU with || as separator to list of input
|
// Apply _TU_CHECK_MCU with || as separator to list of input
|
||||||
#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m)
|
#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user