Начало
This commit is contained in:
commit
5774b88dd2
|
|
@ -0,0 +1,157 @@
|
|||
#include "Clock.h"
|
||||
|
||||
|
||||
/* ################################################################################## */
|
||||
/* ################################### Type define ################################## */
|
||||
|
||||
/* PCBA external oscillator value, these macro is user defined. */
|
||||
/* FOSC/SOSC clock need to manually configuration according to PCBA XTAL value
|
||||
* in SOSC/FOSc configuration.
|
||||
* Current default value is the XTAL value on EVB board. */
|
||||
|
||||
|
||||
/* ################################################################################## */
|
||||
/* ########################### Local Prototype Functions ############################ */
|
||||
static void Bsp_SCG_Init(void);
|
||||
static void Bsp_PCC_Init(void);
|
||||
|
||||
/* ################################################################################## */
|
||||
/* ################################ Local Functions ################################# */
|
||||
|
||||
|
||||
/**
|
||||
* @brief Local SCG initial
|
||||
*
|
||||
*/
|
||||
static void Bsp_SCG_Init(void)
|
||||
{
|
||||
/* Enable FOSC, frequency is 24M, DIVH=DIV1(24M), DIVM=DIV1(24M), DIVL=DIV2(12M)*/
|
||||
SCG_FoscType tFoscStruct =
|
||||
{
|
||||
.bLock = false,
|
||||
.bCm = false,
|
||||
.bCmre = false,
|
||||
.bSten = false,
|
||||
.bBypass = false,
|
||||
.eDivH = SCG_ASYNCCLOCKDIV_BY1,
|
||||
.eDivM = SCG_ASYNCCLOCKDIV_BY1,
|
||||
.eDivL = SCG_ASYNCCLOCKDIV_BY2,
|
||||
};
|
||||
SCG_EnableFOSC(&tFoscStruct);
|
||||
|
||||
/* Enable PLL0, frequency is 240M, DIVH=DIV2(120M), DIVM=DIV2(120M), DIVL=DIV4(60M), src=FOSC*/
|
||||
/* The value of multiplier factor(FOSC/u8Prediv) between 2 ~ 4 is better*/
|
||||
SCG_PllType tPll0Struct =
|
||||
{
|
||||
.bLock = false,
|
||||
.bCm = false,
|
||||
.bCmre = false,
|
||||
.bSten = false,
|
||||
.eDivH = SCG_ASYNCCLOCKDIV_BY2,
|
||||
.eDivM = SCG_ASYNCCLOCKDIV_BY2,
|
||||
.eDivL = SCG_ASYNCCLOCKDIV_BY4,
|
||||
.u8Prediv = 11U,
|
||||
.ePstDiv = SCG_PLLPSTDIV_BY2,
|
||||
.u16Mult = 239U,
|
||||
.eSrc = SCG_PLLSOURCE_FOSC
|
||||
};
|
||||
SCG_EnablePLL(SCG_PLL0, &tPll0Struct);
|
||||
|
||||
/* Enable PLL1, frequency is 240M, DIVH=DIV2(120M), DIVM=DIV2(120M), DIVL=DIV4(60M), src=FOSC*/
|
||||
/* The value of multiplier factor(FOSC/u8Prediv) between 2 ~ 4 is better*/
|
||||
SCG_PllType tPll1Struct =
|
||||
{
|
||||
.bLock = false,
|
||||
.bCm = false,
|
||||
.bCmre = false,
|
||||
.bSten = false,
|
||||
.eDivH = SCG_ASYNCCLOCKDIV_BY2,
|
||||
.eDivM = SCG_ASYNCCLOCKDIV_BY2,
|
||||
.eDivL = SCG_ASYNCCLOCKDIV_BY4,
|
||||
.u8Prediv = 11U,
|
||||
.ePstDiv = SCG_PLLPSTDIV_BY2,
|
||||
.u16Mult = 239U,
|
||||
.eSrc = SCG_PLLSOURCE_FOSC
|
||||
};
|
||||
SCG_EnablePLL(SCG_PLL1, &tPll1Struct);
|
||||
|
||||
/* Enable SIRC DIV, DIVH=DIV1(12M), DIVM=DIV1(12M), DIVL=DIV2(6M) */
|
||||
SCG_SircType tSircStruct =
|
||||
{
|
||||
.bLock = false,
|
||||
.bCm = false,
|
||||
.bTrEn = false,
|
||||
.bLpen = false,
|
||||
.bSten = false,
|
||||
.eDivH = SCG_ASYNCCLOCKDIV_BY1,
|
||||
.eDivM = SCG_ASYNCCLOCKDIV_BY1,
|
||||
.eDivL = SCG_ASYNCCLOCKDIV_BY2,
|
||||
.u8TrimSrc = 0U
|
||||
};
|
||||
SCG_SetSIRC(&tSircStruct);
|
||||
|
||||
/* Set core clock source from PLL0, DIV_CORE=DIV1(240M), DIV_BUS=DIV2(120M), DIV_SLOW=DIV4(60M)*/
|
||||
SCG_ClockCtrlType tClockStruct =
|
||||
{
|
||||
.bSysClkMonitor = false,
|
||||
.eSrc = SCG_CLOCK_SRC_PLL0,
|
||||
.eDivSlow = SCG_CLOCK_DIV_BY2,
|
||||
.eDivBus = SCG_CLOCK_DIV_BY2,
|
||||
.eDivCore = SCG_CLOCK_DIV_BY1
|
||||
};
|
||||
SCG_SetClkCtrl(&tClockStruct);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Local PCC Initial
|
||||
*
|
||||
*/
|
||||
static void Bsp_PCC_Init(void)
|
||||
{
|
||||
PCC_CtrlType bSP_PCC_Config;
|
||||
|
||||
#if UART_USED_INSTANCE2 == STD_ON
|
||||
/* UART 2 */
|
||||
bSP_PCC_Config.eClockName = PCC_CLK_FCUART2;
|
||||
bSP_PCC_Config.bEn = true;
|
||||
bSP_PCC_Config.eClkSrc = PCC_CLKGATE_SRC_FOSCDIV;
|
||||
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
||||
|
||||
PCC_SetPcc(&bSP_PCC_Config);
|
||||
#endif /* end for UART_USED_INSTANCE2 == STD_ON */
|
||||
|
||||
/* DMA 0 */
|
||||
bSP_PCC_Config.eClockName = PCC_CLK_DMA0;
|
||||
bSP_PCC_Config.bEn = true;
|
||||
bSP_PCC_Config.eClkSrc = PCC_CLKGATE_SRC_FOSCDIV;
|
||||
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
||||
|
||||
PCC_SetPcc(&bSP_PCC_Config);
|
||||
|
||||
/* DMAMUX 0 */
|
||||
bSP_PCC_Config.eClockName = PCC_CLK_DMAMUX0;
|
||||
bSP_PCC_Config.bEn = true;
|
||||
bSP_PCC_Config.eClkSrc = PCC_CLKGATE_SRC_FOSCDIV;
|
||||
bSP_PCC_Config.eDivider = PCC_CLK_UNINVOLVED;
|
||||
|
||||
PCC_SetPcc(&bSP_PCC_Config);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ################################################################################## */
|
||||
/* ################################# Global Functions ############################### */
|
||||
|
||||
|
||||
/**
|
||||
* @brief General Clock Initial
|
||||
*
|
||||
*/
|
||||
void Bsp_CLOCK_Init(void)
|
||||
{
|
||||
SCG_Deinit();
|
||||
Bsp_SCG_Init();
|
||||
Bsp_PCC_Init();
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef INCLUDE_BSP_CLOCK_H_
|
||||
#define INCLUDE_BSP_CLOCK_H_
|
||||
|
||||
#include "_driver_header.h"
|
||||
|
||||
/**
|
||||
* @brief General Clock Initial
|
||||
*
|
||||
*/
|
||||
void Bsp_CLOCK_Init(void);
|
||||
|
||||
#endif /* INCLUDE_BSP_CLOCK_H_ */
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
|
||||
M_VECTOR_RAM_SIZE = 0x0400;
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
{
|
||||
|
||||
ITCM (RW) : ORIGIN = 0x00000000, LENGTH = 0x00008000 /* 32KB */
|
||||
|
||||
SRAM0 (RW) : ORIGIN = 0x21000000, LENGTH = 0x00010000 /* 64KB */
|
||||
SRAM1 (RW) : ORIGIN = 0x21010000, LENGTH = 0x00008000 /* 32KB */
|
||||
|
||||
PFLASH (RW) : ORIGIN = 0x01000000, LENGTH = 0x00200000 /* 2MB */
|
||||
|
||||
DFLASH (RW) : ORIGIN = 0x04000000, LENGTH = 0x00020000 /* 128KB */
|
||||
|
||||
NVR0 (RW) : ORIGIN = 0x04400000, LENGTH = 0x00004000 /* 16KB */
|
||||
NVR1 (RW) : ORIGIN = 0x04408000, LENGTH = 0x00004000 /* 16KB */
|
||||
NVR2 (RW) : ORIGIN = 0x04410000, LENGTH = 0x00002000 /* 8KB */
|
||||
|
||||
/* DTCM */
|
||||
DTCM (RW) : ORIGIN = 0x20000000, LENGTH = 0x0001FA00 /* 128K - 0x600 */
|
||||
DTCM_STACK (RW) : ORIGIN = 0x2001FA00, LENGTH = 0x00000600 /* 0x600 */
|
||||
|
||||
}
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
|
||||
/* The program code and other data goes into internal flash */
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(1024); /* VTOR must be align to 1K */
|
||||
__vector_table = .;
|
||||
__interrupts_start__ = .;
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.isr_vector))
|
||||
__interrupts_end__ = .;
|
||||
. = ALIGN(4);
|
||||
|
||||
*(.text) /* .text sections (code) */
|
||||
*(.text*) /* .text* sections (code) */
|
||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||
*(.init) /* section used in crti.o files */
|
||||
*(.fini) /* section used in crti.o files */
|
||||
*(.eh_frame) /* section used in crtbegin.o files */
|
||||
. = ALIGN(4);
|
||||
} > PFLASH
|
||||
|
||||
.data :
|
||||
{
|
||||
__ram_data_start = .;
|
||||
. = ALIGN(4);
|
||||
*(.data*)
|
||||
|
||||
. = ALIGN(4);
|
||||
/* preinit data */
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP(*(.preinit_array))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* init data */
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
|
||||
|
||||
. = ALIGN(4);
|
||||
/* finit data */
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* All data end */
|
||||
__ram_data_end = .;
|
||||
|
||||
} > DTCM AT > PFLASH
|
||||
|
||||
/* Non-cache RAM section with data initialization */
|
||||
.ncache_data :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__ram_ncache_data_start = .;
|
||||
*(.nocacheable_data*)
|
||||
__ram_ncache_data_end = .;
|
||||
. = ALIGN(4);
|
||||
} > SRAM1 AT > PFLASH
|
||||
|
||||
.bss(NOLOAD) :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__bss_start = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
__bss_end = .;
|
||||
. = ALIGN(4);
|
||||
} > DTCM
|
||||
|
||||
/* Non-cache RAM section with no initialization */
|
||||
.ncache_bss(NOLOAD) :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__ncache_bss_start = .;
|
||||
*(.nocacheable_bss*)
|
||||
__ncache_bss_end = .;
|
||||
. = ALIGN(4);
|
||||
} > SRAM1
|
||||
|
||||
|
||||
__HeapBegin = ORIGIN(DTCM_STACK);
|
||||
__HeapLimit = ORIGIN(DTCM_STACK) + 0x200 - 8;
|
||||
|
||||
__StackLimit = ORIGIN(DTCM_STACK)+0x200;
|
||||
__StackTop = ORIGIN(DTCM_STACK) + LENGTH(DTCM_STACK) - 8;
|
||||
|
||||
__rom_data_start = LOADADDR(.data);
|
||||
__rom_ncache_data_start = LOADADDR(.ncache_data);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/*
|
||||
* FreeRTOS Kernel V10.3.1
|
||||
* Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* Portion Copyright (C) 2019 StMicroelectronics, Inc. All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* http://www.FreeRTOS.org
|
||||
* http://aws.amazon.com/freertos
|
||||
*
|
||||
* 1 tab == 4 spaces!
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* These parameters and more are described within the 'configuration' section of the
|
||||
* FreeRTOS API documentation available on the FreeRTOS.org web site.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
/* Section where include file can be added */
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Ensure definitions are only used by the compiler, and not by the assembler. */
|
||||
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern uint32_t SystemCoreClock;
|
||||
#endif
|
||||
|
||||
//#ifndef CMSIS_device_header
|
||||
//#define CMSIS_device_header "niietcm4.h"
|
||||
//#define CMSIS_device_header "at32f435_437.h"
|
||||
//#endif /* CMSIS_device_header */
|
||||
//#include "niietcm4.h"
|
||||
//#include "at32f435_437.h"
|
||||
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 1
|
||||
|
||||
#define configENABLE_FPU 1
|
||||
#define configENABLE_MPU 0
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configSUPPORT_STATIC_ALLOCATION 1
|
||||
#define configSUPPORT_DYNAMIC_ALLOCATION 1
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCPU_CLOCK_HZ ( 1000 )
|
||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||
#define configMAX_PRIORITIES ( 56 )
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)64)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)52000)
|
||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||
#define configUSE_TRACE_FACILITY 1
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
#define configUSE_RECURSIVE_MUTEXES 1
|
||||
#define configUSE_COUNTING_SEMAPHORES 1
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
|
||||
/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
|
||||
/* Defaults to size_t for backward compatibility, but can be changed
|
||||
if lengths will always be less than the number of bytes in a size_t. */
|
||||
#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
|
||||
/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Software timer definitions. */
|
||||
#define configUSE_TIMERS 1
|
||||
#define configTIMER_TASK_PRIORITY ( 2 )
|
||||
#define configTIMER_QUEUE_LENGTH 10
|
||||
#define configTIMER_TASK_STACK_DEPTH 128
|
||||
|
||||
/* CMSIS-RTOS V2 flags */
|
||||
#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
|
||||
#define configUSE_OS2_THREAD_ENUMERATE 1
|
||||
#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
|
||||
#define configUSE_OS2_THREAD_FLAGS 1
|
||||
#define configUSE_OS2_TIMER 1
|
||||
#define configUSE_OS2_MUTEX 1
|
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 1
|
||||
#define INCLUDE_vTaskDelete 1
|
||||
#define INCLUDE_vTaskCleanUpResources 0
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
#define INCLUDE_xTaskGetSchedulerState 1
|
||||
#define INCLUDE_xTimerPendFunctionCall 1
|
||||
#define INCLUDE_xQueueGetMutexHolder 1
|
||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||
#define INCLUDE_xTaskGetCurrentTaskHandle 1
|
||||
#define INCLUDE_eTaskGetState 1
|
||||
|
||||
/*
|
||||
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
|
||||
* by the application thus the correct define need to be enabled below
|
||||
*/
|
||||
#define USE_FreeRTOS_HEAP_4
|
||||
|
||||
/* Cortex-M specific definitions. */
|
||||
#ifdef __NVIC_PRIO_BITS
|
||||
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
|
||||
#define configPRIO_BITS __NVIC_PRIO_BITS
|
||||
#else
|
||||
#define configPRIO_BITS 4
|
||||
#endif
|
||||
|
||||
/* The lowest interrupt priority that can be used in a call to a "set priority"
|
||||
function. */
|
||||
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
|
||||
|
||||
/* The highest interrupt priority that can be used by any interrupt service
|
||||
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
|
||||
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
|
||||
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
|
||||
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
|
||||
|
||||
/* Interrupt priorities used by the kernel port layer itself. These are generic
|
||||
to all Cortex-M ports, and do not rely on any particular library functions. */
|
||||
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
//#define configASSERT(x) if ((x) == 0) {nvic_system_reset();}
|
||||
#define configASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||
standard names. */
|
||||
#define vPortSVCHandler SVC_Handler
|
||||
#define xPortPendSVHandler PendSV_Handler
|
||||
|
||||
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
|
||||
|
||||
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0
|
||||
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
|
||||
|
||||
#ifndef INCLUDE_DRIVER_HEADER_H_
|
||||
#define INCLUDE_DRIVER_HEADER_H_
|
||||
|
||||
#include "fc7xxx_driver_fcuart.h"
|
||||
#include "fc7xxx_driver_pcc.h"
|
||||
#include "fc7xxx_driver_port.h"
|
||||
#include "fc7xxx_driver_scg.h"
|
||||
#include "fc7xxx_driver_gpio.h"
|
||||
#include "fc7xxx_driver_dma.h"
|
||||
#include "interrupt_manager.h"
|
||||
|
||||
|
||||
/* peripheral instance define */
|
||||
/* UART */
|
||||
#define UART_USED_INSTANCE2 STD_ON
|
||||
#define UART_MAX_NUM FCUART_INSTANCE_COUNT
|
||||
#define UART_RXBUF_SIZE 256U
|
||||
|
||||
/* FCUART0 ~ FCUART7 can be used in FC7240, just demo FCUART2 in FC7240-EVB */
|
||||
#define UART_ACTIVE_INDEX 2
|
||||
|
||||
|
||||
#if UART_ACTIVE_INDEX == 2
|
||||
#undef UART_USED_INSTANCE2
|
||||
#define UART_USED_INSTANCE2 STD_ON
|
||||
#define UART_ACTIVE_INSTANCE UART_INSTANCE_2
|
||||
/* if use other uart instance in your board,delete follows code */
|
||||
#else
|
||||
#error Instance invalid, please select correct index
|
||||
#endif
|
||||
|
||||
#define PCC_CLK_FCUARTn(x) PCC_CLK_FCUART##x
|
||||
#define _PCC_CLK_FCUART(x) PCC_CLK_FCUARTn(x)
|
||||
#define PCC_CLK_FCUART _PCC_CLK_FCUART(UART_ACTIVE_INDEX)
|
||||
|
||||
#define FCUART_IRQn_HANDLER(x) FCUART##x##_RxTx_IRQHandler
|
||||
#define _FCUART_IRQ_HANDLER(x) FCUART_IRQn_HANDLER(x)
|
||||
#define FCUART_IRQ_HANDLER _FCUART_IRQ_HANDLER(UART_ACTIVE_INDEX)
|
||||
|
||||
#define FCUART_IRQn_INDEX(x) FCUART##x##_IRQn
|
||||
#define _FCUART_IRQ_INDEX(x) FCUART_IRQn_INDEX(x)
|
||||
#define FCUART_IRQ_INDEX _FCUART_IRQ_INDEX(UART_ACTIVE_INDEX)
|
||||
|
||||
#endif /* INCLUDE_DRIVER_HEADER_H_ */
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
//
|
||||
// Created by cfif on 22.09.2025.
|
||||
//
|
||||
#include "Clock.h"
|
||||
#include "cmsis_os.h"
|
||||
|
||||
_Noreturn void stop() {
|
||||
while (1) {
|
||||
asm("nop");
|
||||
}
|
||||
}
|
||||
|
||||
#define STOP stop();
|
||||
|
||||
#if (configCHECK_FOR_STACK_OVERFLOW > 0)
|
||||
void vApplicationStackOverflowHook(TaskHandle_t xTask, const char *pcTaskName) {
|
||||
PROCESS_UNUSED_VAR(xTask);
|
||||
PROCESS_UNUSED_VAR(pcTaskName);
|
||||
STOP
|
||||
}
|
||||
#endif
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Bsp_CLOCK_Init();
|
||||
|
||||
osKernelInitialize();
|
||||
|
||||
osKernelStart();
|
||||
|
||||
STOP
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"./",
|
||||
"./clock",
|
||||
"./int"
|
||||
],
|
||||
"srcs": [
|
||||
"./**.c",
|
||||
"./clock/**.c",
|
||||
"./int/**.c",
|
||||
"./**.s"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,480 @@
|
|||
/* ================================================================================================== */
|
||||
/* BRIEF : Startup - Startup file for FC7240 */
|
||||
/* PERIPHERAL : N/A */
|
||||
/* PLATFORM : Flagchip FC7240 */
|
||||
/* SOFTWARE VERSION : 0.1.0 */
|
||||
/* VENDOR : Flagchip */
|
||||
/* Copyright 2024 Flagchip Semiconductors Co., Ltd. */
|
||||
/* All Rights Reserved. */
|
||||
/* ================================================================================================== */
|
||||
/* ================================================================================================== */
|
||||
/* Revision History */
|
||||
/* Version Date Initials CR# Descriptions */
|
||||
/* --------- ---------- ------------- ---------- --------------- */
|
||||
/* 0.1.0 2024-01-12 qxw0030 N/A Initial version */
|
||||
/* ================================================================================================== */
|
||||
|
||||
.syntax unified
|
||||
.arch armv7-m
|
||||
|
||||
.extern __StackTop
|
||||
.extern __StackLimit
|
||||
|
||||
/* ================================================================================================== */
|
||||
/* Set vector table */
|
||||
/* ================================================================================================== */
|
||||
.section .isr_vector
|
||||
.align 2
|
||||
.globl __isr_vector
|
||||
|
||||
/* vector table */
|
||||
__isr_vector:
|
||||
.long __StackTop /* Top of Stack */
|
||||
.long Reset_Handler /* Reset Handler */
|
||||
.long NMI_Handler /* NMI Handler */
|
||||
.long HardFault_Handler /* Hard Fault Handler */
|
||||
.long MemManage_Handler /* MPU Fault Handler */
|
||||
.long BusFault_Handler /* Bus Fault Handler */
|
||||
.long UsageFault_Handler /* Usage Fault Handler */
|
||||
.long 0 /* Reserved */
|
||||
.long 0 /* Reserved */
|
||||
.long 0 /* Reserved */
|
||||
.long 0 /* Reserved */
|
||||
.long SVC_Handler /* SVCall Handler */
|
||||
.long DebugMon_Handler /* Debug Monitor Handler */
|
||||
.long 0 /* Reserved */
|
||||
.long PendSV_Handler /* PendSV Handler */
|
||||
.long SysTick_Handler /* SysTick Handler */
|
||||
|
||||
/* External Interrupts*/
|
||||
.long DMA0_IRQHandler /* DMA channel 0 transfer complete */
|
||||
.long DMA1_IRQHandler /* DMA channel 1 transfer complete */
|
||||
.long DMA2_IRQHandler /* DMA channel 2 transfer complete */
|
||||
.long DMA3_IRQHandler /* DMA channel 3 transfer complete */
|
||||
.long DMA4_IRQHandler /* DMA channel 4 transfer complete */
|
||||
.long DMA5_IRQHandler /* DMA channel 5 transfer complete */
|
||||
.long DMA6_IRQHandler /* DMA channel 6 transfer complete */
|
||||
.long DMA7_IRQHandler /* DMA channel 7 transfer complete */
|
||||
.long DMA8_IRQHandler /* DMA channel 8 transfer complete */
|
||||
.long DMA9_IRQHandler /* DMA channel 9 transfer complete */
|
||||
.long DMA10_IRQHandler /* DMA channel 10 transfer complete */
|
||||
.long DMA11_IRQHandler /* DMA channel 11 transfer complete */
|
||||
.long DMA12_IRQHandler /* DMA channel 12 transfer complete */
|
||||
.long DMA13_IRQHandler /* DMA channel 13 transfer complete */
|
||||
.long DMA14_IRQHandler /* DMA channel 14 transfer complete */
|
||||
.long DMA15_IRQHandler /* DMA channel 15 transfer complete */
|
||||
.long DMA_Error_IRQHandler /* DMA error interrupt channels 0-31 */
|
||||
.long CPM_IRQHandler /* FPU etc. interrupt */
|
||||
.long FC_IRQHandler /* FC Command complete */
|
||||
.long PMC_IRQHandler /* HVD/LVD etc. interrupt */
|
||||
.long TMU_IRQHandler /* Temperature Monitor Unit interrupt */
|
||||
.long WDOG0_IRQHandler /* interrupt request out before wdg reset out */
|
||||
.long WDOG1_IRQHandler /* interrupt request out before wdg reset out */
|
||||
.long FCSMU0_IRQHandler /* Fault Control and Safety Manage Unit */
|
||||
.long STCU0_IRQHandler /* Safety Control Unit interrupt */
|
||||
.long ERM_fault_IRQHandler /* ERM single/double bit error correction */
|
||||
.long MAM0_IRQHandler /* Matrix Access Monitor interrupt */
|
||||
.long RGM_Pre_IRQHandler /* RGM pre-reset Interrupt */
|
||||
.long INTM0_IRQHandler /* INTM alarm interrupt */
|
||||
.long ISM0_IRQHandler /* ISM0 interrupt */
|
||||
.long MB_IRQHandler /* Mail Box interrupt */
|
||||
.long SCG_IRQHandler /* SCG bus interrupt request */
|
||||
.long CMU0_IRQHandler /* CMU0 interrupt */
|
||||
.long CMU1_IRQHandler /* CMU1 interrupt */
|
||||
.long CMU2_IRQHandler /* CMU2 interrupt */
|
||||
.long CMU3_IRQHandler /* CMU3 interrupt */
|
||||
.long CMU4_IRQHandler /* CMU4 interrupt */
|
||||
.long TSTMP0_IRQHandler /* TimerStamp0 interrupt */
|
||||
.long TSTMP1_IRQHandler /* TimerStamp1 interrupt */
|
||||
.long CORDIC_IRQHandler /* CORDIC Accelerator interrupt */
|
||||
.long HSM0_IRQHandler /* HSM error interrupt */
|
||||
.long FCPIT0_IRQHandler /* FCPIT0 interrupt */
|
||||
.long RTC_IRQHandler /* RTC alarm or seconds interrupt */
|
||||
.long AONTIMER_IRQHandler /* AONTIMER interrupt request */
|
||||
.long SWI_IRQHandler /* Software interrupt */
|
||||
.long FREQM_IRQHandler /* FREQM interrupt */
|
||||
.long ADC0_IRQHandler /* ADC0 interrupt request. */
|
||||
.long ADC1_IRQHandler /* ADC1 interrupt request. */
|
||||
.long PTIMER0_IRQHandler /* PTIMER0 interrupt */
|
||||
.long PTIMER1_IRQHandler /* PTIMER1 interrupt */
|
||||
.long CAN0_IRQHandler /* CAN0 Interrupt */
|
||||
.long CAN1_IRQHandler /* CAN1 Interrupt */
|
||||
.long CAN2_IRQHandler /* CAN2 Interrupt */
|
||||
.long CAN3_IRQHandler /* CAN3 Interrupt */
|
||||
.long FCIIC0_IRQHandler /* FCIIC0 Interrupt */
|
||||
.long FCIIC1_IRQHandler /* FCIIC1 Interrupt */
|
||||
.long FCSPI0_IRQHandler /* FCSPI0 Interrupt */
|
||||
.long FCSPI1_IRQHandler /* FCSPI1 Interrupt */
|
||||
.long FCSPI2_IRQHandler /* FCSPI2 Interrupt */
|
||||
.long FCSPI3_IRQHandler /* FCSPI3 Interrupt */
|
||||
.long FCSPI4_IRQHandler /* FCSPI4 Interrupt */
|
||||
.long FCSPI5_IRQHandler /* FCSPI5 Interrupt */
|
||||
.long FCUART0_RxTx_IRQHandler /* FCUART0 Transmit / Receive Interrupt */
|
||||
.long FCUART1_RxTx_IRQHandler /* FCUART1 Transmit / Receive Interrupt */
|
||||
.long FCUART2_RxTx_IRQHandler /* FCUART2 Transmit / Receive Interrupt */
|
||||
.long FCUART3_RxTx_IRQHandler /* FCUART3 Transmit / Receive Interrupt */
|
||||
.long FCUART4_RxTx_IRQHandler /* FCUART4 Transmit / Receive Interrupt */
|
||||
.long FCUART5_RxTx_IRQHandler /* FCUART5 Transmit / Receive Interrupt */
|
||||
.long FCUART6_RxTx_IRQHandler /* FCUART6 Transmit / Receive Interrupt */
|
||||
.long FCUART7_RxTx_IRQHandler /* FCUART7 Transmit / Receive Interrupt */
|
||||
.long FTU0_IRQHandler /* FTU0 all source interrupt */
|
||||
.long FTU1_IRQHandler /* FTU1 all source interrupt */
|
||||
.long FTU2_IRQHandler /* FTU2 all source interrupt */
|
||||
.long FTU3_IRQHandler /* FTU3 all source interrupt */
|
||||
.long FTU4_IRQHandler /* FTU4 all source interrupt */
|
||||
.long FTU5_IRQHandler /* FTU5 all source interrupt */
|
||||
.long FTU6_IRQHandler /* FTU6 all source interrupt */
|
||||
.long FTU7_IRQHandler /* FTU7 all source interrupt */
|
||||
.long CMP0_IRQHandler /* CMP0 interrupt request */
|
||||
.long CMP1_IRQHandler /* CMP1 interrupt request */
|
||||
.long PORTA_IRQHandler /* Port A pin detect interrupt */
|
||||
.long PORTB_IRQHandler /* Port B pin detect interrupt */
|
||||
.long PORTC_IRQHandler /* Port C pin detect interrupt */
|
||||
.long PORTD_IRQHandler /* Port D pin detect interrupt */
|
||||
.long PORTE_IRQHandler /* Port E pin detect interrupt */
|
||||
.long MSC0_IRQHandler /* MSC interrupt */
|
||||
.long SENT0_IRQHandler /* SENT all interrupt (fast or slow) */
|
||||
.long TPU0_CH0_7_IRQHandler /* TPU0 CH0-7 interrupt */
|
||||
.long TPU0_CH8_15_IRQHandler /* TPU0 CH8-15 interrupt */
|
||||
.long TPU0_CH16_23_IRQHandler /* TPU0 CH16-23 interrupt */
|
||||
.long TPU0_CH24_31_IRQHandler /* TPU0 CH24-31 interrupt */
|
||||
.long HSM0_CRYPTO_IRQHandler /* HSM crypto interrupt */
|
||||
.long DefaultISR /* 108 */
|
||||
.long DefaultISR /* 109 */
|
||||
.long DefaultISR /* 110 */
|
||||
.long DefaultISR /* 111 */
|
||||
.long DefaultISR /* 112 */
|
||||
.long DefaultISR /* 113 */
|
||||
.long DefaultISR /* 114 */
|
||||
.long DefaultISR /* 115 */
|
||||
.long DefaultISR /* 116 */
|
||||
.long DefaultISR /* 117 */
|
||||
.long DefaultISR /* 118 */
|
||||
.long DefaultISR /* 119 */
|
||||
.long DefaultISR /* 120 */
|
||||
.long DefaultISR /* 121 */
|
||||
.long DefaultISR /* 122 */
|
||||
.long DefaultISR /* 123 */
|
||||
.long DefaultISR /* 124 */
|
||||
.long DefaultISR /* 125 */
|
||||
.long DefaultISR /* 126 */
|
||||
.long DefaultISR /* 127 */
|
||||
.long DefaultISR /* 128 */
|
||||
.long DefaultISR /* 129 */
|
||||
.long DefaultISR /* 130 */
|
||||
.long DefaultISR /* 131 */
|
||||
.long DefaultISR /* 132 */
|
||||
.long DefaultISR /* 133 */
|
||||
.long DefaultISR /* 134 */
|
||||
.long DefaultISR /* 135 */
|
||||
.long DefaultISR /* 136 */
|
||||
.long DefaultISR /* 137 */
|
||||
.long DefaultISR /* 138 */
|
||||
.long DefaultISR /* 139 */
|
||||
.long DefaultISR /* 140 */
|
||||
.long DefaultISR /* 141 */
|
||||
.long DefaultISR /* 142 */
|
||||
.long DefaultISR /* 143 */
|
||||
.long DefaultISR /* 144 */
|
||||
.long DefaultISR /* 145 */
|
||||
.long DefaultISR /* 146 */
|
||||
.long DefaultISR /* 147 */
|
||||
.long DefaultISR /* 148 */
|
||||
.long DefaultISR /* 149 */
|
||||
.long DefaultISR /* 150 */
|
||||
.long DefaultISR /* 151 */
|
||||
.long DefaultISR /* 152 */
|
||||
.long DefaultISR /* 153 */
|
||||
.long DefaultISR /* 154 */
|
||||
.long DefaultISR /* 155 */
|
||||
.long DefaultISR /* 156 */
|
||||
.long DefaultISR /* 157 */
|
||||
.long DefaultISR /* 158 */
|
||||
.long DefaultISR /* 159 */
|
||||
.long DefaultISR /* 160 */
|
||||
.long DefaultISR /* 161 */
|
||||
.long DefaultISR /* 162 */
|
||||
.long DefaultISR /* 163 */
|
||||
.long DefaultISR /* 164 */
|
||||
.long DefaultISR /* 165 */
|
||||
.long DefaultISR /* 166 */
|
||||
.long DefaultISR /* 167 */
|
||||
.long DefaultISR /* 168 */
|
||||
.long DefaultISR /* 169 */
|
||||
.long DefaultISR /* 170 */
|
||||
.long DefaultISR /* 171 */
|
||||
.long DefaultISR /* 172 */
|
||||
.long DefaultISR /* 173 */
|
||||
.long DefaultISR /* 174 */
|
||||
.long DefaultISR /* 175 */
|
||||
.long DefaultISR /* 176 */
|
||||
.long DefaultISR /* 177 */
|
||||
.long DefaultISR /* 178 */
|
||||
.long DefaultISR /* 179 */
|
||||
.long DefaultISR /* 180 */
|
||||
.long DefaultISR /* 181 */
|
||||
.long DefaultISR /* 182 */
|
||||
.long DefaultISR /* 183 */
|
||||
.long DefaultISR /* 184 */
|
||||
.long DefaultISR /* 185 */
|
||||
.long DefaultISR /* 186 */
|
||||
.long DefaultISR /* 187 */
|
||||
.long DefaultISR /* 188 */
|
||||
.long DefaultISR /* 189 */
|
||||
.long DefaultISR /* 190 */
|
||||
.long DefaultISR /* 191 */
|
||||
.long DefaultISR /* 192 */
|
||||
.long DefaultISR /* 193 */
|
||||
.long DefaultISR /* 194 */
|
||||
.long DefaultISR /* 195 */
|
||||
.long DefaultISR /* 196 */
|
||||
.long DefaultISR /* 197 */
|
||||
.long DefaultISR /* 198 */
|
||||
.long DefaultISR /* 199 */
|
||||
.long DefaultISR /* 200 */
|
||||
.long DefaultISR /* 201 */
|
||||
.long DefaultISR /* 202 */
|
||||
.long DefaultISR /* 203 */
|
||||
.long DefaultISR /* 204 */
|
||||
.long DefaultISR /* 205 */
|
||||
.long DefaultISR /* 206 */
|
||||
.long DefaultISR /* 207 */
|
||||
.long DefaultISR /* 208 */
|
||||
.long DefaultISR /* 209 */
|
||||
.long DefaultISR /* 210 */
|
||||
.long DefaultISR /* 211 */
|
||||
.long DefaultISR /* 212 */
|
||||
.long DefaultISR /* 213 */
|
||||
.long DefaultISR /* 214 */
|
||||
.long DefaultISR /* 215 */
|
||||
.long DefaultISR /* 216 */
|
||||
.long DefaultISR /* 217 */
|
||||
.long DefaultISR /* 218 */
|
||||
.long DefaultISR /* 219 */
|
||||
.long DefaultISR /* 220 */
|
||||
.long DefaultISR /* 221 */
|
||||
.long DefaultISR /* 222 */
|
||||
.long DefaultISR /* 223 */
|
||||
.long DefaultISR /* 224 */
|
||||
.long DefaultISR /* 225 */
|
||||
.long DefaultISR /* 226 */
|
||||
.long DefaultISR /* 227 */
|
||||
.long DefaultISR /* 228 */
|
||||
.long DefaultISR /* 229 */
|
||||
.long DefaultISR /* 230 */
|
||||
.long DefaultISR /* 231 */
|
||||
.long DefaultISR /* 232 */
|
||||
.long DefaultISR /* 233 */
|
||||
.long DefaultISR /* 234 */
|
||||
.long DefaultISR /* 235 */
|
||||
.long DefaultISR /* 236 */
|
||||
.long DefaultISR /* 237 */
|
||||
.long DefaultISR /* 238 */
|
||||
.long DefaultISR /* 239 */
|
||||
.long DefaultISR /* 240 */
|
||||
.long DefaultISR /* 241 */
|
||||
.long DefaultISR /* 242 */
|
||||
.long DefaultISR /* 243 */
|
||||
.long DefaultISR /* 244 */
|
||||
.long DefaultISR /* 245 */
|
||||
.long DefaultISR /* 246 */
|
||||
.long DefaultISR /* 247 */
|
||||
.long DefaultISR /* 248 */
|
||||
.long DefaultISR /* 249 */
|
||||
.long DefaultISR /* 250 */
|
||||
.long DefaultISR /* 251 */
|
||||
.long DefaultISR /* 252 */
|
||||
.long DefaultISR /* 253 */
|
||||
.long DefaultISR /* 254 */
|
||||
.long 0xFFFFFFFF /* Reserved for user TRIM value */
|
||||
|
||||
.size __isr_vector, . - __isr_vector
|
||||
|
||||
|
||||
/**************************************************************/
|
||||
/************************ set other ***************************/
|
||||
.text
|
||||
.thumb
|
||||
|
||||
/* Reset Handler */
|
||||
|
||||
.thumb_func
|
||||
.align 2
|
||||
.globl Reset_Handler
|
||||
.weak Reset_Handler
|
||||
.type Reset_Handler, %function
|
||||
|
||||
Reset_Handler:
|
||||
cpsid i /* Mask interrupts */
|
||||
|
||||
/* Init the rest of the registers */
|
||||
ldr r1,=0
|
||||
ldr r2,=0
|
||||
ldr r3,=0
|
||||
ldr r4,=0
|
||||
ldr r5,=0
|
||||
ldr r6,=0
|
||||
ldr r7,=0
|
||||
mov r8,r7
|
||||
mov r9,r7
|
||||
mov r10,r7
|
||||
mov r11,r7
|
||||
mov r12,r7
|
||||
|
||||
ldr r0, =0xE000ED08
|
||||
ldr r1, =__vector_table
|
||||
str r1, [r0]
|
||||
|
||||
/* Initialize the stack pointer */
|
||||
ldr r0,=__StackTop
|
||||
mov sp,r0 ; sp=r13
|
||||
|
||||
/* Clear Stack */
|
||||
ldr r2, =__StackLimit
|
||||
ldr r4, =__StackTop
|
||||
movs r3, #0
|
||||
b LoopFillZero_STACK
|
||||
|
||||
FillZero_STACK:
|
||||
str r3, [r2]
|
||||
adds r2, r2, #4
|
||||
|
||||
LoopFillZero_STACK:
|
||||
cmp r2, r4
|
||||
bcc FillZero_STACK
|
||||
|
||||
/* System Initialization */
|
||||
ldr r0,=System_Init
|
||||
blx r0
|
||||
|
||||
/* Initialize .data and .bss sections */
|
||||
ldr r0,=Data_Init
|
||||
blx r0
|
||||
|
||||
cpsie i /* Unmask interrupts */
|
||||
bl main
|
||||
JumpToSelf:
|
||||
b JumpToSelf
|
||||
|
||||
.pool
|
||||
.size Reset_Handler, . - Reset_Handler
|
||||
|
||||
.align 1
|
||||
.thumb_func
|
||||
.weak DefaultISR
|
||||
.type DefaultISR, %function
|
||||
DefaultISR:
|
||||
b DefaultISR
|
||||
.size DefaultISR, . - DefaultISR
|
||||
|
||||
/* Macro to define default handlers. Default handler
|
||||
* will be weak symbol and just dead loops. They can be
|
||||
* overwritten by other handlers */
|
||||
.macro def_irq_handler handler_name
|
||||
.weak \handler_name
|
||||
.set \handler_name, DefaultISR
|
||||
.endm
|
||||
|
||||
/* Exception Handlers */
|
||||
def_irq_handler NMI_Handler
|
||||
def_irq_handler HardFault_Handler
|
||||
def_irq_handler MemManage_Handler
|
||||
def_irq_handler BusFault_Handler
|
||||
def_irq_handler UsageFault_Handler
|
||||
def_irq_handler SVC_Handler
|
||||
def_irq_handler DebugMon_Handler
|
||||
def_irq_handler PendSV_Handler
|
||||
def_irq_handler SysTick_Handler
|
||||
def_irq_handler DMA0_IRQHandler
|
||||
def_irq_handler DMA1_IRQHandler
|
||||
def_irq_handler DMA2_IRQHandler
|
||||
def_irq_handler DMA3_IRQHandler
|
||||
def_irq_handler DMA4_IRQHandler
|
||||
def_irq_handler DMA5_IRQHandler
|
||||
def_irq_handler DMA6_IRQHandler
|
||||
def_irq_handler DMA7_IRQHandler
|
||||
def_irq_handler DMA8_IRQHandler
|
||||
def_irq_handler DMA9_IRQHandler
|
||||
def_irq_handler DMA10_IRQHandler
|
||||
def_irq_handler DMA11_IRQHandler
|
||||
def_irq_handler DMA12_IRQHandler
|
||||
def_irq_handler DMA13_IRQHandler
|
||||
def_irq_handler DMA14_IRQHandler
|
||||
def_irq_handler DMA15_IRQHandler
|
||||
def_irq_handler DMA_Error_IRQHandler
|
||||
def_irq_handler CPM_IRQHandler
|
||||
def_irq_handler FC_IRQHandler
|
||||
def_irq_handler PMC_IRQHandler
|
||||
def_irq_handler TMU_IRQHandler
|
||||
def_irq_handler WDOG0_IRQHandler
|
||||
def_irq_handler WDOG1_IRQHandler
|
||||
def_irq_handler FCSMU0_IRQHandler
|
||||
def_irq_handler STCU0_IRQHandler
|
||||
def_irq_handler ERM_fault_IRQHandler
|
||||
def_irq_handler MAM0_IRQHandler
|
||||
def_irq_handler RGM_Pre_IRQHandler
|
||||
def_irq_handler INTM0_IRQHandler
|
||||
def_irq_handler ISM0_IRQHandler
|
||||
def_irq_handler MB_IRQHandler
|
||||
def_irq_handler SCG_IRQHandler
|
||||
def_irq_handler CMU0_IRQHandler
|
||||
def_irq_handler CMU1_IRQHandler
|
||||
def_irq_handler CMU2_IRQHandler
|
||||
def_irq_handler CMU3_IRQHandler
|
||||
def_irq_handler CMU4_IRQHandler
|
||||
def_irq_handler TSTMP0_IRQHandler
|
||||
def_irq_handler TSTMP1_IRQHandler
|
||||
def_irq_handler CORDIC_IRQHandler
|
||||
def_irq_handler HSM0_IRQHandler
|
||||
def_irq_handler FCPIT0_IRQHandler
|
||||
def_irq_handler RTC_IRQHandler
|
||||
def_irq_handler AONTIMER_IRQHandler
|
||||
def_irq_handler SWI_IRQHandler
|
||||
def_irq_handler FREQM_IRQHandler
|
||||
def_irq_handler ADC0_IRQHandler
|
||||
def_irq_handler ADC1_IRQHandler
|
||||
def_irq_handler PTIMER0_IRQHandler
|
||||
def_irq_handler PTIMER1_IRQHandler
|
||||
def_irq_handler CAN0_IRQHandler
|
||||
def_irq_handler CAN1_IRQHandler
|
||||
def_irq_handler CAN2_IRQHandler
|
||||
def_irq_handler CAN3_IRQHandler
|
||||
def_irq_handler FCIIC0_IRQHandler
|
||||
def_irq_handler FCIIC1_IRQHandler
|
||||
def_irq_handler FCSPI0_IRQHandler
|
||||
def_irq_handler FCSPI1_IRQHandler
|
||||
def_irq_handler FCSPI2_IRQHandler
|
||||
def_irq_handler FCSPI3_IRQHandler
|
||||
def_irq_handler FCSPI4_IRQHandler
|
||||
def_irq_handler FCSPI5_IRQHandler
|
||||
def_irq_handler FCUART0_RxTx_IRQHandler
|
||||
def_irq_handler FCUART1_RxTx_IRQHandler
|
||||
def_irq_handler FCUART2_RxTx_IRQHandler
|
||||
def_irq_handler FCUART3_RxTx_IRQHandler
|
||||
def_irq_handler FCUART4_RxTx_IRQHandler
|
||||
def_irq_handler FCUART5_RxTx_IRQHandler
|
||||
def_irq_handler FCUART6_RxTx_IRQHandler
|
||||
def_irq_handler FCUART7_RxTx_IRQHandler
|
||||
def_irq_handler FTU0_IRQHandler
|
||||
def_irq_handler FTU1_IRQHandler
|
||||
def_irq_handler FTU2_IRQHandler
|
||||
def_irq_handler FTU3_IRQHandler
|
||||
def_irq_handler FTU4_IRQHandler
|
||||
def_irq_handler FTU5_IRQHandler
|
||||
def_irq_handler FTU6_IRQHandler
|
||||
def_irq_handler FTU7_IRQHandler
|
||||
def_irq_handler CMP0_IRQHandler
|
||||
def_irq_handler CMP1_IRQHandler
|
||||
def_irq_handler PORTA_IRQHandler
|
||||
def_irq_handler PORTB_IRQHandler
|
||||
def_irq_handler PORTC_IRQHandler
|
||||
def_irq_handler PORTD_IRQHandler
|
||||
def_irq_handler PORTE_IRQHandler
|
||||
def_irq_handler MSC0_IRQHandler
|
||||
def_irq_handler SENT0_IRQHandler
|
||||
def_irq_handler TPU0_CH0_7_IRQHandler
|
||||
def_irq_handler TPU0_CH8_15_IRQHandler
|
||||
def_irq_handler TPU0_CH16_23_IRQHandler
|
||||
def_irq_handler TPU0_CH24_31_IRQHandler
|
||||
def_irq_handler HSM0_CRYPTO_IRQHandler
|
||||
.end
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
/**
|
||||
* @file system_init.c
|
||||
* @author Flagchip
|
||||
* @brief interrupt configuration
|
||||
* @version 0.1.0
|
||||
* @date 2024-01-12
|
||||
*
|
||||
* @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd.
|
||||
*
|
||||
*/
|
||||
|
||||
/* ********************************************************************************
|
||||
* Revision History:
|
||||
*
|
||||
* Version Date Author Descriptions
|
||||
* --------- ---------- ------------ ---------------
|
||||
* 0.1.0 2024-01-12 Flagchip038 First version for gcc, iar, keil, ghs data init
|
||||
******************************************************************************** */
|
||||
|
||||
|
||||
#include "system_init.h"
|
||||
#include "fc7xxx_driver_fpu.h"
|
||||
|
||||
static void data_clear(uint32_t u32StartAddr, uint32_t u32EndAddr);
|
||||
static void data_copy(uint32_t u32SourceAddr, uint32_t u32DestAddr, uint32_t u32DestEndAddr);
|
||||
|
||||
/**
|
||||
* \brief System Initialization
|
||||
*
|
||||
*/
|
||||
void System_Init(void)
|
||||
{
|
||||
/* disable wdog 0 */
|
||||
*(volatile uint32 *)0x40022004 = 0x08181982;
|
||||
while (0U == (0x800u & *(volatile uint32 *)0x40022000));
|
||||
*(volatile uint32 *)0x40022000 = 0x2920;
|
||||
*(volatile uint32 *)0x40022008 = 0xF000;
|
||||
while (0U == (0x400u & *(volatile uint32 *)0x40022000));
|
||||
|
||||
/* disable wdog 1 */
|
||||
*(volatile uint32 *)0x40433004 = 0x08181982;
|
||||
while (0U == (0x800u & *(volatile uint32 *)0x40433000));
|
||||
*(volatile uint32 *)0x40433000 = 0x2920;
|
||||
*(volatile uint32 *)0x40433008 = 0xF000;
|
||||
while (0U == (0x400u & *(volatile uint32 *)0x40433000));
|
||||
|
||||
#if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
|
||||
FPU_Enable(); /* Enable FPU */
|
||||
#endif /* ((__FPU_PRESENT == 1) && (__FPU_USED == 1)) */
|
||||
|
||||
}
|
||||
|
||||
void Data_Init(void)
|
||||
{
|
||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
||||
extern uint32_t Load$$RW_m_dtcm$$Base;
|
||||
extern uint32_t Image$$RW_m_dtcm$$Base;
|
||||
extern uint32_t Image$$RW_m_dtcm$$Limit;
|
||||
|
||||
extern uint32_t Image$$RW_m_dtcm$$ZI$$Limit;
|
||||
extern uint32_t Image$$RW_m_dtcm$$ZI$$Base;
|
||||
|
||||
extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Base;
|
||||
extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Limit;
|
||||
|
||||
/* data/bss/heap clear */
|
||||
data_clear((uint32_t)&Image$$RW_m_dtcm$$Base, (uint32_t)&Image$$RW_m_dtcm$$Limit);
|
||||
data_clear((uint32_t)&Image$$RW_m_dtcm$$ZI$$Base, (uint32_t)&Image$$RW_m_dtcm$$ZI$$Limit);
|
||||
data_clear((uint32_t)&Image$$ARM_LIB_HEAP$$ZI$$Base, (uint32_t)&Image$$ARM_LIB_HEAP$$ZI$$Limit);
|
||||
|
||||
/* data */
|
||||
data_copy((uint32_t)&Load$$RW_m_dtcm$$Base, (uint32_t)&Image$$RW_m_dtcm$$Base, (uint32_t)&Image$$RW_m_dtcm$$Limit);
|
||||
|
||||
#elif defined(__GNUC__) || defined(__ghs__)
|
||||
extern uint32 __rom_data_start[];
|
||||
extern uint32 __ram_data_start[];
|
||||
extern uint32 __ram_data_end[];
|
||||
extern uint32 __bss_start[];
|
||||
extern uint32 __bss_end[];
|
||||
extern uint32 __rom_ncache_data_start[];
|
||||
extern uint32 __ram_ncache_data_start[];
|
||||
extern uint32 __ram_ncache_data_end[];
|
||||
extern uint32 __ncache_bss_start[];
|
||||
extern uint32 __ncache_bss_end[];
|
||||
|
||||
|
||||
/* data clear */
|
||||
data_clear((uint32_t)__ram_data_start, (uint32_t)__ram_data_end);
|
||||
data_clear((uint32_t)__bss_start, (uint32_t)__bss_end);
|
||||
data_clear((uint32_t)__ram_ncache_data_start, (uint32_t)__ram_ncache_data_end);
|
||||
data_clear((uint32_t)__ncache_bss_start, (uint32_t)__ncache_bss_end);
|
||||
|
||||
/* data copy */
|
||||
data_copy((uint32_t)__rom_data_start, (uint32_t)__ram_data_start, (uint32_t)__ram_data_end);
|
||||
data_copy((uint32_t)__rom_ncache_data_start, (uint32_t)__ram_ncache_data_start, (uint32_t)__ram_ncache_data_end);
|
||||
|
||||
#elif defined(__ICCARM__)
|
||||
#pragma section=".data"
|
||||
#pragma section=".data_init"
|
||||
#pragma section=".ncsram"
|
||||
#pragma section=".ncsram_init"
|
||||
#pragma section=".bss"
|
||||
#pragma section="RAM_VECTOR"
|
||||
#pragma section=".intvec"
|
||||
|
||||
data_clear((uint32_t)__section_begin(".bss"), (uint32_t)__section_end(".bss"));
|
||||
|
||||
data_copy((uint32_t)__section_begin(".data_init"), (uint32_t)__section_begin(".data"), (uint32_t)__section_end(".data"));
|
||||
|
||||
data_copy((uint32_t)__section_begin(".ncsram_init"), (uint32_t)__section_begin(".ncsram"), (uint32_t)__section_end(".ncsram"));
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/* to avoid ecc issue, FC7240 clear ram with 64bits once after power on reset */
|
||||
static void data_clear(uint32_t u32StartAddr, uint32_t u32EndAddr)
|
||||
{
|
||||
/* 64 bits align */
|
||||
uint32_t u32AlignStart = u32StartAddr & 0xFFFFFFF8;
|
||||
uint32_t u32AlignEnd = (u32EndAddr - u32AlignStart);
|
||||
volatile uint64_t *pData = (uint64_t *)u32AlignStart;
|
||||
|
||||
/* 32 word Align */
|
||||
uint32_t u32LeftCount = u32AlignEnd & 0x1Fu;
|
||||
u32AlignEnd = u32EndAddr - u32LeftCount;
|
||||
|
||||
while ((uint32_t)pData < u32AlignEnd)
|
||||
{
|
||||
*pData++ = 0u;
|
||||
*pData++ = 0u;
|
||||
*pData++ = 0u;
|
||||
*pData++ = 0u;
|
||||
}
|
||||
|
||||
while ((uint32_t)pData < u32EndAddr)
|
||||
{
|
||||
*pData++ = 0u;
|
||||
}
|
||||
}
|
||||
|
||||
static void data_copy(uint32_t u32SourceAddr, uint32_t u32DestAddr, uint32_t u32DestEndAddr)
|
||||
{
|
||||
uint32_t *pSource = (uint32_t *)u32SourceAddr;
|
||||
uint32_t *pDest = (uint32_t *)u32DestAddr;
|
||||
|
||||
while ((uint32_t)pDest < u32DestEndAddr)
|
||||
{
|
||||
*pDest = *pSource;
|
||||
pDest++;
|
||||
pSource++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* @file system_init.h
|
||||
* @author Flagchip
|
||||
* @brief interrupt configuration
|
||||
* @version 0.1.0
|
||||
* @date 2024-01-12
|
||||
*
|
||||
* @copyright Copyright (c) 2024 Flagchip Semiconductors Co., Ltd.
|
||||
*
|
||||
*/
|
||||
#if !defined(SYSTEM_INIT_H)
|
||||
#define SYSTEM_INIT_H
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif /* __cplusplus*/
|
||||
|
||||
|
||||
#include "device_header.h"
|
||||
|
||||
void System_Init(void);
|
||||
|
||||
void Data_Init(void);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif /* __cplusplus*/
|
||||
|
||||
|
||||
|
||||
#endif /* SYSTEM_INIT_H */
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
#-- Service --------------------------------------------------------------------
|
||||
SET(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_GCC_CortexM7/gcc_cm7f.cmake)
|
||||
ENABLE_LANGUAGE(ASM)
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
|
||||
|
||||
IF (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
||||
MESSAGE(
|
||||
FATAL_ERROR
|
||||
"In-source builds not allowed.
|
||||
Please make a new directory (called a build directory) and run CMake from there.
|
||||
You may need to remove CMakeCache.txt."
|
||||
)
|
||||
ENDIF ()
|
||||
|
||||
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
#-- Project config -------------------------------------------------------------
|
||||
PROJECT(HVAC) # Project name
|
||||
SET(HARDWARE_REVISION 1.0.0) #
|
||||
SET(VERSION \"1.0.0_HVAC\") #
|
||||
SET(VERSION_INTERFACE \"1.0_INTERFACE\") #
|
||||
SET(HARDWARE_USER_NAME "HVAC")
|
||||
#SET(VECT_TAB_OFFSET "0x100000")
|
||||
SET(VECT_TAB_OFFSET "0x00000")
|
||||
|
||||
SET(HEXT_VALUE "8000000")
|
||||
SET(PLL_NS "125")
|
||||
|
||||
#-- Defines --------------------------------------------------------------------
|
||||
#ADD_DEFINITIONS(-DSET_ACCESS_PROTECTION) # Выставление защиты доступа к памяти
|
||||
#ADD_DEFINITIONS(-DSET_WDT) # Выставление сторожевого таймера
|
||||
|
||||
ADD_DEFINITIONS(-DFIRMWARE_VERSION=${VERSION})
|
||||
ADD_DEFINITIONS(-DHARDWARE_REVISION=\"${HARDWARE_REVISION}\")
|
||||
ADD_DEFINITIONS(-DFIRMWARE_INTERFACE_VERSION=${VERSION_INTERFACE})
|
||||
ADD_DEFINITIONS(-DUSING_OS_FREERTOS)
|
||||
|
||||
|
||||
ADD_DEFINITIONS(-DVECT_TAB_OFFSET=${VECT_TAB_OFFSET})
|
||||
ADD_DEFINITIONS(-DHEXT_VALUE=${HEXT_VALUE})
|
||||
ADD_DEFINITIONS(-DCMSIS_device_header="interrupt_manager.h")
|
||||
|
||||
ADD_DEFINITIONS(-DFLASH_PAGE_SIZE=2048)
|
||||
ADD_DEFINITIONS(-DCOM_INT_BIG_BUFFERS)
|
||||
ADD_DEFINITIONS(-DVARIABLE_TABLE_WITH_ID)
|
||||
ADD_DEFINITIONS(-DLFS_THREADSAFE=1)
|
||||
ADD_DEFINITIONS(-DHALF_DUPLEX_NO_DELAY=1)
|
||||
ADD_DEFINITIONS(-DACCESS_ADC=1)
|
||||
ADD_DEFINITIONS(-DACCESS_RTC=1)
|
||||
ADD_DEFINITIONS(-DSTORAGE_ARTERY_CHECK_CLEAR=1)
|
||||
|
||||
#ADD_DEFINITIONS(-DSTORAGE_ARTERY_CHECK_WRITE_SECTORS=1) # Включение записи по секторам (Тестово, закоментированно)
|
||||
|
||||
#-- Project paths, Include dirs, Sources list ---------------------------------
|
||||
#ADD_FILES(SOURCES "MODULES/DeviceStartup_ARTERY_AT32F437ZMT7/ld/startup_at32f435_437.s")
|
||||
include(modular.cmake)
|
||||
|
||||
#-- Options --------------------------------------------------------------------
|
||||
IF (PRINTF_FLOAT STREQUAL "1")
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -u_printf_float")
|
||||
ENDIF ()
|
||||
IF (SCANF_FLOAT STREQUAL "1")
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -u_scanf_float")
|
||||
ENDIF ()
|
||||
|
||||
#-- Linker script --------------------------------------------------------------
|
||||
SET(LDSCRIPT ${CMAKE_SOURCE_DIR}/APP/FC7240_flash.ld)
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${LDSCRIPT} -Wl,-Map=${CMAKE_BINARY_DIR}/${PROJECT_NAME}.map -Wl,--print-memory-usage")
|
||||
|
||||
#-- Random BuildId Generation ------------------------------------------------------------
|
||||
SET(RANDOM_BUILD_ID_GEN_FILE ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_RandomBuildIdGenerator/version.cmake)
|
||||
add_custom_target(GEN_RANDOM_BUILD_ID)
|
||||
ADD_CUSTOM_COMMAND(TARGET GEN_RANDOM_BUILD_ID POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -P ${RANDOM_BUILD_ID_GEN_FILE})
|
||||
|
||||
#-- Project linking ------------------------------------------------------------
|
||||
ADD_EXECUTABLE(${PROJECT_NAME}.elf ${SOURCES})
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME}.elf)
|
||||
add_dependencies(${PROJECT_NAME}.elf GEN_RANDOM_BUILD_ID)
|
||||
|
||||
#-- Custom commands ------------------------------------------------------------
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME}.elf POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} "-Oihex" ${PROJECT_NAME}.elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.hex
|
||||
COMMAND ${CMAKE_OBJCOPY} "-Obinary" ${PROJECT_NAME}.elf ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin
|
||||
# COMMAND ${CMAKE_OBJDUMP} "-DS" ${PROJECT_NAME}.elf > ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dasm
|
||||
COMMAND ${CMAKE_SIZE} ${PROJECT_NAME}.elf)
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
{
|
||||
"dep": [
|
||||
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "CmakeConfig_GCC_CortexM7"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "CmakeConfig_RandomBuildIdGenerator"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "FreeRTOSHeap4_CM7_CMSIS"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "SystemDelay_CMSIS_RTOS"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "SystemSync_CMSIS_RTOS"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "SystemDelayInterface"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "CmsisRtosThreadUtils"
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "PeripheralDriver_Flagchip_FC7240"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "Device_Flagchip_FC7240"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "git",
|
||||
"provider": "HVAC_M7",
|
||||
"repo": "HwA_Flagchip_FC7240"
|
||||
},
|
||||
|
||||
{
|
||||
"type": "local",
|
||||
"dir": "APP"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue