Проект перенесен в папку MDK-ARM

This commit is contained in:
2025-12-28 15:38:30 +03:00
parent 8b930ebe12
commit c63d98f431
75 changed files with 110 additions and 64 deletions

View File

@@ -0,0 +1,429 @@
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER RTT * Real Time Transfer for embedded targets *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the RTT protocol and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* RTT version: 8.10g *
* *
**********************************************************************
---------------------------END-OF-HEADER------------------------------
File : SEGGER_RTT_Conf.h
Purpose : Implementation of SEGGER real-time transfer (RTT) which
allows real-time communication on targets which support
debugger memory accesses while the CPU is running.
Revision: $Rev: 24316 $
*/
#ifndef SEGGER_RTT_CONF_H
#define SEGGER_RTT_CONF_H
#ifdef __IAR_SYSTEMS_ICC__
#include <intrinsics.h>
#endif
/*********************************************************************
*
* Defines, configurable
*
**********************************************************************
*/
//
// Take in and set to correct values for Cortex-A systems with CPU cache
//
//#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (32) // Largest cache line size (in bytes) in the current system
//#define SEGGER_RTT_UNCACHED_OFF (0xFB000000) // Address alias where RTT CB and buffers can be accessed uncached
//
// Most common case:
// Up-channel 0: RTT
// Up-channel 1: SystemView
//
#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3)
#endif
//
// Most common case:
// Down-channel 0: RTT
// Down-channel 1: SystemView
//
#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3)
#endif
#ifndef BUFFER_SIZE_UP
#define BUFFER_SIZE_UP (4096) // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif
#ifndef BUFFER_SIZE_DOWN
#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
#endif
#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE
#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64)
#endif
#ifndef SEGGER_RTT_MODE_DEFAULT
#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_TRIM // Mode for pre-initialized terminal channel (buffer 0)
#endif
/*********************************************************************
*
* RTT memcpy configuration
*
* memcpy() is good for large amounts of data,
* but the overhead is big for small amounts, which are usually stored via RTT.
* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead.
*
* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions.
* This is may be required with memory access restrictions,
* such as on Cortex-A devices with MMU.
*/
#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP
#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop
#endif
//
// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets
//
//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__))
// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes))
//#endif
//
// Target is not allowed to perform other RTT operations while string still has not been stored completely.
// Otherwise we would probably end up with a mixed string in the buffer.
// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here.
//
// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4.
// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches.
// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly.
// (Higher priority = lower priority number)
// Default value for embOS: 128u
// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC
// or define SEGGER_RTT_LOCK() to completely disable interrupts.
//
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20)
#endif
/*********************************************************************
*
* RTT lock configuration for SEGGER Embedded Studio,
* Rowley CrossStudio and GCC
*/
#if ((defined(__SES_ARM) || defined(__SES_RISCV) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) && !defined(WIN32))
#if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs %0, primask \n\t" \
"movs r1, #1 \n\t" \
"msr primask, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: \
); \
}
#elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__) || defined(__ARM_ARCH_8_1M_MAIN__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs %0, basepri \n\t" \
"mov r1, %1 \n\t" \
"msr basepri, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: \
); \
}
#elif (defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs r1, CPSR \n\t" \
"mov %0, r1 \n\t" \
"orr r1, r1, #0xC0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
"mrs r1, CPSR \n\t" \
"bic r1, r1, #0xC0 \n\t" \
"and r0, r0, #0xC0 \n\t" \
"orr r1, r1, r0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "r0", "r1", "cc" \
); \
}
#elif defined(__riscv) || defined(__riscv_xlen)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("csrr %0, mstatus \n\t" \
"csrci mstatus, 8 \n\t" \
"andi %0, %0, 8 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("csrr a1, mstatus \n\t" \
"or %0, %0, a1 \n\t" \
"csrs mstatus, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "a1" \
); \
}
#else
#define SEGGER_RTT_LOCK()
#define SEGGER_RTT_UNLOCK()
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for IAR EWARM
*/
#ifdef __ICCARM__
#if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) || \
(defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_PRIMASK(); \
__set_PRIMASK(1);
#define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
}
#elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || \
(defined (__ARM7M__) && (__CORE__ == __ARM7M__)) || \
(defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) || \
(defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_BASEPRI(); \
__set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
#define SEGGER_RTT_UNLOCK() __set_BASEPRI(_SEGGER_RTT__LockState); \
}
#elif (defined (__ARM7A__) && (__CORE__ == __ARM7A__)) || \
(defined (__ARM7R__) && (__CORE__ == __ARM7R__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs r1, CPSR \n\t" \
"mov %0, r1 \n\t" \
"orr r1, r1, #0xC0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
"mrs r1, CPSR \n\t" \
"bic r1, r1, #0xC0 \n\t" \
"and r0, r0, #0xC0 \n\t" \
"orr r1, r1, r0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "r0", "r1", "cc" \
); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for IAR RX
*/
#ifdef __ICCRX__
#define SEGGER_RTT_LOCK() { \
unsigned long _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_interrupt_state(); \
__disable_interrupt();
#define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for IAR RL78
*/
#ifdef __ICCRL78__
#define SEGGER_RTT_LOCK() { \
__istate_t _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_interrupt_state(); \
__disable_interrupt();
#define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for KEIL ARM
*/
#ifdef __CC_ARM
#if (defined __TARGET_ARCH_6S_M)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
register unsigned char _SEGGER_RTT__PRIMASK __asm( "primask"); \
_SEGGER_RTT__LockState = _SEGGER_RTT__PRIMASK; \
_SEGGER_RTT__PRIMASK = 1u; \
__schedule_barrier();
#define SEGGER_RTT_UNLOCK() _SEGGER_RTT__PRIMASK = _SEGGER_RTT__LockState; \
__schedule_barrier(); \
}
#elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
register unsigned char BASEPRI __asm( "basepri"); \
_SEGGER_RTT__LockState = BASEPRI; \
BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \
__schedule_barrier();
#define SEGGER_RTT_UNLOCK() BASEPRI = _SEGGER_RTT__LockState; \
__schedule_barrier(); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for TI ARM
*/
#ifdef __TI_ARM__
#if defined (__TI_ARM_V6M0__)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_PRIMASK(); \
__set_PRIMASK(1);
#define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
}
#elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
#define SEGGER_RTT_UNLOCK() _set_interrupt_priority(_SEGGER_RTT__LockState); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for CCRX
*/
#ifdef __RX
#include <machine.h>
#define SEGGER_RTT_LOCK() { \
unsigned long _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = get_psw() & 0x010000; \
clrpsw_i();
#define SEGGER_RTT_UNLOCK() set_psw(get_psw() | _SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for embOS Simulation on Windows
* (Can also be used for generic RTT locking with embOS)
*/
#if defined(WIN32) || defined(SEGGER_RTT_LOCK_EMBOS)
void OS_SIM_EnterCriticalSection(void);
void OS_SIM_LeaveCriticalSection(void);
#define SEGGER_RTT_LOCK() { \
OS_SIM_EnterCriticalSection();
#define SEGGER_RTT_UNLOCK() OS_SIM_LeaveCriticalSection(); \
}
#endif
/*********************************************************************
*
* RTT lock configuration fallback
*/
#ifndef SEGGER_RTT_LOCK
#define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts)
#endif
#ifndef SEGGER_RTT_UNLOCK
#define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state)
#endif
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,131 @@
/**
**************************************************************************
* @file mylibs_config.h
* @brief Конфигурации для библиотек MyLibs
**************************************************************************
* @defgroup MYLIBS_CONFIG Configs
* @ingroup MYLIBS_ALL
* @brief Конфигурации для библиотек MyLibs
* @{
*************************************************************************/
#ifndef __MYLIBS_CONFIG_H_
#define __MYLIBS_CONFIG_H_
#include "plib035.h"
#include "retarget_conf.h"
// user includes
/**
* @addtogroup TRACE_CONFIG Trace configs
* @ingroup MYLIBS_CONFIG
* @brief Конфигурация трекеров и трассировки
* @{
*/
#define TRACKERS_ENABLE ///< Включить трекеры
#define SERIAL_TRACE_ENABLE ///< Включить serial трассировку
#define RTT_TRACE_ENABLE ///< Включить serial трассировку через RTT
//#define SWO_TRACE_ENABLE ///< Включить serial трассировку через SWO
/**
* @brief Уровень log serial трассировки @ref log_printf
* - LOG_LEVEL == 0 - логирование отключено (макрос пустой)
* - LOG_LEVEL == 1 - выводится время и TAG
* - LOG_LEVEL >= 2 - выводится время, TAG, имя файла и номер строки
*/
#define LOG_LEVEL 1
#define RTT_FLASH_BUFFER_SIZE 1024 ///< Размер буфера RTT в Flash
#define RTT_FLASH_SECTOR FLASH_SECTOR_11 ///< Сектор FLASH куда положится RTT буфер
#define RTT_FLASH_SECTOR_START 0x080E0000 ///< Начало сектора RTT_FLASH_SECTOR
#define RTT_FLASH_SECTOR_END 0x080FFFFF ///< Конец сектора RTT_FLASH_SECTOR
#define HARDFAULT_SERIAL_TRACE ///< Включить обработку и serial трассировку Hardfault
#define HF_RTT_TAG_BASE 0xDEAD0000 ///< базовый тег для HardFault
#define HF_RTT_TAIL_SIZE RTT_FLASH_BUFFER_SIZE ///< Размер буфера RTT, который сохранится при Hardfault
#define HF_STACK_DUMP_WORDS 32 ///< Сколько слов стека будет проанализировано во время Hardfault
#define HF_FLASH_ADDR ((uint32_t)0x080FF000) ///< Адрес FLASH куда положится RTT буфер
#define HF_RAM_END 0x20030000 ///< Конец RAM памяти (чтобы во время анализа стека не выйти за пределы)
#define GPIO_TRACE_ENABLE ///< Включить GPIO трассировку
/** TRACE_CONFIG
* @}
*/
/**
* @addtogroup FILTER_CONFIG Filter configs
* @ingroup MYLIBS_CONFIG
* @brief Конфигурация фильтров
* @{
*/
#define FILTERS_ENABLE ///< Включить библиотеку фильтров
//#define FILTER_MEDIAN_MAX_SIZE ///< Максимальный размер окна медианного фильтра (по умолчанию 5)
//#define FILTER_AVERAGE_MAX_SIZE ///< Максимальный размер окна усредняющего фильтра (по умолчанию 8)
//#define FILTER_POLY_MAX_ORDER ///< Максимальный порядок полинома (по умолчанию 4)
#define FILTERS_DISABLE_MOVING_AVERAGE
/** GEN_CONFIG
* @}
*/
/**
* @addtogroup GEN_CONFIG Genetic configs
* @ingroup MYLIBS_CONFIG
* @brief Конфигурация генетического алгоритма обучения
* @{
*/
#define GEN_OPTIMIZATION_ENABLE ///< Включить оптимизацию параметров
#define GEN_MAX_PARAMS 20 ///< Максимальное количество параметров
#define GEN_MAX_CANDIDATES 100 ///< Максимальное количество кандидатов для обучения
/** GEN_CONFIG
* @}
*/
/**
* @addtogroup GEN_CONFIG Genetic configs
* @ingroup MYLIBS_CONFIG
* @brief Конфигурация генетического алгоритма обучения
* @{
*/
#define BENCH_TIME_ENABLE ///< Включить бенч времени
#define BENCH_TIME_MAX_CHANNELS 16 ///< Максимальное количество каналов измерения
/** GEN_CONFIG
* @}
*/
/**
* @addtogroup LIBS_CONFIG Libraries configs
* @ingroup MYLIBS_CONFIG
* @brief Подключение различных модулей библиотеки
* @{
*/
#define local_time() millis() ///< Локальное время
#define INCLUDE_FILTERS ///< Подключить библиотеку с фильтрами
#define INCLUDE_GEN_OPTIMIZER ///< Подключить библиотеку для оптимизации параметров
#define INCLUDE_BIT_ACCESS_LIB ///< Подключить библиотеку с typedef с битовыми полями
#define INCLUDE_TRACKERS_LIB ///< Подключить библиотеку с трекерами
#define INCLUDE_TRACE_LIB ///< Подключить библиотеку с трейсами
#define INCLUDE_BENCH_TIME ///< Подключить библиотеку с бенчмарком времени
//#define FREERTOS_DELAY ///< Использовать FreeRTOS задержку, вместо HAL
/** LIBS_CONFIG
* @}
*/
/** MYLIBS_CONFIG
* @}
*/
#endif //__MYLIBS_CONFIG_H_

