Skip to content

Commit a16c7a2

Browse files
authored
Merge pull request #3191 from hathach/at32
support at32 mcu (2)
2 parents de9a6c8 + e0f2343 commit a16c7a2

File tree

96 files changed

+9060
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+9060
-1
lines changed

.github/workflows/ci_set_matrix.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
# family: [supported toolchain]
1717
family_list = {
18+
"at32f402_405 at32f403a_407 at32f413 at32f415 at32f423 at32f425 at32f435_437": ["arm-gcc"],
1819
"broadcom_32bit": ["arm-gcc"],
1920
"broadcom_64bit": ["aarch64-gcc"],
2021
"ch32v10x ch32v20x ch32v30x fomu gd32vf103": ["riscv-gcc"],
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
if (TOOLCHAIN STREQUAL "gcc")
2+
set(TOOLCHAIN_COMMON_FLAGS
3+
-mthumb
4+
-mcpu=cortex-m4
5+
-mfloat-abi=soft
6+
)
7+
if (NOT DEFINED FREERTOS_PORT)
8+
set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "")
9+
endif ()
10+
11+
elseif (TOOLCHAIN STREQUAL "clang")
12+
set(TOOLCHAIN_COMMON_FLAGS
13+
--target=arm-none-eabi
14+
-mcpu=cortex-m4
15+
)
16+
if (NOT DEFINED FREERTOS_PORT)
17+
set(FREERTOS_PORT GCC_ARM_CM3 CACHE INTERNAL "")
18+
endif ()
19+
20+
elseif (TOOLCHAIN STREQUAL "iar")
21+
set(TOOLCHAIN_COMMON_FLAGS
22+
--cpu cortex-m4
23+
--fpu none
24+
)
25+
26+
if (NOT DEFINED FREERTOS_PORT)
27+
set(FREERTOS_PORT IAR_ARM_CM3 CACHE INTERNAL "")
28+
endif ()
29+
30+
endif ()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
ifeq ($(TOOLCHAIN),gcc)
2+
CFLAGS += \
3+
-mthumb \
4+
-mcpu=cortex-m4 \
5+
-mfloat-abi=soft
6+
7+
else ifeq ($(TOOLCHAIN),clang)
8+
CFLAGS += \
9+
--target=arm-none-eabi \
10+
-mcpu=cortex-m4
11+
12+
else ifeq ($(TOOLCHAIN),iar)
13+
CFLAGS += --cpu cortex-m4 --fpu none
14+
ASFLAGS += --cpu cortex-m4 --fpu none
15+
16+
else
17+
$(error "TOOLCHAIN is not supported")
18+
endif
19+
20+
FREERTOS_PORTABLE_SRC ?= $(FREERTOS_PORTABLE_PATH)/ARM_CM3

