Merge pull request #3788 from rhgndf/apm32f0-deps

Enable APM32F0 dependency fetching and CI
This commit is contained in:
Zixun LI
2026-07-26 17:05:34 +02:00
committed by GitHub
11 changed files with 183 additions and 18 deletions

View File

@ -16,6 +16,7 @@ toolchain_list = [
# family: [supported toolchain]
family_list = {
"apm32f0xx": ["arm-gcc"],
"at32f402_405": ["arm-gcc"],
"at32f403a_407": ["arm-gcc"],
"at32f413": ["arm-gcc"],

1
.gitignore vendored
View File

@ -78,6 +78,7 @@ hw/mcu/artery/
hw/mcu/broadcom/
hw/mcu/bridgetek/ft9xx/ft90x-sdk/
hw/mcu/gd/
hw/mcu/geehy/
hw/mcu/hpmicro/
hw/mcu/infineon/
hw/mcu/microchip/

View File

@ -1,3 +1,4 @@
mcu:APM32F0XX
mcu:CH32V103
mcu:CH32V20X
mcu:LPC11UXX

View File

@ -42,6 +42,10 @@
"name": "apard32690",
"inherits": "default"
},
{
"name": "apm32f072_dev_board",
"inherits": "default"
},
{
"name": "arduino_nano33_ble",
"inherits": "default"
@ -510,6 +514,10 @@
"name": "portenta_c33",
"inherits": "default"
},
{
"name": "py32f071_dev_board",
"inherits": "default"
},
{
"name": "pybadge",
"inherits": "default"
@ -1007,6 +1015,11 @@
"description": "Build preset for the apard32690 board",
"configurePreset": "apard32690"
},
{
"name": "apm32f072_dev_board",
"description": "Build preset for the apm32f072_dev_board board",
"configurePreset": "apm32f072_dev_board"
},
{
"name": "arduino_nano33_ble",
"description": "Build preset for the arduino_nano33_ble board",
@ -1637,6 +1650,11 @@
"description": "Build preset for the portenta_c33 board",
"configurePreset": "portenta_c33"
},
{
"name": "py32f071_dev_board",
"description": "Build preset for the py32f071_dev_board board",
"configurePreset": "py32f071_dev_board"
},
{
"name": "pybadge",
"description": "Build preset for the pybadge board",
@ -2257,6 +2275,19 @@
}
]
},
{
"name": "apm32f072_dev_board",
"steps": [
{
"type": "configure",
"name": "apm32f072_dev_board"
},
{
"type": "build",
"name": "apm32f072_dev_board"
}
]
},
{
"name": "arduino_nano33_ble",
"steps": [
@ -3895,6 +3926,19 @@
}
]
},
{
"name": "py32f071_dev_board",
"steps": [
{
"type": "configure",
"name": "py32f071_dev_board"
},
{
"type": "build",
"name": "py32f071_dev_board"
}
]
},
{
"name": "pybadge",
"steps": [

View File

@ -0,0 +1,108 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2026, 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 FREERTOS_CONFIG_H_
#define FREERTOS_CONFIG_H_
#ifndef __IASMARM__
#include "apm32f0xx.h"
#endif
#define configENABLE_MPU 0
#define configENABLE_FPU 0
#define configENABLE_TRUSTZONE 0
#define configMINIMAL_SECURE_STACK_SIZE 1024
#define configUSE_PREEMPTION 1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
#define configCPU_CLOCK_HZ SystemCoreClock
#define configTICK_RATE_HZ 1000
#define configMAX_PRIORITIES 5
#define configMINIMAL_STACK_SIZE 128
#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION * 4 * 1024 )
#define configMAX_TASK_NAME_LEN 16
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_MUTEXES 1
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_COUNTING_SEMAPHORES 1
#define configQUEUE_REGISTRY_SIZE 4
#define configUSE_QUEUE_SETS 0
#define configUSE_TIME_SLICING 0
#define configUSE_NEWLIB_REENTRANT 0
#define configENABLE_BACKWARD_COMPATIBILITY 1
#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0
#define configSUPPORT_STATIC_ALLOCATION 1
#define configSUPPORT_DYNAMIC_ALLOCATION 0
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configUSE_MALLOC_FAILED_HOOK 0
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configCHECK_HANDLER_INSTALLATION 0
#define configGENERATE_RUN_TIME_STATS 0
#define configRECORD_STACK_HIGH_ADDRESS 1
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES 2
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )
#define configTIMER_QUEUE_LENGTH 32
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE
#define INCLUDE_vTaskPrioritySet 0
#define INCLUDE_uxTaskPriorityGet 0
#define INCLUDE_vTaskDelete 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_xResumeFromISR 0
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetSchedulerState 0
#define INCLUDE_xTaskGetCurrentTaskHandle 1
#define INCLUDE_uxTaskGetStackHighWaterMark 0
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
#define INCLUDE_pcTaskGetTaskName 0
#define INCLUDE_eTaskGetState 0
#define INCLUDE_xEventGroupSetBitFromISR 0
#define INCLUDE_xTimerPendFunctionCall 0
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
#define vPortSVCHandler SVC_Handler
#define configPRIO_BITS __NVIC_PRIO_BITS
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ( ( 1 << configPRIO_BITS ) - 1 )
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
#endif

View File

@ -4,5 +4,10 @@ set(MCU_LINKER_NAME APM32F07xxB)
set(JLINK_DEVICE APM32F072RB)
function(update_board TARGET)
target_compile_definitions(${TARGET} PUBLIC ${MCU_VARIANT})
target_compile_definitions(${TARGET} PUBLIC
${MCU_VARIANT}
CFG_EXAMPLE_MSC_READONLY
CFG_EXAMPLE_MSC_DUAL_READONLY
CFG_EXAMPLE_VIDEO_READONLY
)
endfunction()

View File

@ -4,4 +4,7 @@ MCU_LINKER_NAME = APM32F07xxB
JLINK_DEVICE = APM32F072RB
CFLAGS += \
-D${MCU_VARIANT}
-D${MCU_VARIANT} \
-DCFG_EXAMPLE_MSC_READONLY \
-DCFG_EXAMPLE_MSC_DUAL_READONLY \
-DCFG_EXAMPLE_VIDEO_READONLY

View File

@ -32,10 +32,18 @@
#include "apm32f0xx_rcm.h"
#include "apm32f0xx_gpio.h"
#include "apm32f0xx_misc.h"
#include "apm32f0xx_crs.h"
#include "bsp/board_api.h"
#include "board.h"
void USBD_IRQHandler(void);
#if CFG_TUSB_OS == OPT_OS_NONE
void SysTick_Handler(void);
void SVC_Handler(void);
void PendSV_Handler(void);
#endif
void HardFault_Handler(void);
void _init(void);
//--------------------------------------------------------------------+
// Forward USB interrupt events to TinyUSB IRQ Handler
//--------------------------------------------------------------------+
@ -47,18 +55,11 @@ void USBD_IRQHandler(void) {
// Board Init
//--------------------------------------------------------------------+
void board_init(void) {
// Enable HSI48 for USB clock
RCM_EnableHSI48();
while (RCM_ReadStatusFlag(RCM_FLAG_HSI48RDY) == RESET) {}
// Configure HSE and PLL for a 48 MHz system clock
SystemClockConfig();
// Select HSI48 as USB clock source
RCM_ConfigUSBCLK(RCM_USBCLK_HSI48);
// Enable CRS for automatic HSI48 calibration from USB SOF
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CRS);
CRS_ConfigSynchronizationSource(CRS_SYNC_SOURCE_USB);
CRS_EnableAutomaticCalibration();
CRS_EnableFrequencyErrorCounter();
// Route the 48 MHz PLL clock to USB
RCM_ConfigUSBCLK(RCM_USBCLK_PLLCLK);
// Enable USB peripheral clock
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_USB);

View File

@ -1,7 +1,7 @@
include_guard()
set(APM32_FAMILY apm32f0xx)
set(APM32_SDK ${TOP}/hw/mcu/geehy/APM32F0xx_SDK_V1.8.6/Libraries)
set(APM32_SDK ${TOP}/hw/mcu/geehy/APM32F0xx_SDK/Libraries)
# include board specific
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
@ -31,7 +31,6 @@ function(family_add_board BOARD_TARGET)
${APM32_SDK}/APM32F0xx_StdPeriphDriver/src/apm32f0xx_gpio.c
${APM32_SDK}/APM32F0xx_StdPeriphDriver/src/apm32f0xx_misc.c
${APM32_SDK}/APM32F0xx_StdPeriphDriver/src/apm32f0xx_rcm.c
${APM32_SDK}/APM32F0xx_StdPeriphDriver/src/apm32f0xx_crs.c
)
target_include_directories(${BOARD_TARGET} PUBLIC
${CMAKE_CURRENT_FUNCTION_LIST_DIR}

View File

@ -1,5 +1,5 @@
APM32_FAMILY = apm32f0xx
APM32_SDK = hw/mcu/geehy/APM32F0xx_SDK_V1.8.6/Libraries
APM32_SDK = hw/mcu/geehy/APM32F0xx_SDK/Libraries
include $(TOP)/$(BOARD_PATH)/board.mk
@ -20,7 +20,6 @@ SRC_C += \
$(APM32_SDK)/APM32F0xx_StdPeriphDriver/src/apm32f0xx_gpio.c \
$(APM32_SDK)/APM32F0xx_StdPeriphDriver/src/apm32f0xx_misc.c \
$(APM32_SDK)/APM32F0xx_StdPeriphDriver/src/apm32f0xx_rcm.c \
$(APM32_SDK)/APM32F0xx_StdPeriphDriver/src/apm32f0xx_crs.c \
$(APM32_SDK)/Device/Geehy/APM32F0xx/Source/system_apm32f0xx.c
INC += \

View File

@ -46,6 +46,9 @@ deps_optional = {
'hw/mcu/gd/nuclei-sdk': ['https://github.com/Nuclei-Software/nuclei-sdk.git',
'7eb7bfa9ea4fbeacfafe1d5f77d5a0e6ed3922e7',
'gd32vf103'],
'hw/mcu/geehy/APM32F0xx_SDK': ['https://github.com/GeehySemi/APM32F0xx_SDK.git',
'cfc1fe826e1869133de86d4c6b298fc153e6bc32',
'apm32f0xx'],
'hw/mcu/infineon/mtb-xmclib-cat3': ['https://github.com/Infineon/mtb-xmclib-cat3.git',
'daf5500d03cba23e68c2f241c30af79cd9d63880',
'xmc4000'],