View File

@@ -0,0 +1,141 @@
/**
**************************************************************************
* @file mylibs_include.h
* @brief Заголочный файл для всех библиотек
**************************************************************************
* @details
Здесь нужно собрать библиотеки и дефайны, которые должны быть видны во всем проекте,
чтобы не подключать 100 инклюдов в каждом ".c" файле
**************************************************************************
* @defgroup MYLIBS_ALL My Libs
* @brief Все используемые MyLibs библиотеки
* @details
Для подключения библиотеки необходимо:
- Сконфигурировать mylibs_config.h:
- Подключить заголовочный файл HAL библиотеки конкретного МК (напр. stm32f4xx_hal.h)
- Подключить другие заголовочные файлы которые общие для всего проекта и должны быть видны
- Подключить mylibs_include.h туда, где необходим доступ к библиотекам.
*************************************************************************/
#ifndef __MYLIBS_INCLUDE_H_
#define __MYLIBS_INCLUDE_H_
#include "mylibs_defs.h"
#ifdef ARM_MATH_CM4
#include "arm_math.h"
#else
#include "math.h"
#endif
#ifdef INCLUDE_BIT_ACCESS_LIB
#include "bit_access.h"
#endif
#ifdef INCLUDE_TRACKERS_LIB
#include "trackers.h"
#else
#define TrackerTypeDef(num_user_vars) void *
#define num_of_usercnts(_user_) 0
#define assert_tracecnt(_cntstruct_, _uservarnumb_) 0
#define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(0)
#define tern_assert_usertracker(_cntstruct_, _uservarnumb_) 0
#define TrackerGet_Ok(_cntstruct_) dummy
#define TrackerGet_Err(_cntstruct_) dummy
#define TrackerGet_Warn(_cntstruct_) dummy
#define TrackerGet_User(_cntstruct_, _uservarnumb_) dummy
#define TrackerCnt_Ok(_cntstruct_)
#define TrackerCnt_Err(_cntstruct_)
#define TrackerCnt_Warn(_cntstruct_)
#define TrackerCnt_User(_cntstruct_, _uservarnumb_)
#define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_)
#define TrackerClear_All(_cntstruct_)
#define TrackerClear_Ok(_cntstruct_)
#define TrackerClear_Err(_cntstruct_)
#define TrackerClear_Warn(_cntstruct_)
#define TrackerClear_User(_cntstruct_)
#define TrackerClear_UserAll(_cntstruct_)
#endif
#ifdef INCLUDE_TRACE_LIB
#include "trace.h"
#else
#define my_printf(...)
#define log_printf(TAG, fmt, ...)
#define TRACE_GPIO_SET(_gpio_,_pin_)
#define TRACE_GPIO_RESET(_gpio_,_pin_)
#define RTT_FlashPrepare(...)
#define RTT_EraseFlash(...) 0
#define RTT_SaveToFlash(...) 0
#define RTT_ReadFromFlash(...) 0
#define HF_CheckRecovered(...) 0
#define HF_HandleFault(...)
#endif
#ifdef INCLUDE_GEN_OPTIMIZER
#include "gen_optimizer.h"
#else
typedef struct {
uint16_t n_params;
uint16_t n_cand;
uint16_t n_best;
uint16_t iq_mutation;
int32_t loss[0];
int32_t candidates[0][0];
} GenOptimizer_t;
#define GenOptimizer_Init(opt, n_params, n_cand, n_best, iq_mutation, start_params)
#define GenOptimizer_Step(opt, params, LossFunc)
#define PARAM_SCALE_Q16(x, min_val, max_val) (x)
#define PARAM_UNSCALE_Q16(q16_val, min_val, max_val) (q16_val)
#endif
#ifdef INCLUDE_BENCH_TIME
#include "bench_time.h"
#else //BENCH_TIME_ENABLE
#define BenchTime_Init()
#define BenchTime_Start(channel, ticks, tick_period) 0
#define BenchTime_End(channel, ticks) 0
#define BenchTime_GetMin(channel) 0
#define BenchTime_GetMax(channel) 0
#define BenchTime_GetAverage(channel) 0
#define BenchTime_GetCount(channel) 0
#define BenchTime_GetLast(channel) 0
#define BenchTime_ResetStats(channel)
#endif //BENCH_TIME_ENABLE
#ifdef INCLUDE_FILTERS
#include "filters.h"
#else //INCLUDE_FILTERS
#endif //INCLUDE_FILTERS
#ifdef INCLUDE_GENERAL_PERIPH_LIBS
#include "__general_flash.h"
#include "general_gpio.h"
#ifdef HAL_SPI_MODULE_ENABLED
#include "general_spi.h"
#endif
#ifdef HAL_UART_MODULE_ENABLED
#include "general_uart.h"
#endif
#ifdef HAL_TIM_MODULE_ENABLED
#include "general_tim.h"
#endif
#endif //INCLUDE_GENERAL_PERIPH_LIBS
/////////////////////////---USER SETTINGS---/////////////////////////
// user includes
// user settings
/////////////////////////---USER SETTINGS---/////////////////////////
#endif // __MYLIBS_INCLUDE_H_

