From 72e128e9291d4e6693567727375e3cdd0fa0ed83 Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 2 Jun 2025 14:29:40 +0300 Subject: [PATCH] Init --- APP/AT32F437xM_FLASH.ld | 197 ++++++++++ APP/EraGlonassUveos_Dumper.h | 17 + APP/FirmwareUveosMetadataSection.h | 10 + APP/FreeRTOSConfig.h | 176 +++++++++ APP/at32f435_437_conf.h | 191 ++++++++++ APP/main.c | 364 ++++++++++++++++++ APP/modular.json | 15 + APP/startup_at32f435_437.s | 571 +++++++++++++++++++++++++++++ CMakeLists.txt | 100 +++++ artery_f437.cfg | 27 ++ modular.json | 332 +++++++++++++++++ 11 files changed, 2000 insertions(+) create mode 100644 APP/AT32F437xM_FLASH.ld create mode 100644 APP/EraGlonassUveos_Dumper.h create mode 100644 APP/FirmwareUveosMetadataSection.h create mode 100644 APP/FreeRTOSConfig.h create mode 100644 APP/at32f435_437_conf.h create mode 100644 APP/main.c create mode 100644 APP/modular.json create mode 100644 APP/startup_at32f435_437.s create mode 100644 CMakeLists.txt create mode 100644 artery_f437.cfg create mode 100644 modular.json diff --git a/APP/AT32F437xM_FLASH.ld b/APP/AT32F437xM_FLASH.ld new file mode 100644 index 0000000..48b409b --- /dev/null +++ b/APP/AT32F437xM_FLASH.ld @@ -0,0 +1,197 @@ +/* +***************************************************************************** +** +** File : AT32F437xM_FLASH.ld +** +** Abstract : Linker script for AT32F437xM Device with +** 4096KByte FLASH, 384KByte 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 : Artery Tek AT32 +** +** Environment : Arm gcc toolchain +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20060000; /* 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 */ + +_MetadataSize = 256; + +_BootloaderSize = 64K; +_BootloaderBegin = 0x08000000; + +_FirmwareMainSize = 320K; +_FirmwareMainBegin = _BootloaderBegin + _BootloaderSize; + +_FirmwareRecoverySize = 320K; +_FirmwareRecoveryBegin = _FirmwareMainBegin + _FirmwareMainSize; + +_FirmwareMainTelematicaSize = 192K; +_FirmwareMainTelematicaBegin = _FirmwareRecoveryBegin + _FirmwareRecoverySize; + +_SettingsMainSize = 16K; +_SettingsMainBegin = _FirmwareMainTelematicaBegin + _FirmwareMainTelematicaSize; + +_SettingsRecoverySize = 16K; +_SettingsRecoveryBegin = _SettingsMainBegin + _SettingsMainSize; + +_FileSystemSize = 96K; +_FileSystemBegin = _SettingsRecoveryBegin + _SettingsRecoverySize; + +/* Specify the memory areas */ +MEMORY +{ + BOOTLOADER (rx) : ORIGIN = _BootloaderBegin, LENGTH = _BootloaderSize + MAIN_FIRMWARE (rx) : ORIGIN = _FirmwareMainBegin, LENGTH = _FirmwareMainSize + UPDATE_FIRMWARE (rx) : ORIGIN = _FirmwareRecoveryBegin, LENGTH = _FirmwareRecoverySize + FLASH (rx) : ORIGIN = _FirmwareMainTelematicaBegin, LENGTH = _FirmwareMainTelematicaSize - _MetadataSize + META (rx) : ORIGIN = _FirmwareMainTelematicaBegin + _FirmwareMainTelematicaSize - _MetadataSize, LENGTH = _MetadataSize + SETTINGS_MAIN (rx) : ORIGIN = _SettingsMainBegin, LENGTH = _SettingsMainSize + SETTINGS_RECOVERY (rx) : ORIGIN = _SettingsRecoveryBegin, LENGTH = _SettingsRecoverySize + FILE_SYSTEM (rx) : ORIGIN = _FileSystemBegin, LENGTH = _FileSystemSize + RAM (xrw) : ORIGIN = 0x20030000, LENGTH = 192K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .metaaaa : SUBALIGN(1) + { + KEEP(*(.meta_fw_crc)) + LONG(_FirmwareMainTelematicaSize - _MetadataSize) ; /* word with firmware_size */ + KEEP(*(.meta_fw_name_size)) + KEEP(*(.meta_fw_name)) + KEEP(*(.meta_hw_name_size)) + KEEP(*(.meta_hw_name)) + KEEP(*(.meta_ext_env_tele)) + KEEP(*(.meta_tele_func)) + . = ALIGN(256); + } >META + + /* 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(4); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/APP/EraGlonassUveos_Dumper.h b/APP/EraGlonassUveos_Dumper.h new file mode 100644 index 0000000..ab3b209 --- /dev/null +++ b/APP/EraGlonassUveos_Dumper.h @@ -0,0 +1,17 @@ +// +// Created by xemon on 30.11.22. +// + +#ifndef UVEOS_ON_NATION_ERAGLONASSUVEOS_DUMPER_H +#define UVEOS_ON_NATION_ERAGLONASSUVEOS_DUMPER_H + +typedef void (*eraGlonassForceDumpCall)(void *env); + +typedef struct { + void *env; + eraGlonassForceDumpCall forceDump; +} tEraGlonassUveosDumperInterface; + +#define EraGlonassUveosDumper_ForceDump(ENV) (ENV)->forceDump((ENV)->env) + +#endif //UVEOS_ON_NATION_ERAGLONASSUVEOS_DUMPER_H diff --git a/APP/FirmwareUveosMetadataSection.h b/APP/FirmwareUveosMetadataSection.h new file mode 100644 index 0000000..2966576 --- /dev/null +++ b/APP/FirmwareUveosMetadataSection.h @@ -0,0 +1,10 @@ +// +// Created by cfif on 14.02.2025. +// + +#ifndef SMART_COMPONENTS_TELEMATICA_V2_FIRMWAREUVEOSMETADATASECTION_H +#define SMART_COMPONENTS_TELEMATICA_V2_FIRMWAREUVEOSMETADATASECTION_H + +#include "FirmwareMetadataSection.h" + +#endif //SMART_COMPONENTS_TELEMATICA_V2_FIRMWAREUVEOSMETADATASECTION_H diff --git a/APP/FreeRTOSConfig.h b/APP/FreeRTOSConfig.h new file mode 100644 index 0000000..8b771a1 --- /dev/null +++ b/APP/FreeRTOSConfig.h @@ -0,0 +1,176 @@ +/* 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 + +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 ( system_core_clock ) +#define configTICK_RATE_HZ ((TickType_t)1000) +#define configMAX_PRIORITIES ( 56 ) +#define configMINIMAL_STACK_SIZE ((uint16_t)64) +#define configTOTAL_HEAP_SIZE ((size_t)1000) +#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) {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 */ diff --git a/APP/at32f435_437_conf.h b/APP/at32f435_437_conf.h new file mode 100644 index 0000000..4f9bd30 --- /dev/null +++ b/APP/at32f435_437_conf.h @@ -0,0 +1,191 @@ +/** + ************************************************************************** + * @file at32f435_437_conf.h + * @version v2.0.4 + * @date 2021-12-31 + * @brief at32f435_437 config header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F435_437_CONF_H +#define __AT32F435_437_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/** @addtogroup AT32F435_periph_template + * @{ + */ + +/** @addtogroup 435_Library_configuration Library_configuration + * @{ + */ + +/** + * @brief in the following line adjust the value of high speed exernal crystal (hext) + * used in your application + * + * tip: to avoid modifying this file each time you need to use different hext, you + * can define the hext value in your toolchain compiler preprocessor. + * + */ +#if !defined HEXT_VALUE +#define HEXT_VALUE ((uint32_t)25000000) /*!< value of the high speed exernal crystal in hz */ +#endif + +/** + * @brief in the following line adjust the high speed exernal crystal (hext) startup + * timeout value + */ +#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ +#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ + +/* module define -------------------------------------------------------------*/ +#define CRM_MODULE_ENABLED +#define TMR_MODULE_ENABLED +#define ERTC_MODULE_ENABLED +#define GPIO_MODULE_ENABLED +#define I2C_MODULE_ENABLED +#define USART_MODULE_ENABLED +#define PWC_MODULE_ENABLED +#define CAN_MODULE_ENABLED +#define ADC_MODULE_ENABLED +#define DAC_MODULE_ENABLED +#define SPI_MODULE_ENABLED +#define EDMA_MODULE_ENABLED +#define DMA_MODULE_ENABLED +#define DEBUG_MODULE_ENABLED +#define FLASH_MODULE_ENABLED +#define CRC_MODULE_ENABLED +#define WWDT_MODULE_ENABLED +#define WDT_MODULE_ENABLED +#define EXINT_MODULE_ENABLED +#define SDIO_MODULE_ENABLED +#define XMC_MODULE_ENABLED +#define USB_MODULE_ENABLED +#define ACC_MODULE_ENABLED +#define MISC_MODULE_ENABLED +#define QSPI_MODULE_ENABLED +#define DVP_MODULE_ENABLED +#define SCFG_MODULE_ENABLED +#define EMAC_MODULE_ENABLED + +/* includes ------------------------------------------------------------------*/ +#ifdef CRM_MODULE_ENABLED +#include "at32f435_437_crm.h" +#endif +#ifdef TMR_MODULE_ENABLED +#include "at32f435_437_tmr.h" +#endif +#ifdef ERTC_MODULE_ENABLED +#include "at32f435_437_ertc.h" +#endif +#ifdef GPIO_MODULE_ENABLED +#include "at32f435_437_gpio.h" +#endif +#ifdef I2C_MODULE_ENABLED +#include "at32f435_437_i2c.h" +#endif +#ifdef USART_MODULE_ENABLED +#include "at32f435_437_usart.h" +#endif +#ifdef PWC_MODULE_ENABLED +#include "at32f435_437_pwc.h" +#endif +#ifdef CAN_MODULE_ENABLED +#include "at32f435_437_can.h" +#endif +#ifdef ADC_MODULE_ENABLED +#include "at32f435_437_adc.h" +#endif +#ifdef DAC_MODULE_ENABLED +#include "at32f435_437_dac.h" +#endif +#ifdef SPI_MODULE_ENABLED +#include "at32f435_437_spi.h" +#endif +#ifdef DMA_MODULE_ENABLED +#include "at32f435_437_dma.h" +#endif +#ifdef DEBUG_MODULE_ENABLED +#include "at32f435_437_debug.h" +#endif +#ifdef FLASH_MODULE_ENABLED +#include "at32f435_437_flash.h" +#endif +#ifdef CRC_MODULE_ENABLED +#include "at32f435_437_crc.h" +#endif +#ifdef WWDT_MODULE_ENABLED +#include "at32f435_437_wwdt.h" +#endif +#ifdef WDT_MODULE_ENABLED +#include "at32f435_437_wdt.h" +#endif +#ifdef EXINT_MODULE_ENABLED +#include "at32f435_437_exint.h" +#endif +#ifdef SDIO_MODULE_ENABLED +#include "at32f435_437_sdio.h" +#endif +#ifdef XMC_MODULE_ENABLED +#include "at32f435_437_xmc.h" +#endif +#ifdef ACC_MODULE_ENABLED +#include "at32f435_437_acc.h" +#endif +#ifdef MISC_MODULE_ENABLED +#include "at32f435_437_misc.h" +#endif +#ifdef EDMA_MODULE_ENABLED +#include "at32f435_437_edma.h" +#endif +#ifdef QSPI_MODULE_ENABLED +#include "at32f435_437_qspi.h" +#endif +#ifdef SCFG_MODULE_ENABLED +#include "at32f435_437_scfg.h" +#endif +#ifdef EMAC_MODULE_ENABLED +#include "at32f435_437_emac.h" +#endif +#ifdef DVP_MODULE_ENABLED +#include "at32f435_437_dvp.h" +#endif +#ifdef USB_MODULE_ENABLED +#include "at32f435_437_usb.h" +#endif + +/** + * @} + */ + + /** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/APP/main.c b/APP/main.c new file mode 100644 index 0000000..958966d --- /dev/null +++ b/APP/main.c @@ -0,0 +1,364 @@ +#include "FirmwareLoader.h" +#include "EgtsProcessing.h" +#include "ext_telematica.h" +#include "ld_adr.h" +#include "math.h" +#include "SystemDelayInterface.h" +#include "Accel_QMA6100P.h" +#include "EgtsTeledataPoint.h" +#include "VariablesTable.h" + +#define FIRMWARE_MAIN_ADDR (0x08000000 + BOOT_AREA_LENGTH) +#define FIRMWARE_MAIN_RECOVERY_ADDR (FIRMWARE_MAIN_ADDR + FIRMWARE_MAIN_AREA_LENGTH) + +#define FIRMWARE_TELE_MAIN_ADDR (FIRMWARE_MAIN_RECOVERY_ADDR + FIRMWARE_MAIN_UPDATE_AREA_LENGTH) +#define FIRMWARE_TELE_RECOVERY_ADDR (FIRMWARE_MAIN_ADDR + FIRMWARE_MAIN_AREA_LENGTH) + +//tFirmwareLoader FIRMWARE_UVEOS_LOADER; +tFirmwareLoader FIRMWARE_TELE_LOADER; +tFirmwareLoader FIRMWARE_LOADER; + +// Переполнение стека +void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) { + for (;;) { + + } +} + +tMmaTele EXT_ENV_TELE; +tEgtsProcessing egtsProcessing; +tGsmWithGnss gsmWithGnss; +tLittleFileFs fs; +eDeviceTestingCode deviceTestingCodeCan; +/* +vector3 vecOld; +vector3 vec; +vector3 vecDiff; + +float vecTotal; +float vecTotalOld; +float koefAcc; +*/ + +/* +void DataAccel_Vector(vector3 *current) { + +} +*/ + +#define LOG_SIGN "EGTS" +#define LOGGER &egtsProcessing.slog->logger + +bool cal; + +#define ACCEL_TRESHOLD 20 + + +//double maxA; + +void DataAccel_Vector(tAccelCoor *xyz) { +/* + if (egtsProcessing.timeAccelUpdateUds < SystemGetMs()) { + + egtsProcessing.timeAccelUpdateUds = SystemGetMs() + 500; + //начало---------------------------------Рассчет для UDS сканера---------------------------------------------------- + vector3 gravity = (vector3) {0.f, 0.f, 1.f}; + vector3 currentValue = (vector3) {(float) xyz->x / 1000000, (float) xyz->y / 1000000, (float) xyz->z / 1000000}; + + egtsProcessing.rawAccel.x = (int16_t) (currentValue.x * 1333); + egtsProcessing.rawAccel.y = (int16_t) (currentValue.y * 1333); + egtsProcessing.rawAccel.z = (int16_t) (currentValue.z * 1333); + + float angleCos = vector3AngleCos(gravity, currentValue);; + float angle = acosf(angleCos); + egtsProcessing.rawAccel.angle = 180.0 / 3.141592 * angle; + + //конец---------------------------------Рассчет для UDS сканера----------------------------------------------------- + } +*/ + if (egtsProcessing.timeAccelUpdate < SystemGetMs()) { + + egtsProcessing.timeAccelUpdate = SystemGetMs() + 100; + + xyz->x = xyz->x / 1000; + xyz->y = xyz->y / 1000; + xyz->z = xyz->z / 1000; + + egtsProcessing.x1 = xyz->x; + egtsProcessing.y1 = xyz->y; + egtsProcessing.z1 = xyz->z; + + if (cal) { + egtsProcessing.x2 = egtsProcessing.x1; + egtsProcessing.y2 = egtsProcessing.y1; + egtsProcessing.z2 = egtsProcessing.z1; + cal = false; + return; + } + + double vect_vert_len = (egtsProcessing.x1 * egtsProcessing.x2 + egtsProcessing.y1 * egtsProcessing.y2 + + egtsProcessing.z1 * egtsProcessing.z2) / + (sqrt(egtsProcessing.x2 * egtsProcessing.x2 + egtsProcessing.y2 * egtsProcessing.y2 + + egtsProcessing.z2 * egtsProcessing.z2) + 0.001); + + double a = sqrt(fabs((egtsProcessing.x1 * egtsProcessing.x1 + egtsProcessing.y1 * egtsProcessing.y1 + + egtsProcessing.z1 * egtsProcessing.z1) - + (vect_vert_len * vect_vert_len))); + + + egtsProcessing.count_shot = (a > ACCEL_TRESHOLD) ? egtsProcessing.count_shot + 1 : 0; + +// if (a > maxA) { +// maxA = a; +// } + + ++egtsProcessing.count_free; + + if (egtsProcessing.count_shot == 0) { + if (egtsProcessing.count_free >= 100) { + // OFF + if (egtsProcessing.carEventPosition.carPosition == CAR_POSITION_MOVE) { + if (egtsProcessing.totalSpeed < + egtsProcessing.deviceTeledataStorageData->telematica.EGTS_GNSS_COURSE_SPEED) { + + egtsProcessing.carEventPosition.carPosition = CAR_POSITION_FIX; + egtsProcessing.count_free = 0; + + } else { + egtsProcessing.count_free = 90; + } + } else { + egtsProcessing.count_free = 0; + } + } + } + + if (egtsProcessing.count_shot > 3) { + +// egtsProcessing.x1 = egtsProcessing.x2; +// egtsProcessing.y1 = egtsProcessing.y2; +// egtsProcessing.z1 = egtsProcessing.z2; + egtsProcessing.x2 = egtsProcessing.x1; + egtsProcessing.y2 = egtsProcessing.y1; + egtsProcessing.z2 = egtsProcessing.z1; + + egtsProcessing.count_free = 0; + + //ON + egtsProcessing.carEventPosition.carPosition = CAR_POSITION_MOVE; + + } + + } + +} + +volatile uint32_t valueCounter1; +volatile uint32_t valueCounter2; +volatile uint32_t valueCounter3; + +void main_init() { +// maxA = 0; + + valueCounter1 = 0; + valueCounter2 = 0; + valueCounter3 = 0; + + cal = true; + memset(&egtsProcessing, 0, sizeof(tEgtsProcessing)); + memset(&gsmWithGnss, 0, sizeof(tGsmWithGnss)); + memset(&fs, 0, sizeof(tLittleFileFs)); + + deviceTestingCodeCan = DEVICE_TESTING_CODE_IN_PROCESS; + EXT_ENV_TELE.deviceTestingCodeCan = &deviceTestingCodeCan; + +// FirmwareLoader_Init(&FIRMWARE_UVEOS_LOADER, FIRMWARE_MAIN_AREA_LENGTH, FIRMWARE_MAIN_ADDR, +// FIRMWARE_MAIN_RECOVERY_ADDR); + + FirmwareLoader_Init(&FIRMWARE_TELE_LOADER, FIRMWARE_TELE_AREA_LENGTH, FIRMWARE_TELE_MAIN_ADDR, + FIRMWARE_TELE_RECOVERY_ADDR); + + FirmwareLoader_LoadMetadata(&FIRMWARE_TELE_LOADER, &FIRMWARE_TELE_LOADER.main); + + FirmwareLoader_Init(&FIRMWARE_LOADER, FIRMWARE_MAIN_AREA_LENGTH, FIRMWARE_MAIN_ADDR, + FIRMWARE_MAIN_RECOVERY_ADDR); + + FirmwareLoader_LoadMetadata(&FIRMWARE_LOADER, &FIRMWARE_LOADER.main); + +// LittleFileFsInit(&fs, EXT_ENV_TELE.deviceStorage->dumpObserver.accessDumper); + LittleFileFsInit(&fs); + + GsmWithGnssInit(&gsmWithGnss); + + EgtsProcessing_Init( + &egtsProcessing, + &gsmWithGnss, + EXT_ENV_TELE.rtcIO, + &fs, + EXT_ENV_TELE.loggerToSerialPort + ); + +} + +void *tele_func(void *env, eEventTelematica event); + +int main(void) { + XfcProtMethodsInit_Certs(&egtsProcessing.certs); + EgtsProcessing_Start(&egtsProcessing); +} + +void GsmWithGnssTelematica_Urc(tAtBuffer *buff); + +void ComIntTelematica(tXfcProtTable *protTab); + +void ComIntTelematicaDefault(); + +void GsmWithGnssTelematica_Urc(tAtBuffer *buff); + + +void setNullParm() { + EXT_ENV_TELE.SrandStdLib = NULL; + EXT_ENV_TELE.RandStdLib = NULL; + EXT_ENV_TELE.DataToCan = NULL; +} + +void *tele_func(void *env, eEventTelematica event) { +// uint16_t sent = 0; +// // uint32_t tm = SystemGetMs(); +// if (event == TELE_MODULE_GNSS) { +// if (!EXT_ENV_TELE.store.device->factoryMode) { +// //начало-----------------------------------ТИШИНА------------------------------------------------------- +// +// CanSerialPortFrameSetId1(egtsProcessing.CanMain.CanIO->env, 0x640); +// +// if (EXT_ENV_TELE.GNSS_General->GNSS_LC > 15) { +// EXT_ENV_TELE.GNSS_General->GNSS_LC = 0; +// } else { +// ++EXT_ENV_TELE.GNSS_General->GNSS_LC; +// } +// +// sent = egtsProcessing.CanMain.CanIO->transmit1(egtsProcessing.CanMain.CanIO->env, (uint8_t *) EXT_ENV_TELE.GNSS_General, 2, +// WAIT_FRAME_WRITE); +// sent = sent; +// //конец-----------------------------------ТИШИНА------------------------------------------------------- +// +// } +//} + + if (event == TELE_MODULE_COUNTER_1) { + ++valueCounter1; + } + + if (event == TELE_MODULE_COUNTER_2) { + ++valueCounter2; + } + + if (event == TELE_MODULE_COUNTER_3) { + ++valueCounter3; + } + + if (event == TELE_MODULE_INIT) { + + bool isGeneralToCan = VariablesTable_CheckUDS_ByNameStatic(EXT_ENV_TELE.store.publicVariablesTable, "GNSS_GENERAL_TO_CAN"); + + if (isGeneralToCan == false) { + setNullParm(); + } + + main_init(); + } + + if (event == TELE_MODULE_PRE_INIT) { + asm("bl Reset_Handler"); + } + + if (event == TELE_MODULE_START) { + main(); + } + + if (event == TELE_MODULE_COM_INT) { + ComIntTelematica(env); + } + + if (event == TELE_MODULE_COM_INT_DEFAULT) { + ComIntTelematicaDefault(); + } + + if (event == TELE_MODULE_GSM_URC) { + GsmWithGnssTelematica_Urc(env); + } + + if (event == TELE_MODULE_ACCEL_DATA) { + DataAccel_Vector(env); + } + + if (event == TELE_MODULE_ADD_EVENT) { + addEventFromUveos(&egtsProcessing, env); + } + + if (event == TELE_MODULE_CAN_UDS_START) { + CanMain_Start(&egtsProcessing.CanMain); + CanMainAdditional_Start(&egtsProcessing.CanMainAdditional); + CanMainTest_Start(&egtsProcessing.CanMainTest); + CanMainMute_Start(&egtsProcessing.CanMainMute); + } + + if (event == TELE_MODULE_SHUTDOWN) { + /** Проверка флага обновления */ + if(egtsProcessing.isTimerUpdate == true){ + /** проверка таймера обновления*/ + if(egtsProcessing.timerUpdate > SystemGetMs()){ + return &egtsProcessing.timerUpdate; + } + } + egtsProcessing.timerUpdate = 0; + + EXT_ENV_TELE.store.runtime->EGTS_FLEET_ON = false; + LoggerInfoStatic(LOGGER, LOG_SIGN, "Зафиксировано событие: TELE_MODULE_SHUTDOWN") + + LoggerInfoStatic(LOGGER, LOG_SIGN, "Ожидание закрытия соединения") + + ///* FIX + for (uint8_t i = 0; i < 30; i++) { + if (EXT_ENV_TELE.store.runtime->telematicaCloseConnect == true) { + break; + } + SystemDelayMs(100); + + } +// uint32_t tm = SystemGetMs() + 3000; +// uint32_t timer = SystemGetMs(); +// +// while ((tm > timer) && (EXT_ENV_TELE.store.runtime->telematicaCloseConnect == false)) { +// timer = SystemGetMs(); +// SystemDelayMs(100); +// } + + if (EXT_ENV_TELE.store.runtime->telematicaCloseConnect == true) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Соединение успешно закрыто") + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Соединение не было закрыто") + } + + + return &egtsProcessing.timerUpdate; + } + + if (event == TELE_MODULE_MUTE_ON) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Зафиксировано событие: TELE_MODULE_MUTE_ON") + } + + if (event == TELE_MODULE_MUTE_OFF) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Зафиксировано событие: TELE_MODULE_MUTE_OFF") + } + + if (event == TELE_MODULE_FUEL_CUT_OFF) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Зафиксировано событие: TELE_MODULE_FUEL_CUT_OFF") + } + + if (event == TELE_MODULE_GET_CAN_COM_IO) { + return &egtsProcessing.serialPortCanComIntIO; + } + + return 0; +} \ No newline at end of file diff --git a/APP/modular.json b/APP/modular.json new file mode 100644 index 0000000..7eef019 --- /dev/null +++ b/APP/modular.json @@ -0,0 +1,15 @@ +{ + "cmake": { + "inc_dirs": [ + "./", + "./clock", + "./int" + ], + "srcs": [ + "./**.c", + "./clock/**.c", + "./int/**.c", + "./**.s" + ] + } +} \ No newline at end of file diff --git a/APP/startup_at32f435_437.s b/APP/startup_at32f435_437.s new file mode 100644 index 0000000..12bd05a --- /dev/null +++ b/APP/startup_at32f435_437.s @@ -0,0 +1,571 @@ +/** + ****************************************************************************** + * @file startup_at32f435_437.s + * @version v2.0.4 + * @date 2021-12-31 + * @brief at32f435_437 devices vector table for gcc toolchain. + * this module performs: + * - set the initial sp + * - set the initial pc == reset_handler, + * - set the vector table entries with the exceptions isr address + * - configure the clock system and the external sram to + * be used as data memory (optional, to be enabled by user) + * - branches to main in the c library (which eventually + * calls main()). + * after reset the cortex-m4 processor is in thread mode, + * priority is privileged, and the stack is set to main. + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m4 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function + + +Reset_Handler: + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ +/* bl SystemInit*/ +/* Call static constructors */ +/* bl __libc_init_array*/ +/* Call the application's entry point.*/ +/* bl main_init*/ + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDT_IRQHandler /* Window Watchdog Timer */ + .word PVM_IRQHandler /* PVM through EXINT Line detect */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXINT line */ + .word ERTC_WKUP_IRQHandler /* ERTC Wakeup through the EXINT line */ + .word FLASH_IRQHandler /* Flash */ + .word CRM_IRQHandler /* CRM */ + .word EXINT0_IRQHandler /* EXINT Line 0 */ + .word EXINT1_IRQHandler /* EXINT Line 1 */ + .word EXINT2_IRQHandler /* EXINT Line 2 */ + .word EXINT3_IRQHandler /* EXINT Line 3 */ + .word EXINT4_IRQHandler /* EXINT Line 4 */ + .word EDMA_Stream1_IRQHandler /* EDMA Stream 1 */ + .word EDMA_Stream2_IRQHandler /* EDMA Stream 2 */ + .word EDMA_Stream3_IRQHandler /* EDMA Stream 3 */ + .word EDMA_Stream4_IRQHandler /* EDMA Stream 4 */ + .word EDMA_Stream5_IRQHandler /* EDMA Stream 5 */ + .word EDMA_Stream6_IRQHandler /* EDMA Stream 6 */ + .word EDMA_Stream7_IRQHandler /* EDMA Stream 7 */ + .word ADC1_2_3_IRQHandler /* ADC1 & ADC2 & ADC3 */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SE_IRQHandler /* CAN1 SE */ + .word EXINT9_5_IRQHandler /* EXINT Line [9:5] */ + .word TMR1_BRK_TMR9_IRQHandler /* TMR1 Brake and TMR9 */ + .word TMR1_OVF_TMR10_IRQHandler /* TMR1 Overflow and TMR10 */ + .word TMR1_TRG_HALL_TMR11_IRQHandler /* TMR1 Trigger and hall and TMR11 */ + .word TMR1_CH_IRQHandler /* TMR1 Channel */ + .word TMR2_GLOBAL_IRQHandler /* TMR2 */ + .word TMR3_GLOBAL_IRQHandler /* TMR3 */ + .word TMR4_GLOBAL_IRQHandler /* TMR4 */ + .word I2C1_EVT_IRQHandler /* I2C1 Event */ + .word I2C1_ERR_IRQHandler /* I2C1 Error */ + .word I2C2_EVT_IRQHandler /* I2C2 Event */ + .word I2C2_ERR_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_I2S2EXT_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXINT15_10_IRQHandler /* EXINT Line [15:10] */ + .word ERTCAlarm_IRQHandler /* RTC Alarm through EXINT Line */ + .word OTGFS1_WKUP_IRQHandler /* OTGFS1 Wakeup from suspend */ + .word TMR8_BRK_TMR12_IRQHandler /* TMR8 Brake and TMR12 */ + .word TMR8_OVF_TMR13_IRQHandler /* TMR8 Overflow and TMR13 */ + .word TMR8_TRG_HALL_TMR14_IRQHandler /* TMR8 Trigger and hall and TMR14 */ + .word TMR8_CH_IRQHandler /* TMR8 Channel */ + .word EDMA_Stream8_IRQHandler /* EDMA Stream 8 */ + .word XMC_IRQHandler /* XMC */ + .word SDIO1_IRQHandler /* SDIO1 */ + .word TMR5_GLOBAL_IRQHandler /* TMR5 */ + .word SPI3_I2S3EXT_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TMR6_DAC_GLOBAL_IRQHandler /* TMR6 & DAC */ + .word TMR7_GLOBAL_IRQHandler /* TMR7 */ + .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ + .word DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */ + .word DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */ + .word DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */ + .word DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */ + .word EMAC_IRQHandler /* EMAC */ + .word EMAC_WKUP_IRQHandler /* EMAC Wakeup */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SE_IRQHandler /* CAN2 SE */ + .word OTGFS1_IRQHandler /* OTGFS1 */ + .word DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */ + .word DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */ + .word 0 /* Reserved */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EVT_IRQHandler /* I2C3 Event */ + .word I2C3_ERR_IRQHandler /* I2C3 Error */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word OTGFS2_WKUP_IRQHandler /* OTGFS2 Wakeup from suspend */ + .word OTGFS2_IRQHandler /* OTGFS2 */ + .word DVP_IRQHandler /* DVP */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word FPU_IRQHandler /* FPU */ + .word UART7_IRQHandler /* UART7 */ + .word UART8_IRQHandler /* UART8 */ + .word SPI4_IRQHandler /* SPI4 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word QSPI2_IRQHandler /* QSPI2 */ + .word QSPI1_IRQHandler /* QSPI1 */ + .word 0 /* Reserved */ + .word DMAMUX_IRQHandler /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word SDIO2_IRQHandler /* SDIO2 */ + .word ACC_IRQHandler /* ACC */ + .word TMR20_BRK_IRQHandler /* TMR20 Brake */ + .word TMR20_OVF_IRQHandler /* TMR20 Overflow */ + .word TMR20_TRG_HALL_IRQHandler /* TMR20 Trigger and hall */ + .word TMR20_CH_IRQHandler /* TMR20 Channel */ + .word DMA2_Channel1_IRQHandler /* DMA2 Channel 1 */ + .word DMA2_Channel2_IRQHandler /* DMA2 Channel 2 */ + .word DMA2_Channel3_IRQHandler /* DMA2 Channel 3 */ + .word DMA2_Channel4_IRQHandler /* DMA2 Channel 4 */ + .word DMA2_Channel5_IRQHandler /* DMA2 Channel 5 */ + .word DMA2_Channel6_IRQHandler /* DMA2 Channel 6 */ + .word DMA2_Channel7_IRQHandler /* DMA2 Channel 7 */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDT_IRQHandler + .thumb_set WWDT_IRQHandler,Default_Handler + + .weak PVM_IRQHandler + .thumb_set PVM_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak ERTC_WKUP_IRQHandler + .thumb_set ERTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak CRM_IRQHandler + .thumb_set CRM_IRQHandler,Default_Handler + + .weak EXINT0_IRQHandler + .thumb_set EXINT0_IRQHandler,Default_Handler + + .weak EXINT1_IRQHandler + .thumb_set EXINT1_IRQHandler,Default_Handler + + .weak EXINT2_IRQHandler + .thumb_set EXINT2_IRQHandler,Default_Handler + + .weak EXINT3_IRQHandler + .thumb_set EXINT3_IRQHandler,Default_Handler + + .weak EXINT4_IRQHandler + .thumb_set EXINT4_IRQHandler,Default_Handler + + .weak EDMA_Stream1_IRQHandler + .thumb_set EDMA_Stream1_IRQHandler,Default_Handler + + .weak EDMA_Stream2_IRQHandler + .thumb_set EDMA_Stream2_IRQHandler,Default_Handler + + .weak EDMA_Stream3_IRQHandler + .thumb_set EDMA_Stream3_IRQHandler,Default_Handler + + .weak EDMA_Stream4_IRQHandler + .thumb_set EDMA_Stream4_IRQHandler,Default_Handler + + .weak EDMA_Stream5_IRQHandler + .thumb_set EDMA_Stream5_IRQHandler,Default_Handler + + .weak EDMA_Stream6_IRQHandler + .thumb_set EDMA_Stream6_IRQHandler,Default_Handler + + .weak EDMA_Stream7_IRQHandler + .thumb_set EDMA_Stream7_IRQHandler,Default_Handler + + .weak ADC1_2_3_IRQHandler + .thumb_set ADC1_2_3_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SE_IRQHandler + .thumb_set CAN1_SE_IRQHandler,Default_Handler + + .weak EXINT9_5_IRQHandler + .thumb_set EXINT9_5_IRQHandler,Default_Handler + + .weak TMR1_BRK_TMR9_IRQHandler + .thumb_set TMR1_BRK_TMR9_IRQHandler,Default_Handler + + .weak TMR1_OVF_TMR10_IRQHandler + .thumb_set TMR1_OVF_TMR10_IRQHandler,Default_Handler + + .weak TMR1_TRG_HALL_TMR11_IRQHandler + .thumb_set TMR1_TRG_HALL_TMR11_IRQHandler,Default_Handler + + .weak TMR1_CH_IRQHandler + .thumb_set TMR1_CH_IRQHandler,Default_Handler + + .weak TMR2_GLOBAL_IRQHandler + .thumb_set TMR2_GLOBAL_IRQHandler,Default_Handler + + .weak TMR3_GLOBAL_IRQHandler + .thumb_set TMR3_GLOBAL_IRQHandler,Default_Handler + + .weak TMR4_GLOBAL_IRQHandler + .thumb_set TMR4_GLOBAL_IRQHandler,Default_Handler + + .weak I2C1_EVT_IRQHandler + .thumb_set I2C1_EVT_IRQHandler,Default_Handler + + .weak I2C1_ERR_IRQHandler + .thumb_set I2C1_ERR_IRQHandler,Default_Handler + + .weak I2C2_EVT_IRQHandler + .thumb_set I2C2_EVT_IRQHandler,Default_Handler + + .weak I2C2_ERR_IRQHandler + .thumb_set I2C2_ERR_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_I2S2EXT_IRQHandler + .thumb_set SPI2_I2S2EXT_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXINT15_10_IRQHandler + .thumb_set EXINT15_10_IRQHandler,Default_Handler + + .weak ERTCAlarm_IRQHandler + .thumb_set ERTCAlarm_IRQHandler,Default_Handler + + .weak OTGFS1_WKUP_IRQHandler + .thumb_set OTGFS1_WKUP_IRQHandler,Default_Handler + + .weak TMR8_BRK_TMR12_IRQHandler + .thumb_set TMR8_BRK_TMR12_IRQHandler,Default_Handler + + .weak TMR8_OVF_TMR13_IRQHandler + .thumb_set TMR8_OVF_TMR13_IRQHandler,Default_Handler + + .weak TMR8_TRG_HALL_TMR14_IRQHandler + .thumb_set TMR8_TRG_HALL_TMR14_IRQHandler,Default_Handler + + .weak TMR8_CH_IRQHandler + .thumb_set TMR8_CH_IRQHandler,Default_Handler + + .weak EDMA_Stream8_IRQHandler + .thumb_set EDMA_Stream8_IRQHandler,Default_Handler + + .weak XMC_IRQHandler + .thumb_set XMC_IRQHandler,Default_Handler + + .weak SDIO1_IRQHandler + .thumb_set SDIO1_IRQHandler,Default_Handler + + .weak TMR5_GLOBAL_IRQHandler + .thumb_set TMR5_GLOBAL_IRQHandler,Default_Handler + + .weak SPI3_I2S3EXT_IRQHandler + .thumb_set SPI3_I2S3EXT_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TMR6_DAC_GLOBAL_IRQHandler + .thumb_set TMR6_DAC_GLOBAL_IRQHandler,Default_Handler + + .weak TMR7_GLOBAL_IRQHandler + .thumb_set TMR7_GLOBAL_IRQHandler,Default_Handler + + .weak DMA1_Channel1_IRQHandler + .thumb_set DMA1_Channel1_IRQHandler,Default_Handler + + .weak DMA1_Channel2_IRQHandler + .thumb_set DMA1_Channel2_IRQHandler,Default_Handler + + .weak DMA1_Channel3_IRQHandler + .thumb_set DMA1_Channel3_IRQHandler,Default_Handler + + .weak DMA1_Channel4_IRQHandler + .thumb_set DMA1_Channel4_IRQHandler,Default_Handler + + .weak DMA1_Channel5_IRQHandler + .thumb_set DMA1_Channel5_IRQHandler,Default_Handler + + .weak EMAC_IRQHandler + .thumb_set EMAC_IRQHandler,Default_Handler + + .weak EMAC_WKUP_IRQHandler + .thumb_set EMAC_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler ,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler ,Default_Handler + + .weak CAN2_SE_IRQHandler + .thumb_set CAN2_SE_IRQHandler,Default_Handler + + .weak OTGFS1_IRQHandler + .thumb_set OTGFS1_IRQHandler,Default_Handler + + .weak DMA1_Channel6_IRQHandler + .thumb_set DMA1_Channel6_IRQHandler,Default_Handler + + .weak DMA1_Channel7_IRQHandler + .thumb_set DMA1_Channel7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EVT_IRQHandler + .thumb_set I2C3_EVT_IRQHandler,Default_Handler + + .weak I2C3_ERR_IRQHandler + .thumb_set I2C3_ERR_IRQHandler,Default_Handler + + .weak OTGFS2_WKUP_IRQHandler + .thumb_set OTGFS2_WKUP_IRQHandler,Default_Handler + + .weak OTGFS2_IRQHandler + .thumb_set OTGFS2_IRQHandler,Default_Handler + + .weak DVP_IRQHandler + .thumb_set DVP_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + + .weak UART7_IRQHandler + .thumb_set UART7_IRQHandler,Default_Handler + + .weak UART8_IRQHandler + .thumb_set UART8_IRQHandler,Default_Handler + + .weak SPI4_IRQHandler + .thumb_set SPI4_IRQHandler,Default_Handler + + .weak QSPI2_IRQHandler + .thumb_set QSPI2_IRQHandler,Default_Handler + + .weak QSPI1_IRQHandler + .thumb_set QSPI1_IRQHandler,Default_Handler + + .weak DMAMUX_IRQHandler + .thumb_set DMAMUX_IRQHandler ,Default_Handler + + .weak SDIO2_IRQHandler + .thumb_set SDIO2_IRQHandler ,Default_Handler + + .weak ACC_IRQHandler + .thumb_set ACC_IRQHandler,Default_Handler + + .weak TMR20_BRK_IRQHandler + .thumb_set TMR20_BRK_IRQHandler,Default_Handler + + .weak TMR20_OVF_IRQHandler + .thumb_set TMR20_OVF_IRQHandler,Default_Handler + + .weak TMR20_TRG_HALL_IRQHandler + .thumb_set TMR20_TRG_HALL_IRQHandler,Default_Handler + + .weak TMR20_CH_IRQHandler + .thumb_set TMR20_CH_IRQHandler,Default_Handler + + .weak DMA2_Channel1_IRQHandler + .thumb_set DMA2_Channel1_IRQHandler,Default_Handler + + .weak DMA2_Channel2_IRQHandler + .thumb_set DMA2_Channel2_IRQHandler,Default_Handler + + .weak DMA2_Channel3_IRQHandler + .thumb_set DMA2_Channel3_IRQHandler,Default_Handler + + .weak DMA2_Channel4_IRQHandler + .thumb_set DMA2_Channel4_IRQHandler,Default_Handler + + .weak DMA2_Channel5_IRQHandler + .thumb_set DMA2_Channel5_IRQHandler,Default_Handler + + .weak DMA2_Channel6_IRQHandler + .thumb_set DMA2_Channel6_IRQHandler,Default_Handler + + .weak DMA2_Channel7_IRQHandler + .thumb_set DMA2_Channel7_IRQHandler,Default_Handler diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a109d8d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,100 @@ +#-- Service -------------------------------------------------------------------- +SET(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/MODULES/CmakeConfig_GCC_CortexM4/gcc_cm4f.cmake) +ENABLE_LANGUAGE(ASM) +CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0) + +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O1") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O1") + +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(SMART_COMPONENTS_TELEMATICA_V2) # Project name + +SET(HARDWARE_VERSION 1.05) +SET(VERSION \"1.18_TELE\") + + +SET(VECT_TAB_OFFSET "0x10000") + +SET(HEXT_VALUE "8000000") +SET(PLL_NS "125") + # + +#-- Defines -------------------------------------------------------------------- +ADD_DEFINITIONS(-DUART_DMA_SEND) +ADD_DEFINITIONS(-DDEBUG -DAT32F435VGT7 -DAT_START_F435_V1) + +ADD_DEFINITIONS(-DFIRMWARE_TEST=1) + +ADD_DEFINITIONS(-DFIRMWARE_VERSION=${VERSION}) +ADD_DEFINITIONS(-DHARDWARE_REVISION=\"${HARDWARE_VERSION}\") + + +ADD_DEFINITIONS(-DVECT_TAB_OFFSET=${VECT_TAB_OFFSET}) +ADD_DEFINITIONS(-DHEXT_VALUE=${HEXT_VALUE}) +ADD_DEFINITIONS(-DPLL_NS=${PLL_NS}) +ADD_DEFINITIONS(-DCMSIS_device_header="at32f435_437.h") +ADD_DEFINITIONS(-DFLASH_PAGE_SIZE=2048) +ADD_DEFINITIONS(-DCOM_INT_BIG_BUFFERS) +ADD_DEFINITIONS(-DVARIABLE_TABLE_WITH_ID) + +ADD_DEFINITIONS(-DACCESS_ADC=1) +ADD_DEFINITIONS(-DACCESS_RTC=1) + +#ADD_DEFINITIONS(-DLFS_NO_ASSERT=1) + +ADD_DEFINITIONS(-DLFS_NO_ASSERT=1) + + +ADD_DEFINITIONS(-DLFS_THREADSAFE=1) + +ADD_DEFINITIONS(-DLFS_NO_DEBUG=1) +ADD_DEFINITIONS(-DLFS_NO_WARN=1) +ADD_DEFINITIONS(-DLFS_NO_ERROR=1) + + +#ADD_DEFINITIONS(-DLFS_NO_MALLOC=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/AT32F437xM_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) + diff --git a/artery_f437.cfg b/artery_f437.cfg new file mode 100644 index 0000000..ed3d583 --- /dev/null +++ b/artery_f437.cfg @@ -0,0 +1,27 @@ +# +# This is an STM32F429 discovery board with a single STM32F429ZI chip. +# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF259090 +# + +source [find interface/stlink.cfg] + +transport select hla_swd + +source [find target/at32f435xx.cfg] + +#reset_config trst_only +#reset_config srst_only +#reset_config trst_and_srst +#reset_config srst_pulls_trst +#reset_config combined +#reset_config srst_gates_jtag +#reset_config trst_push_pull +#reset_config trst_push_pull + +reset_config none + +#reset_config [none|trst_only|srst_only|trst_and_srst] +#[srst_pulls_trst|trst_pulls_srst|combined|separate] +#[srst_gates_jtag|srst_nogate] [trst_push_pull|trst_open_drain] +#[srst_push_pull|srst_open_drain] +#[connect_deassert_srst|connect_assert_srst] \ No newline at end of file diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..b6646e3 --- /dev/null +++ b/modular.json @@ -0,0 +1,332 @@ +{ + "dep": [ + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "DeviceStartup_ARTERY_AT32F435_437" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CmakeConfig_GCC_CortexM4" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SystemSync_CMSIS_RTOS" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SystemDelayInterface" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CmsisCore5" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CmsisRtosThreadUtils" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "GpioPin_ARTERY_AT32F435_437" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPort_ARTERY_AT32" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPort_P2P_CmsisRtos" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPortHalfDuplexInterface" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "Rtc_ARTERY_AT32F435_437" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AtCmdCommon" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "BaseTypes" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "LoggerToSerialPort" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "Nmea0183Parser" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_StorageOnFlash" + }, + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AtGsmSimCom7600E" + }, + + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_Egts" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "FileSystemLittleFsArtery" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_LittleFs" + }, + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "XfcTransportProtocol" + }, + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "ComIntCmd_Certs" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "FirmwareLoader_ARTERY_AT32" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_DeviceStorage" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_DataNonVolatile" + }, + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_EXTERNAL_TELEMATICA" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_SOCKET" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_DataStorage_TELEMATICA" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_FreeRTOSHeap4_CM4_CMSIS" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_SystemDelay_CMSIS_RTOS" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_SystemDelay_CMSIS_RTOS" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "FirmwareMetadataSection" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_META_TELEMATICA" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_ADR" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AES" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "DeviceTestsTable" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AES" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CanSerialPortFrame_ARTERY_F435" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPortFrameInterface" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CanPortFrame" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "Adc_ARTERY_AT32" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "Accel_QMA6100P" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "PointEvent" + }, + + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CanSerialPortFrame_ARTERY_F435" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPortFrameInterface" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CanPortFrame" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "CanSerialPortFrame_TP" + }, + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SerialPortFrameTpInterface" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_CanUdsUazStatus" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_Can" + }, + + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_GetGsmFirmware" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "ComIntCmd_Certs" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AtGsmSimCom7600_CA" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "SMART_COMPONENTS_ComInt_Commands" + }, + + { + "type": "git", + "provider": "Smart_Components_Aurus", + "repo": "AtGsmSim7600" + }, + { + "type": "local", + "dir": "APP" + } + ] +} +