examples/device/net_lwip_webserver/skip.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ mcu:STM32N6
1515
family:broadcom_64bit
1616
family:broadcom_32bit
1717
family:espressif
18+
board:AT_START_F425
1819
board:curiosity_nano
1920
board:frdm_kl25z
2021
# lpc55 has weird error 'ncm_interface' causes a section type conflict with 'ntb_parameters'
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
/*
2+
* FreeRTOS Kernel V10.0.0
3+
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software. If you wish to use our Amazon
14+
* FreeRTOS name, please do so in a fair use way that does not cause confusion.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22+
*
23+
* http://www.FreeRTOS.org
24+
* http://aws.amazon.com/freertos
25+
*
26+
* 1 tab == 4 spaces!
27+
*/
28+
29+
30+
#ifndef FREERTOS_CONFIG_H
31+
#define FREERTOS_CONFIG_H
32+
33+
/*-----------------------------------------------------------
34+
* Application specific definitions.
35+
*
36+
* These definitions should be adjusted for your particular hardware and
37+
* application requirements.
38+
*
39+
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
40+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
41+
*
42+
* See http://www.freertos.org/a00110.html.
43+
*----------------------------------------------------------*/
44+
45+
// skip if included from IAR assembler
46+
#ifndef __IASMARM__
47+
// Include MCU header
48+
#include "at32f402_405.h"
49+
50+
#endif
51+
52+
/* Cortex M23/M33 port configuration. */
53+
#define configENABLE_MPU 0
54+
#define configENABLE_FPU 1
55+
#define configENABLE_TRUSTZONE 0
56+
#define configMINIMAL_SECURE_STACK_SIZE ( 1024 )
57+
58+
#define configUSE_PREEMPTION 1
59+
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
60+
#define configCPU_CLOCK_HZ SystemCoreClock
61+
#define configTICK_RATE_HZ ( 1000 )
62+
#define configMAX_PRIORITIES ( 5 )
63+
#define configMINIMAL_STACK_SIZE ( 128 )
64+
#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 )
65+
#define configMAX_TASK_NAME_LEN 16
66+
#define configUSE_16_BIT_TICKS 0
67+
#define configIDLE_SHOULD_YIELD 1
68+
#define configUSE_MUTEXES 1
69+
#define configUSE_RECURSIVE_MUTEXES 1
70+
#define configUSE_COUNTING_SEMAPHORES 1
71+
#define configQUEUE_REGISTRY_SIZE 4
72+
#define configUSE_QUEUE_SETS 0
73+
#define configUSE_TIME_SLICING 0
74+
#define configUSE_NEWLIB_REENTRANT 0
75+
#define configENABLE_BACKWARD_COMPATIBILITY 1
76+
#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0
77+
78+
#define configSUPPORT_STATIC_ALLOCATION 1
79+
#define configSUPPORT_DYNAMIC_ALLOCATION 0
80+
81+
/* Hook function related definitions. */
82+
#define configUSE_IDLE_HOOK 0
83+
#define configUSE_TICK_HOOK 0
84+
#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning
85+
#define configCHECK_FOR_STACK_OVERFLOW 2
86+
#define configCHECK_HANDLER_INSTALLATION 0
87+
88+
/* Run time and task stats gathering related definitions. */
89+
#define configGENERATE_RUN_TIME_STATS 0
90+
#define configUSE_TRACE_FACILITY 1 // legacy trace
91+
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
92+
93+
/* Co-routine definitions. */
94+
#define configUSE_CO_ROUTINES 0
95+
#define configMAX_CO_ROUTINE_PRIORITIES 2
96+
97+
/* Software timer related definitions. */
98+
#define configUSE_TIMERS 1
99+
#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2)
100+
#define configTIMER_QUEUE_LENGTH 32
101+
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE
102+
103+
/* Optional functions - most linkers will remove unused functions anyway. */
104+
#define INCLUDE_vTaskPrioritySet 0
105+
#define INCLUDE_uxTaskPriorityGet 0
106+
#define INCLUDE_vTaskDelete 0
107+
#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY
108+
#define INCLUDE_xResumeFromISR 0
109+
#define INCLUDE_vTaskDelayUntil 1
110+
#define INCLUDE_vTaskDelay 1
111+
#define INCLUDE_xTaskGetSchedulerState 0
112+
#define INCLUDE_xTaskGetCurrentTaskHandle 1
113+
#define INCLUDE_uxTaskGetStackHighWaterMark 0
114+
#define INCLUDE_xTaskGetIdleTaskHandle 0
115+
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
116+
#define INCLUDE_pcTaskGetTaskName 0
117+
#define INCLUDE_eTaskGetState 0
118+
#define INCLUDE_xEventGroupSetBitFromISR 0
119+
#define INCLUDE_xTimerPendFunctionCall 0
120+
121+
#ifdef __RX__
122+
/* Renesas RX series */
123+
#define vSoftwareInterruptISR INT_Excep_ICU_SWINT
124+
#define vTickISR INT_Excep_CMT0_CMI0
125+
#define configPERIPHERAL_CLOCK_HZ (configCPU_CLOCK_HZ/2)
126+
#define configKERNEL_INTERRUPT_PRIORITY 1
127+
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 4
128+
129+
#else
130+
131+
/* FreeRTOS hooks to NVIC vectors */
132+
#define xPortPendSVHandler PendSV_Handler
133+
#define xPortSysTickHandler SysTick_Handler
134+
#define vPortSVCHandler SVC_Handler
135+
136+
//--------------------------------------------------------------------+
137+
// Interrupt nesting behavior configuration.
138+
//--------------------------------------------------------------------+
139+
#if defined(__NVIC_PRIO_BITS)
140+
// For Cortex-M specific: __NVIC_PRIO_BITS is defined in core_cmx.h
141+
#define configPRIO_BITS __NVIC_PRIO_BITS
142+
143+
#elif defined(__ECLIC_INTCTLBITS)
144+
// RISC-V Bumblebee core from nuclei
145+
#define configPRIO_BITS __ECLIC_INTCTLBITS
146+
147+
#elif defined(__IASMARM__)
148+
// FIXME: IAR Assembler cannot include mcu header directly to get __NVIC_PRIO_BITS.
149+
// Therefore we will hard coded it to minimum value of 2 to get pass ci build.
150+
// IAR user must update this to correct value of the target MCU
151+
#message "configPRIO_BITS is hard coded to 2 to pass IAR build only. User should update it per MCU"
152+
#define configPRIO_BITS 2
153+
154+
#else
155+
#error "FreeRTOS configPRIO_BITS to be defined"
156+
#endif
157+
158+
/* The lowest interrupt priority that can be used in a call to a "set priority" function. */
159+
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<<configPRIO_BITS) - 1)
160+
161+
/* The highest interrupt priority that can be used by any interrupt service
162+
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
163+
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
164+
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
165+
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2
166+
167+
/* Interrupt priorities used by the kernel port layer itself. These are generic
168+
to all Cortex-M ports, and do not rely on any particular library functions. */
169+
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
170+
171+
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
172+
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
173+
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
174+
175+
#endif
176+
177+
#endif /* __FREERTOS_CONFIG__H */
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/**
2+
**************************************************************************
3+
* @file at32f402_405_clock.c
4+
* @brief system clock config program
5+
**************************************************************************
6+
* Copyright notice & Disclaimer
7+
*
8+
* The software Board Support Package (BSP) that is made available to
9+
* download from Artery official website is the copyrighted work of Artery.
10+
* Artery authorizes customers to use, copy, and distribute the BSP
11+
* software and its related documentation for the purpose of design and
12+
* development in conjunction with Artery microcontrollers. Use of the
13+
* software is governed by this copyright notice and the following disclaimer.
14+
*
15+
* THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
16+
* GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
17+
* TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
18+
* STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
19+
* INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
20+
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
21+
*
22+
**************************************************************************
23+
*/
24+
25+
/* includes ------------------------------------------------------------------*/
26+
#include "at32f402_405_clock.h"
27+
28+
/**
29+
* @brief system clock config program
30+
* @note the system clock is configured as follow:
31+
* system clock (sclk) = (hext * pll_ns)/(pll_ms * pll_fp)
32+
* system clock source = pll (hext)
33+
* - hext = HEXT_VALUE
34+
* - sclk = 216000000
35+
* - ahbdiv = 1
36+
* - ahbclk = 216000000
37+
* - apb2div = 1
38+
* - apb2clk = 216000000
39+
* - apb1div = 2
40+
* - apb1clk = 108000000
41+
* - pll_ns = 72
42+
* - pll_ms = 1
43+
* - pll_fr = 4
44+
* - flash_wtcyc = 6 cycle
45+
* @param none
46+
* @retval none
47+
*/
48+
void system_clock_config(void)
49+
{
50+
/* reset crm */
51+
crm_reset();
52+
53+
/* config flash psr register */
54+
flash_psr_set(FLASH_WAIT_CYCLE_6);
55+
56+
/* enable pwc periph clock */
57+
crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
58+
59+
/* set power ldo output voltage to 1.3v */
60+
pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V3);
61+
62+
crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);
63+
64+
/* wait till hext is ready */
65+
while(crm_hext_stable_wait() == ERROR)
66+
{
67+
}
68+
69+
/* if pll parameter has changed, please use the AT32_New_Clock_Configuration tool for new configuration. */
70+
crm_pll_config(CRM_PLL_SOURCE_HEXT, 72, 1, CRM_PLL_FP_4);
71+
72+
/* config pllu div */
73+
crm_pllu_div_set(CRM_PLL_FU_18);
74+
75+
/* enable pll */
76+
crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);
77+
78+
/* wait till pll is ready */
79+
while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
80+
{
81+
}
82+
83+
/* config ahbclk */
84+
crm_ahb_div_set(CRM_AHB_DIV_1);
85+
86+
/* config apb2clk, the maximum frequency of APB2 clock is 216 MHz */
87+
crm_apb2_div_set(CRM_APB2_DIV_1);
88+
89+
/* config apb1clk, the maximum frequency of APB1 clock is 120 MHz */
90+
crm_apb1_div_set(CRM_APB1_DIV_2);
91+
92+
/* enable auto step mode */
93+
crm_auto_step_mode_enable(TRUE);
94+
95+
/* select pll as system clock source */
96+
crm_sysclk_switch(CRM_SCLK_PLL);
97+
98+
/* wait till pll is used as system clock source */
99+
while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
100+
{
101+
}
102+
103+
/* disable auto step mode */
104+
crm_auto_step_mode_enable(FALSE);
105+
106+
/* update system_core_clock global variable */
107+
system_core_clock_update();
108+
109+
#ifdef AT32F405xx
110+
/*
111+
AT32405 OTGHS PHY not initialized, resulting in high power consumption
112+
Solutions:
113+
1. If OTGHS is not used, call the "reduce_power_consumption" function to reduce power consumption.
114+
PLL or HEXT should be enabled when calling this function.
115+
Example: reduce_power_consumption();
116+
117+
2. If OTGHS is required, initialize OTGHS to reduce power consumption, without the need to call this function.
118+
119+
for more detailed information. please refer to the faq document FAQ0148.
120+
*/
121+
#endif
122+
123+
#ifdef AT32F402xx
124+
/* reduce power consumption */
125+
reduce_power_consumption();
126+
#endif
127+
}

0 commit comments

Comments
 (0)