View File

@@ -0,0 +1,393 @@
/*==============================================================================
* @file periph_config.h
* @author Разваляев Алексей
*------------------------------------------------------------------------------
* Общий файл конфигурации периферии проекта.
*
* Содержит:
* + Глобальные флаги включения периферии (USE_...)
* + Конфигурации тактирования и источников RCU
* + Таблицы конфигурации GPIO
* + Конфигурационные структуры для периферии:
* - GPIO
* - UART
* - TMR (таймеры)
* - ADC (SEQ и DC)
* - DMA
* - NVIC (приоритеты прерываний)
*
* Используется драйверами:
* - gpio.c
* - uart.c
* - tmr.c
* - adc.c
* - dma.c
*
* Реализация инициализации периферии находится в соответствующих *.c файлах.
*==============================================================================
*/
#pragma once
//-- Includes ------------------------------------------------------------------
#include "sysclk.h"
#include "gpio.h"
#include "uart.h"
#include "tmr.h"
#include "adc.h"
/* Обработчик ошибок */
void Error_Handler(void);
//-- Общие Конфигурации -------------------------------------------------------
// 0 - использовать периферию
// 1 - не использовать
/* UART */
#define USE_UART0 0 /*!< Использовать UART0 */
#define USE_UART1 1 /*!< Использовать UART1 */
/* Timers */
#define USE_TMR0 1 /*!< Использовать Таймер 0 */
#define USE_TMR1 1 /*!< Использовать Таймер 1 */
#define USE_TMR2 1 /*!< Использовать Таймер 2 */
#define USE_TMR3 0 /*!< Использовать Таймер 3 */
/* ADC */
#define USE_ADC_SEQ0 0 /*!< Использовать Секвенсор 0 */
#define USE_ADC_SEQ1 1 /*!< Использовать Секвенсор 1 */
#define USE_ADC_DC0 0 /*!< Использовать Компаратор 0 */
#define USE_ADC_DC1 0 /*!< Использовать Компаратор 1 */
#define USE_ADC_DC2 0 /*!< Использовать Компаратор 2 */
#define USE_ADC_DC3 0 /*!< Использовать Компаратор 3 */
/** @note Для RETARGET надо объявить этот дефайн в проекте
Options for Target -> C/C++ -> Defines
*/
//#define RETARGET // закоментирован - отключен,
// // разкоментирован - включен
//#define RETARGET_USE_ITM // закоментирован - использовать UART,
// // разкоментирован - использовать ITM
// Для дальнейшей настройки RETARGET -> retarget_conf.h
//-- RCU Конфигурации ---------------------------------------------------------
/** @brief Источник тактирования МК
* @note Система всегда стартует с внутреннего МК и после потом переходит на PLL и заданный здесь источник
Поменять тактировние при старте можно в system_K1921VK035.h
*/
static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSEClk;
/** @brief Желаемая частота тактирования МК в МГц*/
#define SYSCLK_CORE_CLOCK_MHZ 100
/** @brief Частота тиков uwTick тактирования МК */
static SYSCLK_TickHz_TypeDef SYSCLK_TickType = SYSCLK_Tick_1ms;
//-- GPIO Конфигурации --------------------------------------------------------
/** @note
Note:
Периферия сама настроит нужные пины в gpiox_config на альтернативные функции
*/
/** @brief Конфигурации пинов порта GPIOA */
static GPIO_Init_TypeDef gpioa_config[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
/** @brief Конфигурации пинов порта GPIOB */
static GPIO_Init_TypeDef gpiob_config[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
//-- UART Конфигурации --------------------------------------------------------
#if USE_UART0==1
static UART_ExtInit_TypeDef uart0_config = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
#if USE_UART1==1
static UART_ExtInit_TypeDef uart1_config = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
//-- TMR Конфигурации ---------------------------------------------------------
/** @note Макросы для задания периода:
* - LOAD(Period, Prescaler) - период в тиках и прескалер*
* - FREQ_HZ(Hz) - период таймера в Герцах
* - PERIOD_US(us) - период в микросекундах
* * Т.к. аппаратного прескалера нет, используется программный.
* Получить тики будто бы они с прескалером можно функциями TMR_Get_Cnt, TMR_Get_Period
*/
#if USE_TMR0==1
static TMR_ExtInit_TypeDef tmr0_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR1==1
static TMR_ExtInit_TypeDef tmr1_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, FREQ_HZ(10),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR2==1
static TMR_ExtInit_TypeDef tmr2_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR3==1
static TMR_Init_TypeDef tmr3_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
//-- ADC Конфигурации -----------------------------------------------------
/** @brief Источник тактирования АЦП */
static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk;
/** @brief Желаемая частота тактирования АЦП в МГц*/
static float ADC_ClockMHz = 12.5;
/** @brief Пины каких каналов инициализировать для АЦП */
static ADC_ChannelEnableTypeDef adc_ch_config = {
//Channel 0, Channel 1, Channel 2, Channel 3
ENABLE, ENABLE, ENABLE, ENABLE,
};
//-- ADC SEQ Конфигурации -----------------------------------------------------
#if USE_ADC_SEQ0==1
static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
#if USE_ADC_SEQ1==1
static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
//-- ADC DC Конфигурации ------------------------------------------------------
#if USE_ADC_DC0==1
static ADC_DC_ExtInit_TypeDef adc_dc0_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC1==1
static ADC_DC_ExtInit_TypeDef adc_dc1_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC2==1
static ADC_DC_ExtInit_TypeDef adc_dc2_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC3==1
static ADC_DC_ExtInit_TypeDef adc_dc3_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
//-- NVIC Конфигурации --------------------------------------------------------
/** @brief Приоритеты прерываний, 0 - самый высокий приоритет*/
static uint8_t NCIV_Priorities[] =
{
[GPIOA_IRQn] = 0,
[GPIOB_IRQn] = 0,
[TMR0_IRQn] = 0,
[TMR1_IRQn] = 0,
[TMR2_IRQn] = 0,
[TMR3_IRQn] = 0,
[UART0_TD_IRQn] = 0,
[UART0_RX_IRQn] = 0,
[UART0_TX_IRQn] = 0,
[UART0_E_RT_IRQn] = 0,
[UART1_TD_IRQn] = 0,
[UART1_RX_IRQn] = 0,
[UART1_TX_IRQn] = 0,
[UART1_E_RT_IRQn] = 0,
[SPI_RO_RT_IRQn] = 0,
[SPI_RX_IRQn] = 0,
[SPI_TX_IRQn] = 0,
[I2C_IRQn] = 0,
[ECAP0_IRQn] = 0,
[ECAP1_IRQn] = 0,
[ECAP2_IRQn] = 0,
[PWM0_IRQn] = 0,
[PWM0_HD_IRQn] = 0,
[PWM0_TZ_IRQn] = 0,
[PWM1_IRQn] = 0,
[PWM1_HD_IRQn] = 0,
[PWM1_TZ_IRQn] = 0,
[PWM2_IRQn] = 0,
[PWM2_HD_IRQn] = 0,
[PWM2_TZ_IRQn] = 0,
[QEP_IRQn] = 0,
[ADC_SEQ0_IRQn] = 0,
[ADC_SEQ1_IRQn] = 0,
[ADC_DC_IRQn] = 0,
[CAN0_IRQn] = 0,
[CAN1_IRQn] = 0,
[CAN2_IRQn] = 0,
[CAN3_IRQn] = 0,
[CAN4_IRQn] = 0,
[CAN5_IRQn] = 0,
[CAN6_IRQn] = 0,
[CAN7_IRQn] = 0,
[CAN8_IRQn] = 0,
[CAN9_IRQn] = 0,
[CAN10_IRQn] = 0,
[CAN11_IRQn] = 0,
[CAN12_IRQn] = 0,
[CAN13_IRQn] = 0,
[CAN14_IRQn] = 0,
[CAN15_IRQn] = 0,
[DMA_CH0_IRQn] = 0,
[DMA_CH1_IRQn] = 0,
[DMA_CH2_IRQn] = 0,
[DMA_CH3_IRQn] = 0,
[DMA_CH4_IRQn] = 0,
[DMA_CH5_IRQn] = 0,
[DMA_CH6_IRQn] = 0,
[DMA_CH7_IRQn] = 0,
[DMA_CH8_IRQn] = 0,
[DMA_CH9_IRQn] = 0,
[DMA_CH10_IRQn] = 0,
[DMA_CH11_IRQn] = 0,
[DMA_CH12_IRQn] = 0,
[DMA_CH13_IRQn] = 0,
[DMA_CH14_IRQn] = 0,
[DMA_CH15_IRQn] = 0,
[WDT_IRQn] = 0,
[RCU_IRQn] = 0,
[MFLASH_IRQn] = 0,
[FPU_IRQn] = 0,
};
static inline void NVIC_SetAllPriorities(void)
{
for(int i = 0; i < sizeof(NCIV_Priorities); i++)
{
NVIC_SetPriority((IRQn_Type)i, NCIV_Priorities[i]);
}
}
//-- Utils --------------------------------------------------------------------