From 9da691788162dfabe02b045508acfdc777bb62c1 Mon Sep 17 00:00:00 2001 From: ZhuGangfei Date: Fri, 29 Mar 2019 17:04:48 +0800 Subject: [PATCH] =?UTF-8?q?Upload=20mm32l07x=20BSP=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/mm32l07x/.config | 332 + bsp/mm32l07x/Kconfig | 20 + .../Libraries/CMSIS/CORE/arm_common_tables.h | 93 + .../Libraries/CMSIS/CORE/arm_const_structs.h | 85 + bsp/mm32l07x/Libraries/CMSIS/CORE/arm_math.h | 7306 ++++++++++++++++ bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0.h | 667 ++ .../Libraries/CMSIS/CORE/core_cm0plus.h | 793 ++ bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm3.h | 1627 ++++ bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4.h | 1772 ++++ .../Libraries/CMSIS/CORE/core_cm4_simd.h | 673 ++ .../Libraries/CMSIS/CORE/core_cmFunc.h | 637 ++ .../Libraries/CMSIS/CORE/core_cmInstr.h | 880 ++ .../Libraries/CMSIS/CORE/core_sc000.h | 813 ++ .../Libraries/CMSIS/CORE/core_sc300.h | 1598 ++++ .../CMSIS/IAR_CORE/arm_common_tables.h | 136 + .../CMSIS/IAR_CORE/arm_const_structs.h | 79 + .../Libraries/CMSIS/IAR_CORE/arm_math.h | 7539 +++++++++++++++++ .../Libraries/CMSIS/IAR_CORE/core_cm0.h | 711 ++ .../Libraries/CMSIS/IAR_CORE/core_cm0plus.h | 822 ++ .../Libraries/CMSIS/IAR_CORE/core_cm3.h | 1650 ++++ .../Libraries/CMSIS/IAR_CORE/core_cm4.h | 1802 ++++ .../Libraries/CMSIS/IAR_CORE/core_cm7.h | 2221 +++++ .../Libraries/CMSIS/IAR_CORE/core_cmFunc.h | 637 ++ .../Libraries/CMSIS/IAR_CORE/core_cmInstr.h | 880 ++ .../Libraries/CMSIS/IAR_CORE/core_cmSimd.h | 697 ++ .../Libraries/CMSIS/IAR_CORE/core_sc000.h | 842 ++ .../Libraries/CMSIS/IAR_CORE/core_sc300.h | 1630 ++++ .../MM32L0xx/HAL_lib/MM32L0xx_lib_version.txt | 6 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_adc.h | 312 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_bkp.h | 88 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_can.h | 379 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_comp.h | 301 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_conf.h | 43 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_dma.h | 332 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_exti.h | 168 + .../MM32L0xx/HAL_lib/inc/HAL_flash.h | 307 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_gpio.h | 368 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_i2c.h | 330 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_iwdg.h | 131 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_misc.h | 136 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_pwr.h | 152 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_rcc.h | 368 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_spi.h | 418 + .../MM32L0xx/HAL_lib/inc/HAL_syscfg.h | 180 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_tim.h | 1103 +++ .../Libraries/MM32L0xx/HAL_lib/inc/HAL_uart.h | 247 + .../Libraries/MM32L0xx/HAL_lib/inc/HAL_wwdg.h | 106 + .../Libraries/MM32L0xx/HAL_lib/inc/dtype.h | 56 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_adc.c | 816 ++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_bkp.c | 60 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_can.c | 968 +++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_comp.c | 420 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_dma.c | 535 ++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_exti.c | 272 + .../MM32L0xx/HAL_lib/src/HAL_flash.c | 893 ++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_gpio.c | 488 ++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_i2c.c | 839 ++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_iwdg.c | 194 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_misc.c | 163 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_pwr.c | 344 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_rcc.c | 1051 +++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_spi.c | 688 ++ .../MM32L0xx/HAL_lib/src/HAL_syscfg.c | 199 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_tim.c | 3276 +++++++ .../Libraries/MM32L0xx/HAL_lib/src/HAL_uart.c | 455 + .../Libraries/MM32L0xx/HAL_lib/src/HAL_wwdg.c | 221 + .../Libraries/MM32L0xx/Include/HAL_device.h | 31 + .../Libraries/MM32L0xx/Include/MM32L0xx.h | 4984 +++++++++++ .../Source/GCC_StartAsm/startup_MM32L0xx.s | 305 + .../Source/IAR_StartAsm/startup_MM32L0xx.s | 305 + .../Source/KEIL_StartAsm/startup_MM32L0xx.s | 248 + .../MM32L0xx/Source/system_MM32L0xx.c | 662 ++ .../MM32L0xx/Source/system_MM32L0xx.h | 2 + .../Libraries/MM32L0xx/change list.txt | 0 bsp/mm32l07x/Libraries/SConscript | 18 + bsp/mm32l07x/README.md | 109 + bsp/mm32l07x/SConscript | 11 + bsp/mm32l07x/SConstruct | 39 + bsp/mm32l07x/applications/SConscript | 9 + bsp/mm32l07x/applications/main.c | 39 + bsp/mm32l07x/drivers/Kconfig | 18 + bsp/mm32l07x/drivers/SConscript | 20 + bsp/mm32l07x/drivers/board.c | 43 + bsp/mm32l07x/drivers/board.h | 32 + bsp/mm32l07x/drivers/drv_uart.c | 245 + bsp/mm32l07x/drivers/drv_uart.h | 16 + bsp/mm32l07x/drivers/linker_scripts/link.icf | 36 + bsp/mm32l07x/drivers/linker_scripts/link.lds | 137 + bsp/mm32l07x/drivers/linker_scripts/link.sct | 15 + .../figures/MM32 MiniBoard Rev.D2_1.jpg | Bin 0 -> 1313048 bytes .../figures/MM32 MiniBoard Rev.D2_2.jpg | Bin 0 -> 1281744 bytes bsp/mm32l07x/project.ewd | 2834 +++++++ bsp/mm32l07x/project.ewp | 2290 +++++ bsp/mm32l07x/project.eww | 10 + bsp/mm32l07x/project.uvoptx | 1074 +++ bsp/mm32l07x/project.uvprojx | 766 ++ bsp/mm32l07x/rtconfig.h | 157 + bsp/mm32l07x/rtconfig.py | 135 + bsp/mm32l07x/template.ewp | 2040 +++++ bsp/mm32l07x/template.eww | 10 + bsp/mm32l07x/template.uvopt | 184 + bsp/mm32l07x/template.uvoptx | 177 + bsp/mm32l07x/template.uvprojx | 389 + 103 files changed, 71745 insertions(+) create mode 100644 bsp/mm32l07x/.config create mode 100644 bsp/mm32l07x/Kconfig create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/arm_common_tables.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/arm_const_structs.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/arm_math.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0plus.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm3.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4_simd.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmFunc.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmInstr.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc000.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc300.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_common_tables.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_const_structs.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_math.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0plus.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm3.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm4.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm7.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmFunc.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmInstr.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmSimd.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc000.h create mode 100644 bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc300.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/MM32L0xx_lib_version.txt create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_adc.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_bkp.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_can.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_comp.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_conf.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_dma.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_exti.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_flash.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_gpio.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_i2c.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_iwdg.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_misc.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_pwr.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_rcc.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_spi.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_syscfg.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_tim.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_uart.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_wwdg.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/dtype.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_adc.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_bkp.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_can.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_comp.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_dma.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_exti.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_flash.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_gpio.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_i2c.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_iwdg.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_misc.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_pwr.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_rcc.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_spi.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_syscfg.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_tim.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_uart.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_wwdg.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Include/HAL_device.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Include/MM32L0xx.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Source/GCC_StartAsm/startup_MM32L0xx.s create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Source/IAR_StartAsm/startup_MM32L0xx.s create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Source/KEIL_StartAsm/startup_MM32L0xx.s create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.c create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.h create mode 100644 bsp/mm32l07x/Libraries/MM32L0xx/change list.txt create mode 100644 bsp/mm32l07x/Libraries/SConscript create mode 100644 bsp/mm32l07x/README.md create mode 100644 bsp/mm32l07x/SConscript create mode 100644 bsp/mm32l07x/SConstruct create mode 100644 bsp/mm32l07x/applications/SConscript create mode 100644 bsp/mm32l07x/applications/main.c create mode 100644 bsp/mm32l07x/drivers/Kconfig create mode 100644 bsp/mm32l07x/drivers/SConscript create mode 100644 bsp/mm32l07x/drivers/board.c create mode 100644 bsp/mm32l07x/drivers/board.h create mode 100644 bsp/mm32l07x/drivers/drv_uart.c create mode 100644 bsp/mm32l07x/drivers/drv_uart.h create mode 100644 bsp/mm32l07x/drivers/linker_scripts/link.icf create mode 100644 bsp/mm32l07x/drivers/linker_scripts/link.lds create mode 100644 bsp/mm32l07x/drivers/linker_scripts/link.sct create mode 100644 bsp/mm32l07x/figures/MM32 MiniBoard Rev.D2_1.jpg create mode 100644 bsp/mm32l07x/figures/MM32 MiniBoard Rev.D2_2.jpg create mode 100644 bsp/mm32l07x/project.ewd create mode 100644 bsp/mm32l07x/project.ewp create mode 100644 bsp/mm32l07x/project.eww create mode 100644 bsp/mm32l07x/project.uvoptx create mode 100644 bsp/mm32l07x/project.uvprojx create mode 100644 bsp/mm32l07x/rtconfig.h create mode 100644 bsp/mm32l07x/rtconfig.py create mode 100644 bsp/mm32l07x/template.ewp create mode 100644 bsp/mm32l07x/template.eww create mode 100644 bsp/mm32l07x/template.uvopt create mode 100644 bsp/mm32l07x/template.uvoptx create mode 100644 bsp/mm32l07x/template.uvprojx diff --git a/bsp/mm32l07x/.config b/bsp/mm32l07x/.config new file mode 100644 index 0000000000..16ae515c03 --- /dev/null +++ b/bsp/mm32l07x/.config @@ -0,0 +1,332 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=100 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDEL_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_MEMHEAP=y +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40001 +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=516 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=1024 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +# CONFIG_FINSH_USING_MSH_ONLY is not set +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PIN is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_MTD is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set + +# +# Using WiFi +# +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +# CONFIG_RT_USING_LIBC is not set +# CONFIG_RT_USING_PTHREADS is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# Modbus master and slave stack +# +# CONFIG_RT_USING_MODBUS is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_LOGTRACE is not set +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTKIT is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set + +# +# Hardware Drivers Config +# + +# +# On-chip Peripheral Drivers +# + +# +# UART Drivers +# +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_USING_UART2 is not set diff --git a/bsp/mm32l07x/Kconfig b/bsp/mm32l07x/Kconfig new file mode 100644 index 0000000000..c481f04670 --- /dev/null +++ b/bsp/mm32l07x/Kconfig @@ -0,0 +1,20 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "drivers/Kconfig" diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_common_tables.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_common_tables.h new file mode 100644 index 0000000000..7a59b5923e --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_common_tables.h @@ -0,0 +1,93 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.1 +* +* Project: CMSIS DSP Library +* Title: arm_common_tables.h +* +* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_COMMON_TABLES_H +#define _ARM_COMMON_TABLES_H + +#include "arm_math.h" + +extern const uint16_t armBitRevTable[1024]; +extern const q15_t armRecipTableQ15[64]; +extern const q31_t armRecipTableQ31[64]; +extern const q31_t realCoefAQ31[1024]; +extern const q31_t realCoefBQ31[1024]; +extern const float32_t twiddleCoef_16[32]; +extern const float32_t twiddleCoef_32[64]; +extern const float32_t twiddleCoef_64[128]; +extern const float32_t twiddleCoef_128[256]; +extern const float32_t twiddleCoef_256[512]; +extern const float32_t twiddleCoef_512[1024]; +extern const float32_t twiddleCoef_1024[2048]; +extern const float32_t twiddleCoef_2048[4096]; +extern const float32_t twiddleCoef_4096[8192]; +#define twiddleCoef twiddleCoef_4096 +extern const q31_t twiddleCoefQ31[6144]; +extern const q15_t twiddleCoefQ15[6144]; +extern const float32_t twiddleCoef_rfft_32[32]; +extern const float32_t twiddleCoef_rfft_64[64]; +extern const float32_t twiddleCoef_rfft_128[128]; +extern const float32_t twiddleCoef_rfft_256[256]; +extern const float32_t twiddleCoef_rfft_512[512]; +extern const float32_t twiddleCoef_rfft_1024[1024]; +extern const float32_t twiddleCoef_rfft_2048[2048]; +extern const float32_t twiddleCoef_rfft_4096[4096]; + + +#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20 ) +#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48 ) +#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56 ) +#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208 ) +#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440 ) +#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448 ) +#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800) +#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808) +#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032) + +extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH]; + +#endif /* ARM_COMMON_TABLES_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_const_structs.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_const_structs.h new file mode 100644 index 0000000000..8d7fac0f04 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_const_structs.h @@ -0,0 +1,85 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.1 +* +* Project: CMSIS DSP Library +* Title: arm_const_structs.h +* +* Description: This file has constant structs that are initialized for +* user convenience. For example, some can be given as +* arguments to the arm_cfft_f32() function. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_CONST_STRUCTS_H +#define _ARM_CONST_STRUCTS_H + +#include "arm_math.h" +#include "arm_common_tables.h" + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len16 = { + 16, twiddleCoef_16, armBitRevIndexTable16, ARMBITREVINDEXTABLE__16_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len32 = { + 32, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE__32_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len64 = { + 64, twiddleCoef_64, armBitRevIndexTable64, ARMBITREVINDEXTABLE__64_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len128 = { + 128, twiddleCoef_128, armBitRevIndexTable128, ARMBITREVINDEXTABLE_128_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len256 = { + 256, twiddleCoef_256, armBitRevIndexTable256, ARMBITREVINDEXTABLE_256_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len512 = { + 512, twiddleCoef_512, armBitRevIndexTable512, ARMBITREVINDEXTABLE_512_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024 = { + 1024, twiddleCoef_1024, armBitRevIndexTable1024, ARMBITREVINDEXTABLE1024_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048 = { + 2048, twiddleCoef_2048, armBitRevIndexTable2048, ARMBITREVINDEXTABLE2048_TABLE_LENGTH + }; + + const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096 = { + 4096, twiddleCoef_4096, armBitRevIndexTable4096, ARMBITREVINDEXTABLE4096_TABLE_LENGTH + }; + +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_math.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_math.h new file mode 100644 index 0000000000..65304c127d --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/arm_math.h @@ -0,0 +1,7306 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.1 +* +* Project: CMSIS DSP Library +* Title: arm_math.h +* +* Description: Public header file for CMSIS DSP Library +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + \mainpage CMSIS DSP Software Library + * + * Introduction + * + * This user manual describes the CMSIS DSP software library, + * a suite of common signal processing functions for use on Cortex-M processor based devices. + * + * The library is divided into a number of functions each covering a specific category: + * - Basic math functions + * - Fast math functions + * - Complex math functions + * - Filters + * - Matrix functions + * - Transforms + * - Motor control functions + * - Statistical functions + * - Support functions + * - Interpolation functions + * + * The library has separate functions for operating on 8-bit integers, 16-bit integers, + * 32-bit integer and 32-bit floating-point values. + * + * Using the Library + * + * The library installer contains prebuilt versions of the libraries in the Lib folder. + * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4l_math.lib (Little endian on Cortex-M4) + * - arm_cortexM4b_math.lib (Big endian on Cortex-M4) + * - arm_cortexM3l_math.lib (Little endian on Cortex-M3) + * - arm_cortexM3b_math.lib (Big endian on Cortex-M3) + * - arm_cortexM0l_math.lib (Little endian on Cortex-M0) + * - arm_cortexM0b_math.lib (Big endian on Cortex-M3) + * + * The library functions are declared in the public file arm_math.h which is placed in the Include folder. + * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single + * public header file arm_math.h for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. + * Define the appropriate pre processor MACRO ARM_MATH_CM4 or ARM_MATH_CM3 or + * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application. + * + * Examples + * + * The library ships with a number of examples which demonstrate how to use the library functions. + * + * Toolchain Support + * + * The library has been developed and tested with MDK-ARM version 4.60. + * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. + * + * Building the Library + * + * The library installer contains project files to re build libraries on MDK Tool chain in the CMSIS\\DSP_Lib\\Source\\ARM folder. + * - arm_cortexM0b_math.uvproj + * - arm_cortexM0l_math.uvproj + * - arm_cortexM3b_math.uvproj + * - arm_cortexM3l_math.uvproj + * - arm_cortexM4b_math.uvproj + * - arm_cortexM4l_math.uvproj + * - arm_cortexM4bf_math.uvproj + * - arm_cortexM4lf_math.uvproj + * + * + * The project can be built by opening the appropriate project in MDK-ARM 4.60 chain and defining the optional pre processor MACROs detailed above. + * + * Pre-processor Macros + * + * Each library project have differant pre-processor macros. + * + * - UNALIGNED_SUPPORT_DISABLE: + * + * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access + * + * - ARM_MATH_BIG_ENDIAN: + * + * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. + * + * - ARM_MATH_MATRIX_CHECK: + * + * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices + * + * - ARM_MATH_ROUNDING: + * + * Define macro ARM_MATH_ROUNDING for rounding on support functions + * + * - ARM_MATH_CMx: + * + * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target + * and ARM_MATH_CM0 for building library on cortex-M0 target, ARM_MATH_CM0PLUS for building library on cortex-M0+ target. + * + * - __FPU_PRESENT: + * + * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries + * + * Copyright Notice + * + * Copyright (C) 2010-2013 ARM Limited. All rights reserved. + */ + + +/** + * @defgroup groupMath Basic Math Functions + */ + +/** + * @defgroup groupFastMath Fast Math Functions + * This set of functions provides a fast approximation to sine, cosine, and square root. + * As compared to most of the other functions in the CMSIS math library, the fast math functions + * operate on individual values and not arrays. + * There are separate functions for Q15, Q31, and floating-point data. + * + */ + +/** + * @defgroup groupCmplxMath Complex Math Functions + * This set of functions operates on complex data vectors. + * The data in the complex arrays is stored in an interleaved fashion + * (real, imag, real, imag, ...). + * In the API functions, the number of samples in a complex array refers + * to the number of complex values; the array contains twice this number of + * real values. + */ + +/** + * @defgroup groupFilters Filtering Functions + */ + +/** + * @defgroup groupMatrix Matrix Functions + * + * This set of functions provides basic matrix math operations. + * The functions operate on matrix data structures. For example, + * the type + * definition for the floating-point matrix structure is shown + * below: + *
+ *     typedef struct
+ *     {
+ *       uint16_t numRows;     // number of rows of the matrix.
+ *       uint16_t numCols;     // number of columns of the matrix.
+ *       float32_t *pData;     // points to the data of the matrix.
+ *     } arm_matrix_instance_f32;
+ * 
+ * There are similar definitions for Q15 and Q31 data types. + * + * The structure specifies the size of the matrix and then points to + * an array of data. The array is of size numRows X numCols + * and the values are arranged in row order. That is, the + * matrix element (i, j) is stored at: + *
+ *     pData[i*numCols + j]
+ * 
+ * + * \par Init Functions + * There is an associated initialization function for each type of matrix + * data structure. + * The initialization function sets the values of the internal structure fields. + * Refer to the function arm_mat_init_f32(), arm_mat_init_q31() + * and arm_mat_init_q15() for floating-point, Q31 and Q15 types, respectively. + * + * \par + * Use of the initialization function is optional. However, if initialization function is used + * then the instance structure cannot be placed into a const data section. + * To place the instance structure in a const data + * section, manually initialize the data structure. For example: + *
+ * arm_matrix_instance_f32 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q31 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q15 S = {nRows, nColumns, pData};
+ * 
+ * where nRows specifies the number of rows, nColumns + * specifies the number of columns, and pData points to the + * data array. + * + * \par Size Checking + * By default all of the matrix functions perform size checking on the input and + * output matrices. For example, the matrix addition function verifies that the + * two input matrices and the output matrix all have the same number of rows and + * columns. If the size check fails the functions return: + *
+ *     ARM_MATH_SIZE_MISMATCH
+ * 
+ * Otherwise the functions return + *
+ *     ARM_MATH_SUCCESS
+ * 
+ * There is some overhead associated with this matrix size checking. + * The matrix size checking is enabled via the \#define + *
+ *     ARM_MATH_MATRIX_CHECK
+ * 
+ * within the library project settings. By default this macro is defined + * and size checking is enabled. By changing the project settings and + * undefining this macro size checking is eliminated and the functions + * run a bit faster. With size checking disabled the functions always + * return ARM_MATH_SUCCESS. + */ + +/** + * @defgroup groupTransforms Transform Functions + */ + +/** + * @defgroup groupController Controller Functions + */ + +/** + * @defgroup groupStats Statistics Functions + */ +/** + * @defgroup groupSupport Support Functions + */ + +/** + * @defgroup groupInterpolation Interpolation Functions + * These functions perform 1- and 2-dimensional interpolation of data. + * Linear interpolation is used for 1-dimensional data and + * bilinear interpolation is used for 2-dimensional data. + */ + +/** + * @defgroup groupExamples Examples + */ +#ifndef _ARM_MATH_H +#define _ARM_MATH_H + +#define __CMSIS_GENERIC /* disable NVIC and Systick functions */ + +#if defined (ARM_MATH_CM4) +#include "core_cm4.h" +#elif defined (ARM_MATH_CM3) +#include "core_cm3.h" +#elif defined (ARM_MATH_CM0) +#include "core_cm0.h" +#define ARM_MATH_CM0_FAMILY +#elif defined (ARM_MATH_CM0PLUS) +#include "core_cm0plus.h" +#define ARM_MATH_CM0_FAMILY +#else +#include "ARMCM4.h" +#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....." +#endif + +#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ +#include "string.h" +#include "math.h" +#ifdef __cplusplus +extern "C" +{ +#endif + + + /** + * @brief Macros required for reciprocal calculation in Normalized LMS + */ + +#define DELTA_Q31 (0x100) +#define DELTA_Q15 0x5 +#define INDEX_MASK 0x0000003F +#ifndef PI +#define PI 3.14159265358979f +#endif + + /** + * @brief Macros required for SINE and COSINE Fast math approximations + */ + +#define TABLE_SIZE 256 +#define TABLE_SPACING_Q31 0x800000 +#define TABLE_SPACING_Q15 0x80 + + /** + * @brief Macros required for SINE and COSINE Controller functions + */ + /* 1.31(q31) Fixed value of 2/360 */ + /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ +#define INPUT_SPACING 0xB60B61 + + /** + * @brief Macro for Unaligned Support + */ +#ifndef UNALIGNED_SUPPORT_DISABLE + #define ALIGN4 +#else + #if defined (__GNUC__) + #define ALIGN4 __attribute__((aligned(4))) + #else + #define ALIGN4 __align(4) + #endif +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /** + * @brief Error status returned by some functions in the library. + */ + + typedef enum + { + ARM_MATH_SUCCESS = 0, /**< No error */ + ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ + ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ + ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ + ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ + ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ + ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ + } arm_status; + + /** + * @brief 8-bit fractional data type in 1.7 format. + */ + typedef int8_t q7_t; + + /** + * @brief 16-bit fractional data type in 1.15 format. + */ + typedef int16_t q15_t; + + /** + * @brief 32-bit fractional data type in 1.31 format. + */ + typedef int32_t q31_t; + + /** + * @brief 64-bit fractional data type in 1.63 format. + */ + typedef int64_t q63_t; + + /** + * @brief 32-bit floating-point type definition. + */ + typedef float float32_t; + + /** + * @brief 64-bit floating-point type definition. + */ + typedef double float64_t; + + /** + * @brief definition to read/write two 16 bit values. + */ +#if defined __CC_ARM +#define __SIMD32_TYPE int32_t __packed +#define CMSIS_UNUSED __attribute__((unused)) +#elif defined __ICCARM__ +#define CMSIS_UNUSED +#define __SIMD32_TYPE int32_t __packed +#elif defined __GNUC__ +#define __SIMD32_TYPE int32_t +#define CMSIS_UNUSED __attribute__((unused)) +#else +#error Unknown compiler +#endif + +#define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) +#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) + +#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *) (addr)) + +#define __SIMD64(addr) (*(int64_t **) & (addr)) + +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + /** + * @brief definition to pack two 16 bit values. + */ +#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ + (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) +#define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ + (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) + +#endif + + + /** + * @brief definition to pack four 8 bit values. + */ +#ifndef ARM_MATH_BIG_ENDIAN + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) +#else + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) + +#endif + + + /** + * @brief Clips Q63 to Q31 values. + */ + static __INLINE q31_t clip_q63_to_q31( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; + } + + /** + * @brief Clips Q63 to Q15 values. + */ + static __INLINE q15_t clip_q63_to_q15( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); + } + + /** + * @brief Clips Q31 to Q7 values. + */ + static __INLINE q7_t clip_q31_to_q7( + q31_t x) + { + return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? + ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; + } + + /** + * @brief Clips Q31 to Q15 values. + */ + static __INLINE q15_t clip_q31_to_q15( + q31_t x) + { + return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? + ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; + } + + /** + * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. + */ + + static __INLINE q63_t mult32x64( + q63_t x, + q31_t y) + { + return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + + (((q63_t) (x >> 32) * y))); + } + + +#if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM ) +#define __CLZ __clz +#endif + +#if defined (ARM_MATH_CM0_FAMILY) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) ) + + static __INLINE uint32_t __CLZ( + q31_t data); + + + static __INLINE uint32_t __CLZ( + q31_t data) + { + uint32_t count = 0; + uint32_t mask = 0x80000000; + + while((data & mask) == 0) + { + count += 1u; + mask = mask >> 1u; + } + + return (count); + + } + +#endif + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. + */ + + static __INLINE uint32_t arm_recip_q31( + q31_t in, + q31_t * dst, + q31_t * pRecipTable) + { + + uint32_t out, tempVal; + uint32_t index, i; + uint32_t signBits; + + if(in > 0) + { + signBits = __CLZ(in) - 1; + } + else + { + signBits = __CLZ(-in) - 1; + } + + /* Convert input sample to 1.31 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = (uint32_t) (in >> 24u); + index = (index & INDEX_MASK); + + /* 1.31 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0u; i < 2u; i++) + { + tempVal = (q31_t) (((q63_t) in * out) >> 31u); + tempVal = 0x7FFFFFFF - tempVal; + /* 1.31 with exp 1 */ + //out = (q31_t) (((q63_t) out * tempVal) >> 30u); + out = (q31_t) clip_q63_to_q31(((q63_t) out * tempVal) >> 30u); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1u); + + } + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. + */ + static __INLINE uint32_t arm_recip_q15( + q15_t in, + q15_t * dst, + q15_t * pRecipTable) + { + + uint32_t out = 0, tempVal = 0; + uint32_t index = 0, i = 0; + uint32_t signBits = 0; + + if(in > 0) + { + signBits = __CLZ(in) - 17; + } + else + { + signBits = __CLZ(-in) - 17; + } + + /* Convert input sample to 1.15 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = in >> 8; + index = (index & INDEX_MASK); + + /* 1.15 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0; i < 2; i++) + { + tempVal = (q15_t) (((q31_t) in * out) >> 15); + tempVal = 0x7FFF - tempVal; + /* 1.15 with exp 1 */ + out = (q15_t) (((q31_t) out * tempVal) >> 14); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1); + + } + + + /* + * @brief C custom defined intrinisic function for only M0 processors + */ +#if defined(ARM_MATH_CM0_FAMILY) + + static __INLINE q31_t __SSAT( + q31_t x, + uint32_t y) + { + int32_t posMax, negMin; + uint32_t i; + + posMax = 1; + for (i = 0; i < (y - 1); i++) + { + posMax = posMax * 2; + } + + if(x > 0) + { + posMax = (posMax - 1); + + if(x > posMax) + { + x = posMax; + } + } + else + { + negMin = -posMax; + + if(x < negMin) + { + x = negMin; + } + } + return (x); + + + } + +#endif /* end of ARM_MATH_CM0_FAMILY */ + + + + /* + * @brief C custom defined intrinsic function for M3 and M0 processors + */ +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + + /* + * @brief C custom defined QADD8 for M3 and M0 processors + */ + static __INLINE q31_t __QADD8( + q31_t x, + q31_t y) + { + + q31_t sum; + q7_t r, s, t, u; + + r = (q7_t) x; + s = (q7_t) y; + + r = __SSAT((q31_t) (r + s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8); + t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8); + u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8); + + sum = + (((q31_t) u << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) | + (((q31_t) s << 8) & 0x0000FF00) | (r & 0x000000FF); + + return sum; + + } + + /* + * @brief C custom defined QSUB8 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB8( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s, t, u; + + r = (q7_t) x; + s = (q7_t) y; + + r = __SSAT((r - s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8; + t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16; + u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24; + + sum = + (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & + 0x000000FF); + + return sum; + } + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + static __INLINE q31_t __QADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = __SSAT(r + s, 16); + s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined SHADD16 for M3 and M0 processors + */ + static __INLINE q31_t __SHADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) + (s >> 1)); + s = ((q31_t) ((x >> 17) + (y >> 17))) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined QSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = __SSAT(r - s, 16); + s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SHSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __SHSUB16( + q31_t x, + q31_t y) + { + + q31_t diff; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) - (s >> 1)); + s = (((x >> 17) - (y >> 17)) << 16); + + diff = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return diff; + } + + /* + * @brief C custom defined QASX for M3 and M0 processors + */ + static __INLINE q31_t __QASX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = + ((sum + + clip_q31_to_q15((q31_t) ((short) (x >> 16) + (short) y))) << 16) + + clip_q31_to_q15((q31_t) ((short) x - (short) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHASX for M3 and M0 processors + */ + static __INLINE q31_t __SHASX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) - (y >> 17)); + s = (((x >> 17) + (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + + /* + * @brief C custom defined QSAX for M3 and M0 processors + */ + static __INLINE q31_t __QSAX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = + ((sum + + clip_q31_to_q15((q31_t) ((short) (x >> 16) - (short) y))) << 16) + + clip_q31_to_q15((q31_t) ((short) x + (short) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHSAX for M3 and M0 processors + */ + static __INLINE q31_t __SHSAX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (short) x; + s = (short) y; + + r = ((r >> 1) + (y >> 17)); + s = (((x >> 17) - (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SMUSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMUSDX( + q31_t x, + q31_t y) + { + + return ((q31_t) (((short) x * (short) (y >> 16)) - + ((short) (x >> 16) * (short) y))); + } + + /* + * @brief C custom defined SMUADX for M3 and M0 processors + */ + static __INLINE q31_t __SMUADX( + q31_t x, + q31_t y) + { + + return ((q31_t) (((short) x * (short) (y >> 16)) + + ((short) (x >> 16) * (short) y))); + } + + /* + * @brief C custom defined QADD for M3 and M0 processors + */ + static __INLINE q31_t __QADD( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x + y); + } + + /* + * @brief C custom defined QSUB for M3 and M0 processors + */ + static __INLINE q31_t __QSUB( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x - y); + } + + /* + * @brief C custom defined SMLAD for M3 and M0 processors + */ + static __INLINE q31_t __SMLAD( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y >> 16)) + + ((short) x * (short) y)); + } + + /* + * @brief C custom defined SMLADX for M3 and M0 processors + */ + static __INLINE q31_t __SMLADX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y)) + + ((short) x * (short) (y >> 16))); + } + + /* + * @brief C custom defined SMLSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMLSDX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum - ((short) (x >> 16) * (short) (y)) + + ((short) x * (short) (y >> 16))); + } + + /* + * @brief C custom defined SMLALD for M3 and M0 processors + */ + static __INLINE q63_t __SMLALD( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((short) (x >> 16) * (short) (y >> 16)) + + ((short) x * (short) y)); + } + + /* + * @brief C custom defined SMLALDX for M3 and M0 processors + */ + static __INLINE q63_t __SMLALDX( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((short) (x >> 16) * (short) y)) + + ((short) x * (short) (y >> 16)); + } + + /* + * @brief C custom defined SMUAD for M3 and M0 processors + */ + static __INLINE q31_t __SMUAD( + q31_t x, + q31_t y) + { + + return (((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + /* + * @brief C custom defined SMUSD for M3 and M0 processors + */ + static __INLINE q31_t __SMUSD( + q31_t x, + q31_t y) + { + + return (-((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + + /* + * @brief C custom defined SXTB16 for M3 and M0 processors + */ + static __INLINE q31_t __SXTB16( + q31_t x) + { + + return ((((x << 24) >> 24) & 0x0000FFFF) | + (((x << 8) >> 8) & 0xFFFF0000)); + } + + +#endif /* defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ + + + /** + * @brief Instance structure for the Q7 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q7; + + /** + * @brief Instance structure for the Q15 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f32; + + + /** + * @brief Processing function for the Q7 FIR filter. + * @param[in] *S points to an instance of the Q7 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q7( + const arm_fir_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q7 FIR filter. + * @param[in,out] *S points to an instance of the Q7 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed. + * @return none + */ + void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR filter. + * @param[in] *S points to an instance of the Q15 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 FIR filter. + * @param[in,out] *S points to an instance of the Q15 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if + * numTaps is not a supported value. + */ + + arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR filter. + * @param[in] *S points to an instance of the Q31 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR filter. + * @param[in,out] *S points to an instance of the Q31 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the floating-point FIR filter. + * @param[in] *S points to an instance of the floating-point FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_f32( + const arm_fir_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR filter. + * @param[in,out] *S points to an instance of the floating-point FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 Biquad cascade filter. + */ + typedef struct + { + int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q15; + + + /** + * @brief Instance structure for the Q31 Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q31; + + /** + * @brief Instance structure for the floating-point Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + + + } arm_biquad_casd_df1_inst_f32; + + + + /** + * @brief Processing function for the Q15 Biquad cascade filter. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + q15_t * pCoeffs, + q15_t * pState, + int8_t postShift); + + + /** + * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 Biquad cascade filter + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q31_t * pState, + int8_t postShift); + + /** + * @brief Processing function for the floating-point Biquad cascade filter. + * @param[in] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point Biquad cascade filter. + * @param[in,out] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float32_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f32; + + /** + * @brief Instance structure for the Q15 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q15_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q15; + + /** + * @brief Instance structure for the Q31 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q31_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q31; + + + + /** + * @brief Floating-point matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q31 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Floating-point matrix scaling. + * @param[in] *pSrc points to the input matrix + * @param[in] scale scale factor + * @param[out] *pDst points to the output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Q31 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t * pData); + + /** + * @brief Q15 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t * pData); + + /** + * @brief Floating-point matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t * pData); + + + + /** + * @brief Instance structure for the Q15 PID Control. + */ + typedef struct + { + q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ +#ifdef ARM_MATH_CM0_FAMILY + q15_t A1; + q15_t A2; +#else + q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ +#endif + q15_t state[3]; /**< The state array of length 3. */ + q15_t Kp; /**< The proportional gain. */ + q15_t Ki; /**< The integral gain. */ + q15_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q15; + + /** + * @brief Instance structure for the Q31 PID Control. + */ + typedef struct + { + q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + q31_t A2; /**< The derived gain, A2 = Kd . */ + q31_t state[3]; /**< The state array of length 3. */ + q31_t Kp; /**< The proportional gain. */ + q31_t Ki; /**< The integral gain. */ + q31_t Kd; /**< The derivative gain. */ + + } arm_pid_instance_q31; + + /** + * @brief Instance structure for the floating-point PID Control. + */ + typedef struct + { + float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + float32_t A2; /**< The derived gain, A2 = Kd . */ + float32_t state[3]; /**< The state array of length 3. */ + float32_t Kp; /**< The proportional gain. */ + float32_t Ki; /**< The integral gain. */ + float32_t Kd; /**< The derivative gain. */ + } arm_pid_instance_f32; + + + + /** + * @brief Initialization function for the floating-point PID Control. + * @param[in,out] *S points to an instance of the PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @return none + */ + void arm_pid_reset_f32( + arm_pid_instance_f32 * S); + + + /** + * @brief Initialization function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @return none + */ + + void arm_pid_reset_q31( + arm_pid_instance_q31 * S); + + /** + * @brief Initialization function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the q15 PID Control structure + * @return none + */ + void arm_pid_reset_q15( + arm_pid_instance_q15 * S); + + + /** + * @brief Instance structure for the floating-point Linear Interpolate function. + */ + typedef struct + { + uint32_t nValues; /**< nValues */ + float32_t x1; /**< x1 */ + float32_t xSpacing; /**< xSpacing */ + float32_t *pYData; /**< pointer to the table of Y values */ + } arm_linear_interp_instance_f32; + + /** + * @brief Instance structure for the floating-point bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + float32_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_f32; + + /** + * @brief Instance structure for the Q31 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q31_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q31; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q15_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q15; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q7_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q7; + + + /** + * @brief Q7 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + + + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q15; + + arm_status arm_cfft_radix2_init_q15( + arm_cfft_radix2_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + void arm_cfft_radix2_q15( + const arm_cfft_radix2_instance_q15 * S, + q15_t * pSrc); + + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q15; + + arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc); + + /** + * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q31; + + arm_status arm_cfft_radix2_init_q31( + arm_cfft_radix2_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + void arm_cfft_radix2_q31( + const arm_cfft_radix2_instance_q31 * S, + q31_t * pSrc); + + /** + * @brief Instance structure for the Q31 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q31; + + + void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc); + + arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix2_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_f32( + const arm_cfft_radix2_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_f32; + + void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the Q15 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint32_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q15; + + arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst); + + /** + * @brief Instance structure for the Q31 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint32_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q31; + + arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint16_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_f32; + + arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + +typedef struct + { + arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f32 ; + +arm_status arm_rfft_fast_init_f32 ( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen); + +void arm_rfft_fast_f32( + arm_rfft_fast_instance_f32 * S, + float32_t * p, float32_t * pOut, + uint8_t ifftFlag); + + /** + * @brief Instance structure for the floating-point DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + float32_t normalize; /**< normalizing factor. */ + float32_t *pTwiddle; /**< points to the twiddle factor table. */ + float32_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_f32; + + /** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] *S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + */ + + arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize); + + /** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] *S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q31 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q31_t normalize; /**< normalizing factor. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + q31_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q31; + + /** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] *S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize); + + /** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q31 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q15 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q15_t normalize; /**< normalizing factor. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + q15_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q15; + + /** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize); + + /** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q15 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer); + + /** + * @brief Floating-point vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a floating-point vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scale scale factor to be applied + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_f32( + float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q7 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q7( + q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q15 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q15( + q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q31 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q31( + q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Dot product of floating-point vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t blockSize, + float32_t * result); + + /** + * @brief Dot product of Q7 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q7( + q7_t * pSrcA, + q7_t * pSrcB, + uint32_t blockSize, + q31_t * result); + + /** + * @brief Dot product of Q15 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Dot product of Q31 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Shifts the elements of a Q7 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q7( + q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q15 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q15( + q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q31 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q31( + q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_f32( + float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q7( + q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q15( + q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q31( + q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Copies the elements of a floating-point vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q7 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Fills a constant value into a floating-point vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q7 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q15 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q31 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + */ + + + void arm_conv_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_conv_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + + /** + * @brief Convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_conv_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Partial convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] * pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] * pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] * pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] * pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Partial convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q7 sequences + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Partial convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + + /** + * @brief Instance structure for the Q15 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_f32; + + + + /** + * @brief Processing function for the floating-point FIR decimator. + * @param[in] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR decimator. + * @param[in,out] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @brief Initialization function for the Q15 FIR decimator. + * @param[in,out] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q31( + arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR decimator. + * @param[in,out] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + + /** + * @brief Instance structure for the Q15 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ + } arm_fir_interpolate_instance_f32; + + + /** + * @brief Processing function for the Q15 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR interpolator. + * @param[in,out] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR interpolator. + * @param[in,out] *S points to an instance of the Q31 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point FIR interpolator. + * @param[in] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR interpolator. + * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the high precision Q31 Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ + + } arm_biquad_cas_df1_32x64_ins_q31; + + + /** + * @param[in] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @param[in,out] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift); + + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f32; + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] *S points to an instance of the filter data structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df2T_f32( + const arm_biquad_cascade_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + + /** + * @brief Instance structure for the Q15 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_f32; + + /** + * @brief Initialization function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pCoeffs, + q15_t * pState); + + + /** + * @brief Processing function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pCoeffs, + q31_t * pState); + + + /** + * @brief Processing function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Initialization function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + /** + * @brief Processing function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_f32; + + /** + * @brief Processing function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize-1. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the Q15 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + +/** + * @brief Initialization function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the fixed-point Q15 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process per call. + * @return none. + */ + + void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the floating-point LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that controls filter coefficient updates. */ + } arm_lms_instance_f32; + + /** + * @brief Processing function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_f32( + const arm_lms_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q15; + + + /** + * @brief Initialization function for the Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Processing function for Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q15( + const arm_lms_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + + } arm_lms_instance_q31; + + /** + * @brief Processing function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q31( + const arm_lms_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q31 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Instance structure for the floating-point normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that control filter coefficient updates. */ + float32_t energy; /**< saves previous frame energy. */ + float32_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_f32; + + /** + * @brief Processing function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q31_t *recipTable; /**< points to the reciprocal initial value table. */ + q31_t energy; /**< saves previous frame energy. */ + q31_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q31; + + /** + * @brief Processing function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Instance structure for the Q15 normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< Number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q15_t *recipTable; /**< Points to the reciprocal initial value table. */ + q15_t energy; /**< saves previous frame energy. */ + q15_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q15; + + /** + * @brief Processing function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Correlation of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Correlation of Q15 sequences + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + */ + void arm_correlate_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + + /** + * @brief Correlation of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + */ + + void arm_correlate_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + /** + * @brief Correlation of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_correlate_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Instance structure for the floating-point sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_f32; + + /** + * @brief Instance structure for the Q31 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q31; + + /** + * @brief Instance structure for the Q15 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q15; + + /** + * @brief Instance structure for the Q7 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q7; + + /** + * @brief Processing function for the floating-point sparse FIR filter. + * @param[in] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point sparse FIR filter. + * @param[in,out] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 sparse FIR filter. + * @param[in] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 sparse FIR filter. + * @param[in] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q7 sparse FIR filter. + * @param[in] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q7 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /* + * @brief Floating-point sin_cos function. + * @param[in] theta input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cos output. + * @return none. + */ + + void arm_sin_cos_f32( + float32_t theta, + float32_t * pSinVal, + float32_t * pCcosVal); + + /* + * @brief Q31 sin_cos function. + * @param[in] theta scaled input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cosine output. + * @return none. + */ + + void arm_sin_cos_q31( + q31_t theta, + q31_t * pSinVal, + q31_t * pCosVal); + + + /** + * @brief Floating-point complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + + /** + * @brief Floating-point complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup PID PID Motor Control + * + * A Proportional Integral Derivative (PID) controller is a generic feedback control + * loop mechanism widely used in industrial control systems. + * A PID controller is the most commonly used type of feedback controller. + * + * This set of functions implements (PID) controllers + * for Q15, Q31, and floating-point data types. The functions operate on a single sample + * of data and each call to the function returns a single processed value. + * S points to an instance of the PID control data structure. in + * is the input sample value. The functions return the output value. + * + * \par Algorithm: + *
+   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
+   *    A0 = Kp + Ki + Kd
+   *    A1 = (-Kp ) - (2 * Kd )
+   *    A2 = Kd  
+ * + * \par + * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant + * + * \par + * \image html PID.gif "Proportional Integral Derivative Controller" + * + * \par + * The PID controller calculates an "error" value as the difference between + * the measured output and the reference input. + * The controller attempts to minimize the error by adjusting the process control inputs. + * The proportional value determines the reaction to the current error, + * the integral value determines the reaction based on the sum of recent errors, + * and the derivative value determines the reaction based on the rate at which the error has been changing. + * + * \par Instance Structure + * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. + * A separate instance structure must be defined for each PID Controller. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Reset Functions + * There is also an associated reset function for each data type which clears the state array. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. + * - Zeros out the values in the state buffer. + * + * \par + * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the PID Controller functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup PID + * @{ + */ + + /** + * @brief Process function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + */ + + + static __INLINE float32_t arm_pid_f32( + arm_pid_instance_f32 * S, + float32_t in) + { + float32_t out; + + /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ + out = (S->A0 * in) + + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + + static __INLINE q31_t arm_pid_q31( + arm_pid_instance_q31 * S, + q31_t in) + { + q63_t acc; + q31_t out; + + /* acc = A0 * x[n] */ + acc = (q63_t) S->A0 * in; + + /* acc += A1 * x[n-1] */ + acc += (q63_t) S->A1 * S->state[0]; + + /* acc += A2 * x[n-2] */ + acc += (q63_t) S->A2 * S->state[1]; + + /* convert output to 1.31 format to add y[n-1] */ + out = (q31_t) (acc >> 31u); + + /* out += y[n-1] */ + out += S->state[2]; + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + + static __INLINE q15_t arm_pid_q15( + arm_pid_instance_q15 * S, + q15_t in) + { + q63_t acc; + q15_t out; + +#ifndef ARM_MATH_CM0_FAMILY + __SIMD32_TYPE *vstate; + + /* Implementation of PID controller */ + + /* acc = A0 * x[n] */ + acc = (q31_t) __SMUAD(S->A0, in); + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + vstate = __SIMD32_CONST(S->state); + acc = __SMLALD(S->A1, (q31_t) *vstate, acc); + +#else + /* acc = A0 * x[n] */ + acc = ((q31_t) S->A0) * in; + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + acc += (q31_t) S->A1 * S->state[0]; + acc += (q31_t) S->A2 * S->state[1]; + +#endif + + /* acc += y[n-1] */ + acc += (q31_t) S->state[2] << 15; + + /* saturate the output */ + out = (q15_t) (__SSAT((acc >> 15), 16)); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @} end of PID group + */ + + + /** + * @brief Floating-point matrix inverse. + * @param[in] *src points to the instance of the input floating-point matrix structure. + * @param[out] *dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + + arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); + + + + /** + * @ingroup groupController + */ + + + /** + * @defgroup clarke Vector Clarke Transform + * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. + * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents + * in the two-phase orthogonal stator axis Ialpha and Ibeta. + * When Ialpha is superposed with Ia as shown in the figure below + * \image html clarke.gif Stator current space vector and its components in (a,b). + * and Ia + Ib + Ic = 0, in this condition Ialpha and Ibeta + * can be calculated using only Ia and Ib. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeFormula.gif + * where Ia and Ib are the instantaneous stator phases and + * pIalpha and pIbeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup clarke + * @{ + */ + + /** + * + * @brief Floating-point Clarke transform + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + */ + + static __INLINE void arm_clarke_f32( + float32_t Ia, + float32_t Ib, + float32_t * pIalpha, + float32_t * pIbeta) + { + /* Calculate pIalpha using the equation, pIalpha = Ia */ + *pIalpha = Ia; + + /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ + *pIbeta = + ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); + + } + + /** + * @brief Clarke transform for Q31 version + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + static __INLINE void arm_clarke_q31( + q31_t Ia, + q31_t Ib, + q31_t * pIalpha, + q31_t * pIbeta) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIalpha from Ia by equation pIalpha = Ia */ + *pIalpha = Ia; + + /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); + + /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ + product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); + + /* pIbeta is calculated by adding the intermediate products */ + *pIbeta = __QADD(product1, product2); + } + + /** + * @} end of clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q31( + q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_clarke Vector Inverse Clarke Transform + * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeInvFormula.gif + * where pIa and pIb are the instantaneous stator phases and + * Ialpha and Ibeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_clarke + * @{ + */ + + /** + * @brief Floating-point Inverse Clarke transform + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + */ + + + static __INLINE void arm_inv_clarke_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pIa, + float32_t * pIb) + { + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ + *pIb = -0.5 * Ialpha + (float32_t) 0.8660254039 *Ibeta; + + } + + /** + * @brief Inverse Clarke transform for Q31 version + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the subtraction, hence there is no risk of overflow. + */ + + static __INLINE void arm_inv_clarke_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pIa, + q31_t * pIb) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); + + /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); + + /* pIb is calculated by subtracting the products */ + *pIb = __QSUB(product2, product1); + + } + + /** + * @} end of inv_clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q15( + q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup park Vector Park Transform + * + * Forward Park transform converts the input two-coordinate vector to flux and torque components. + * The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents + * from the stationary to the moving reference frame and control the spatial relationship between + * the stator vector current and rotor flux vector. + * If we consider the d axis aligned with the rotor flux, the diagram below shows the + * current vector and the relationship from the two reference frames: + * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkFormula.gif + * where Ialpha and Ibeta are the stator vector components, + * pId and pIq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup park + * @{ + */ + + /** + * @brief Floating-point Park transform + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * The function implements the forward Park transform. + * + */ + + static __INLINE void arm_park_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pId, + float32_t * pIq, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ + *pId = Ialpha * cosVal + Ibeta * sinVal; + + /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ + *pIq = -Ialpha * sinVal + Ibeta * cosVal; + + } + + /** + * @brief Park transform for Q31 version + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition and subtraction, hence there is no risk of overflow. + */ + + + static __INLINE void arm_park_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pId, + q31_t * pIq, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Ialpha * cosVal) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * sinVal) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Ialpha * sinVal) */ + product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * cosVal) */ + product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); + + /* Calculate pId by adding the two intermediate products 1 and 2 */ + *pId = __QADD(product1, product2); + + /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ + *pIq = __QSUB(product4, product3); + } + + /** + * @} end of park group + */ + + /** + * @brief Converts the elements of the Q7 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q7_to_float( + q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_park Vector Inverse Park transform + * Inverse Park transform converts the input flux and torque components to two-coordinate vector. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkInvFormula.gif + * where pIalpha and pIbeta are the stator vector components, + * Id and Iq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_park + * @{ + */ + + /** + * @brief Floating-point Inverse Park transform + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + */ + + static __INLINE void arm_inv_park_f32( + float32_t Id, + float32_t Iq, + float32_t * pIalpha, + float32_t * pIbeta, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ + *pIalpha = Id * cosVal - Iq * sinVal; + + /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ + *pIbeta = Id * sinVal + Iq * cosVal; + + } + + + /** + * @brief Inverse Park transform for Q31 version + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + + static __INLINE void arm_inv_park_q31( + q31_t Id, + q31_t Iq, + q31_t * pIalpha, + q31_t * pIbeta, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Id * cosVal) */ + product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Iq * sinVal) */ + product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Id * sinVal) */ + product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Iq * cosVal) */ + product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); + + /* Calculate pIalpha by using the two intermediate products 1 and 2 */ + *pIalpha = __QSUB(product1, product2); + + /* Calculate pIbeta by using the two intermediate products 3 and 4 */ + *pIbeta = __QADD(product4, product3); + + } + + /** + * @} end of Inverse park group + */ + + + /** + * @brief Converts the elements of the Q31 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_float( + q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup LinearInterpolate Linear Interpolation + * + * Linear interpolation is a method of curve fitting using linear polynomials. + * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line + * + * \par + * \image html LinearInterp.gif "Linear interpolation" + * + * \par + * A Linear Interpolate function calculates an output value(y), for the input(x) + * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) + * + * \par Algorithm: + *
+   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
+   *       where x0, x1 are nearest values of input x
+   *             y0, y1 are nearest values to output y
+   * 
+ * + * \par + * This set of functions implements Linear interpolation process + * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single + * sample of data and each call to the function returns a single processed value. + * S points to an instance of the Linear Interpolate function data structure. + * x is the input sample value. The functions returns the output value. + * + * \par + * if x is outside of the table boundary, Linear interpolation returns first value of the table + * if x is below input range and returns last value of table if x is above range. + */ + + /** + * @addtogroup LinearInterpolate + * @{ + */ + + /** + * @brief Process function for the floating-point Linear Interpolation Function. + * @param[in,out] *S is an instance of the floating-point Linear Interpolation structure + * @param[in] x input sample to process + * @return y processed output sample. + * + */ + + static __INLINE float32_t arm_linear_interp_f32( + arm_linear_interp_instance_f32 * S, + float32_t x) + { + + float32_t y; + float32_t x0, x1; /* Nearest input values */ + float32_t y0, y1; /* Nearest output values */ + float32_t xSpacing = S->xSpacing; /* spacing between input values */ + int32_t i; /* Index variable */ + float32_t *pYData = S->pYData; /* pointer to output table */ + + /* Calculation of index */ + i = (int32_t) ((x - S->x1) / xSpacing); + + if(i < 0) + { + /* Iniatilize output for below specified range as least output value of table */ + y = pYData[0]; + } + else if((uint32_t)i >= S->nValues) + { + /* Iniatilize output for above specified range as last output value of table */ + y = pYData[S->nValues - 1]; + } + else + { + /* Calculation of nearest input values */ + x0 = S->x1 + i * xSpacing; + x1 = S->x1 + (i + 1) * xSpacing; + + /* Read of nearest output values */ + y0 = pYData[i]; + y1 = pYData[i + 1]; + + /* Calculation of output */ + y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)); + + } + + /* returns output value */ + return (y); + } + + /** + * + * @brief Process function for the Q31 Linear Interpolation Function. + * @param[in] *pYData pointer to Q31 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q31_t arm_linear_interp_q31( + q31_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q31_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + + /* 20 bits for the fractional part */ + /* shift left by 11 to keep fract in 1.31 format */ + fract = (x & 0x000FFFFF) << 11; + + /* Read two nearest output values from the index in 1.31(q31) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 2.30 format */ + y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); + + /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ + y += ((q31_t) (((q63_t) y1 * fract) >> 32)); + + /* Convert y to 1.31 format */ + return (y << 1u); + + } + + } + + /** + * + * @brief Process function for the Q15 Linear Interpolation Function. + * @param[in] *pYData pointer to Q15 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q15_t arm_linear_interp_q15( + q15_t * pYData, + q31_t x, + uint32_t nValues) + { + q63_t y; /* output */ + q15_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20u); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 13.35 format */ + y = ((q63_t) y0 * (0xFFFFF - fract)); + + /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ + y += ((q63_t) y1 * (fract)); + + /* convert y to 1.15 format */ + return (y >> 20); + } + + + } + + /** + * + * @brief Process function for the Q7 Linear Interpolation Function. + * @param[in] *pYData pointer to Q7 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + */ + + + static __INLINE q7_t arm_linear_interp_q7( + q7_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q7_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + uint32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + if (x < 0) + { + return (pYData[0]); + } + index = (x >> 20) & 0xfff; + + + if(index >= (nValues - 1)) + { + return (pYData[nValues - 1]); + } + else + { + + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index and are in 1.7(q7) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ + y = ((y0 * (0xFFFFF - fract))); + + /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ + y += (y1 * fract); + + /* convert y to 1.7(q7) format */ + return (y >> 20u); + + } + + } + /** + * @} end of LinearInterpolate group + */ + + /** + * @brief Fast approximation to the trigonometric sine function for floating-point data. + * @param[in] x input value in radians. + * @return sin(x). + */ + + float32_t arm_sin_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q31_t arm_sin_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q15_t arm_sin_q15( + q15_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for floating-point data. + * @param[in] x input value in radians. + * @return cos(x). + */ + + float32_t arm_cos_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q31_t arm_cos_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q15_t arm_cos_q15( + q15_t x); + + + /** + * @ingroup groupFastMath + */ + + + /** + * @defgroup SQRT Square Root + * + * Computes the square root of a number. + * There are separate functions for Q15, Q31, and floating-point data types. + * The square root function is computed using the Newton-Raphson algorithm. + * This is an iterative algorithm of the form: + *
+   *      x1 = x0 - f(x0)/f'(x0)
+   * 
+ * where x1 is the current estimate, + * x0 is the previous estimate, and + * f'(x0) is the derivative of f() evaluated at x0. + * For the square root function, the algorithm reduces to: + *
+   *     x0 = in/2                         [initial guess]
+   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]
+   * 
+ */ + + + /** + * @addtogroup SQRT + * @{ + */ + + /** + * @brief Floating-point square root function. + * @param[in] in input value. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + + static __INLINE arm_status arm_sqrt_f32( + float32_t in, + float32_t * pOut) + { + if(in > 0) + { + +// #if __FPU_USED +#if (__FPU_USED == 1) && defined ( __CC_ARM ) + *pOut = __sqrtf(in); +#else + *pOut = sqrtf(in); +#endif + + return (ARM_MATH_SUCCESS); + } + else + { + *pOut = 0.0f; + return (ARM_MATH_ARGUMENT_ERROR); + } + + } + + + /** + * @brief Q31 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q31( + q31_t in, + q31_t * pOut); + + /** + * @brief Q15 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q15( + q15_t in, + q15_t * pOut); + + /** + * @} end of SQRT group + */ + + + + + + + /** + * @brief floating-point Circular write function. + */ + + static __INLINE void arm_circularWrite_f32( + int32_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const int32_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief floating-point Circular Read function. + */ + static __INLINE void arm_circularRead_f32( + int32_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + int32_t * dst, + int32_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (int32_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + /** + * @brief Q15 Circular write function. + */ + + static __INLINE void arm_circularWrite_q15( + q15_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q15_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q15 Circular Read function. + */ + static __INLINE void arm_circularRead_q15( + q15_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q15_t * dst, + q15_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q15_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update wOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Q7 Circular write function. + */ + + static __INLINE void arm_circularWrite_q7( + q7_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q7_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q7 Circular Read function. + */ + static __INLINE void arm_circularRead_q7( + q7_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q7_t * dst, + q7_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q7_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Sum of the squares of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q15( + q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q7( + q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_mean_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); + + /** + * @brief Mean value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Mean value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Variance of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q15( + q15_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Root Mean Square of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Standard deviation of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Floating-point complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult); + + /** + * @brief Q31 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult); + + /** + * @brief Floating-point complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult); + + /** + * @brief Q15 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q15( + q15_t * pSrcCmplx, + q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q31( + q31_t * pSrcCmplx, + q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_f32( + float32_t * pSrcCmplx, + float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Minimum value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *result is output pointer + * @param[in] index is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * result, + uint32_t * index); + + /** + * @brief Minimum value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[in] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + void arm_min_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q7 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q15 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a floating-point vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + + /** + * @brief Q15 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Converts the elements of the floating-point vector to Q31 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + */ + void arm_float_to_q31( + float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q15 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q15( + float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q7( + float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q31 vector to Q15 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q15( + q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q31 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q7( + q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q15 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_float( + q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q31 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q31( + q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q7( + q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup BilinearInterpolate Bilinear Interpolation + * + * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. + * The underlying function f(x, y) is sampled on a regular grid and the interpolation process + * determines values between the grid points. + * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. + * Bilinear interpolation is often used in image processing to rescale images. + * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. + * + * Algorithm + * \par + * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. + * For floating-point, the instance structure is defined as: + *
+   *   typedef struct
+   *   {
+   *     uint16_t numRows;
+   *     uint16_t numCols;
+   *     float32_t *pData;
+   * } arm_bilinear_interp_instance_f32;
+   * 
+ * + * \par + * where numRows specifies the number of rows in the table; + * numCols specifies the number of columns in the table; + * and pData points to an array of size numRows*numCols values. + * The data table pTable is organized in row order and the supplied data values fall on integer indexes. + * That is, table element (x,y) is located at pTable[x + y*numCols] where x and y are integers. + * + * \par + * Let (x, y) specify the desired interpolation point. Then define: + *
+   *     XF = floor(x)
+   *     YF = floor(y)
+   * 
+ * \par + * The interpolated output point is computed as: + *
+   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
+   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))
+   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)
+   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)
+   * 
+ * Note that the coordinates (x, y) contain integer and fractional components. + * The integer components specify which portion of the table to use while the + * fractional components control the interpolation processor. + * + * \par + * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. + */ + + /** + * @addtogroup BilinearInterpolate + * @{ + */ + + /** + * + * @brief Floating-point bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate. + * @param[in] Y interpolation coordinate. + * @return out interpolated value. + */ + + + static __INLINE float32_t arm_bilinear_interp_f32( + const arm_bilinear_interp_instance_f32 * S, + float32_t X, + float32_t Y) + { + float32_t out; + float32_t f00, f01, f10, f11; + float32_t *pData = S->pData; + int32_t xIndex, yIndex, index; + float32_t xdiff, ydiff; + float32_t b1, b2, b3, b4; + + xIndex = (int32_t) X; + yIndex = (int32_t) Y; + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 + || yIndex > (S->numCols - 1)) + { + return (0); + } + + /* Calculation of index for two nearest points in X-direction */ + index = (xIndex - 1) + (yIndex - 1) * S->numCols; + + + /* Read two nearest points in X-direction */ + f00 = pData[index]; + f01 = pData[index + 1]; + + /* Calculation of index for two nearest points in Y-direction */ + index = (xIndex - 1) + (yIndex) * S->numCols; + + + /* Read two nearest points in Y-direction */ + f10 = pData[index]; + f11 = pData[index + 1]; + + /* Calculation of intermediate values */ + b1 = f00; + b2 = f01 - f00; + b3 = f10 - f00; + b4 = f00 - f01 - f10 + f11; + + /* Calculation of fractional part in X */ + xdiff = X - xIndex; + + /* Calculation of fractional part in Y */ + ydiff = Y - yIndex; + + /* Calculation of bi-linear interpolated output */ + out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; + + /* return to application */ + return (out); + + } + + /** + * + * @brief Q31 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q31_t arm_bilinear_interp_q31( + arm_bilinear_interp_instance_q31 * S, + q31_t X, + q31_t Y) + { + q31_t out; /* Temporary output */ + q31_t acc = 0; /* output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q31_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q31_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20u); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20u); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* shift left xfract by 11 to keep 1.31 format */ + xfract = (X & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + /* 20 bits for the fractional part */ + /* shift left yfract by 11 to keep 1.31 format */ + yfract = (Y & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ + out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); + acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); + + /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); + + /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* Convert acc to 1.31(q31) format */ + return (acc << 2u); + + } + + /** + * @brief Q15 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q15_t arm_bilinear_interp_q15( + arm_bilinear_interp_instance_q15 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q15_t x1, x2, y1, y2; /* Nearest output values */ + q31_t xfract, yfract; /* X, Y fractional parts */ + int32_t rI, cI; /* Row and column indices */ + q15_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ + + /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ + /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ + out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); + acc = ((q63_t) out * (0xFFFFF - yfract)); + + /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); + acc += ((q63_t) out * (xfract)); + + /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* acc is in 13.51 format and down shift acc by 36 times */ + /* Convert out to 1.15 format */ + return (acc >> 36); + + } + + /** + * @brief Q7 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q7_t arm_bilinear_interp_q7( + arm_bilinear_interp_instance_q7 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q7_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q7_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ + out = ((x1 * (0xFFFFF - xfract))); + acc = (((q63_t) out * (0xFFFFF - yfract))); + + /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ + out = ((x2 * (0xFFFFF - yfract))); + acc += (((q63_t) out * (xfract))); + + /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y1 * (0xFFFFF - xfract))); + acc += (((q63_t) out * (yfract))); + + /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y2 * (yfract))); + acc += (((q63_t) out * (xfract))); + + /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ + return (acc >> 40); + + } + + /** + * @} end of BilinearInterpolate group + */ + + +#if defined ( __CC_ARM ) //Keil +//SMMLAR + #define multAcc_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) + +//SMMLSR + #define multSub_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) + +//SMMULR + #define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) + +//Enter low optimization region - place directly above function definition + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("push") \ + _Pragma ("O1") + +//Exit low optimization region - place directly after end of function definition + #define LOW_OPTIMIZATION_EXIT \ + _Pragma ("pop") + +//Enter low optimization region - place directly above function definition + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + +//Exit low optimization region - place directly after end of function definition + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__ICCARM__) //IAR + //SMMLA + #define multAcc_32x32_keep32_R(a, x, y) \ + a += (q31_t) (((q63_t) x * y) >> 32) + + //SMMLS + #define multSub_32x32_keep32_R(a, x, y) \ + a -= (q31_t) (((q63_t) x * y) >> 32) + +//SMMUL + #define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y ) >> 32) + +//Enter low optimization region - place directly above function definition + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + +//Exit low optimization region - place directly after end of function definition + #define LOW_OPTIMIZATION_EXIT + +//Enter low optimization region - place directly above function definition + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + +//Exit low optimization region - place directly after end of function definition + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__GNUC__) + //SMMLA + #define multAcc_32x32_keep32_R(a, x, y) \ + a += (q31_t) (((q63_t) x * y) >> 32) + + //SMMLS + #define multSub_32x32_keep32_R(a, x, y) \ + a -= (q31_t) (((q63_t) x * y) >> 32) + +//SMMUL + #define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y ) >> 32) + + #define LOW_OPTIMIZATION_ENTER __attribute__(( optimize("-O1") )) + + #define LOW_OPTIMIZATION_EXIT + + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#endif + + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ARM_MATH_H */ + + +/** + * + * End of file. + */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0.h new file mode 100644 index 0000000000..771b55af15 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0.h @@ -0,0 +1,667 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V3.02 + * @date 16. July 2012 + * + * @note + * Copyright (C) 2009-2012 ARM Limited. All rights reserved. + * + * @par + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. + * + * @par + * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED + * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. + * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. + * + ******************************************************************************/ +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M0 + @{ + */ +#define __NVIC_PRIO_BITS 2 +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (0x01) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000 + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0plus.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0plus.h new file mode 100644 index 0000000000..5cea74e9af --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm0plus.h @@ -0,0 +1,793 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex-M0+ + @{ + */ + +/* CMSIS CM0P definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16) | \ + __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000 + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0 + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if (__VTOR_PRESENT == 1) + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if (__VTOR_PRESENT == 1) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0+ Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm3.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm3.h new file mode 100644 index 0000000000..122c9aa4a8 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm3.h @@ -0,0 +1,1627 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4.h new file mode 100644 index 0000000000..d65016c714 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4.h @@ -0,0 +1,1772 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M4 + @{ + */ + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x04) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ +#include /* Compiler specific SIMD Intrinsics */ + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000 + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0 + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register */ +#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register */ +#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register */ +#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ +/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ + NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4_simd.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4_simd.h new file mode 100644 index 0000000000..83db95b5f1 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cm4_simd.h @@ -0,0 +1,673 @@ +/**************************************************************************//** + * @file core_cm4_simd.h + * @brief CMSIS Cortex-M4 SIMD Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_CM4_SIMD_H +#define __CORE_CM4_SIMD_H + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32) ) >> 32)) + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#include + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +#include + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLALD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLALDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((uint64_t)(ARG3) >> 32), __ARG3_L = (uint32_t)((uint64_t)(ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SMLSLD(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +#define __SMLSLDX(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __ARG1 = (ARG1), __ARG2 = (ARG2), __ARG3_H = (uint32_t)((ARG3) >> 32), __ARG3_L = (uint32_t)((ARG3) & 0xFFFFFFFFUL); \ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (__ARG3_L), "=r" (__ARG3_H) : "r" (__ARG1), "r" (__ARG2), "0" (__ARG3_L), "1" (__ARG3_H) ); \ + (uint64_t)(((uint64_t)__ARG3_H << 32) | __ARG3_L); \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ + + +/*------ CM4 SIMD Intrinsics -----------------------------------------------------*/ +/* not yet supported */ +/*-- End CM4 SIMD Intrinsics -----------------------------------------------------*/ + + +#endif + +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CORE_CM4_SIMD_H */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmFunc.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmFunc.h new file mode 100644 index 0000000000..188e22a611 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmFunc.h @@ -0,0 +1,637 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V4.00 + * @date 28. August 2016 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2016 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#if (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */ + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} + +#endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ +#include + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + +#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ +/* Cosmic specific functions */ +#include + +#endif + +/*@} end of CMSIS_Core_RegAccFunctions */ + +#endif /* __CORE_CMFUNC_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmInstr.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmInstr.h new file mode 100644 index 0000000000..2975ff9c81 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_cmInstr.h @@ -0,0 +1,880 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V4.00 + * @date 28. August 2016 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2016 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function executes a exclusive LDR instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function executes a exclusive LDR instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function executes a exclusive LDR instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function executes a exclusive STR instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function executes a exclusive STR instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function executes a exclusive STR instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +/** \brief Rotate Right with Extend (32 bit) + + This function moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. + + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** \brief LDRT Unprivileged (8 bit) + + This function executes a Unprivileged LDRT instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** \brief LDRT Unprivileged (16 bit) + + This function executes a Unprivileged LDRT instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** \brief LDRT Unprivileged (32 bit) + + This function executes a Unprivileged LDRT instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** \brief STRT Unprivileged (8 bit) + + This function executes a Unprivileged STRT instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** \brief STRT Unprivileged (16 bit) + + This function executes a Unprivileged STRT instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** \brief STRT Unprivileged (32 bit) + + This function executes a Unprivileged STRT instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constrant "l" + * Otherwise, use general registers, specified by constrant "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (short)__builtin_bswap16(value); +#else + uint32_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32 - op2)); +} + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function executes a exclusive LDR instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDR Exclusive (16 bit) + + This function executes a exclusive LDR instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDR Exclusive (32 bit) + + This function executes a exclusive LDR instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function executes a exclusive STR instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function executes a exclusive STR instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function executes a exclusive STR instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief Rotate Right with Extend (32 bit) + + This function moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. + + \param [in] value Value to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** \brief LDRT Unprivileged (8 bit) + + This function executes a Unprivileged LDRT instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDRT Unprivileged (16 bit) + + This function executes a Unprivileged LDRT instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDRT Unprivileged (32 bit) + + This function executes a Unprivileged LDRT instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** \brief STRT Unprivileged (8 bit) + + This function executes a Unprivileged STRT instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** \brief STRT Unprivileged (16 bit) + + This function executes a Unprivileged STRT instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** \brief STRT Unprivileged (32 bit) + + This function executes a Unprivileged STRT instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*addr) : "r" (value) ); +} + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ +#include + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + +#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ +/* Cosmic specific functions */ +#include + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc000.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc000.h new file mode 100644 index 0000000000..1a2a0f2e30 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc000.h @@ -0,0 +1,813 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup SC000 + @{ + */ + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (0) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000 + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1]; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154]; + __IO uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/* SCB Security Features Register Definitions */ +#define SCB_SFCR_UNIBRTIMING_Pos 0 /*!< SCB SFCR: UNIBRTIMING Position */ +#define SCB_SFCR_UNIBRTIMING_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SFCR: UNIBRTIMING Mask */ + +#define SCB_SFCR_SECKEY_Pos 16 /*!< SCB SFCR: SECKEY Position */ +#define SCB_SFCR_SECKEY_Msk (0xFFFFUL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SFCR: SECKEY Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2]; + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of SC000 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc300.h b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc300.h new file mode 100644 index 0000000000..cc34d6fc0e --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/CORE/core_sc300.h @@ -0,0 +1,1598 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V3.20 + * @date 25. February 2013 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2013 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup SC3000 + @{ + */ + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (300) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000 + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the samllest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + +#ifdef __cplusplus +} +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_common_tables.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_common_tables.h new file mode 100644 index 0000000000..76aadca490 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_common_tables.h @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 31. July 2014 +* $Revision: V1.4.4 +* +* Project: CMSIS DSP Library +* Title: arm_common_tables.h +* +* Description: This file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_COMMON_TABLES_H +#define _ARM_COMMON_TABLES_H + +#include "arm_math.h" + +extern const uint16_t armBitRevTable[1024]; +extern const q15_t armRecipTableQ15[64]; +extern const q31_t armRecipTableQ31[64]; +//extern const q31_t realCoefAQ31[1024]; +//extern const q31_t realCoefBQ31[1024]; +extern const float32_t twiddleCoef_16[32]; +extern const float32_t twiddleCoef_32[64]; +extern const float32_t twiddleCoef_64[128]; +extern const float32_t twiddleCoef_128[256]; +extern const float32_t twiddleCoef_256[512]; +extern const float32_t twiddleCoef_512[1024]; +extern const float32_t twiddleCoef_1024[2048]; +extern const float32_t twiddleCoef_2048[4096]; +extern const float32_t twiddleCoef_4096[8192]; +#define twiddleCoef twiddleCoef_4096 +extern const q31_t twiddleCoef_16_q31[24]; +extern const q31_t twiddleCoef_32_q31[48]; +extern const q31_t twiddleCoef_64_q31[96]; +extern const q31_t twiddleCoef_128_q31[192]; +extern const q31_t twiddleCoef_256_q31[384]; +extern const q31_t twiddleCoef_512_q31[768]; +extern const q31_t twiddleCoef_1024_q31[1536]; +extern const q31_t twiddleCoef_2048_q31[3072]; +extern const q31_t twiddleCoef_4096_q31[6144]; +extern const q15_t twiddleCoef_16_q15[24]; +extern const q15_t twiddleCoef_32_q15[48]; +extern const q15_t twiddleCoef_64_q15[96]; +extern const q15_t twiddleCoef_128_q15[192]; +extern const q15_t twiddleCoef_256_q15[384]; +extern const q15_t twiddleCoef_512_q15[768]; +extern const q15_t twiddleCoef_1024_q15[1536]; +extern const q15_t twiddleCoef_2048_q15[3072]; +extern const q15_t twiddleCoef_4096_q15[6144]; +extern const float32_t twiddleCoef_rfft_32[32]; +extern const float32_t twiddleCoef_rfft_64[64]; +extern const float32_t twiddleCoef_rfft_128[128]; +extern const float32_t twiddleCoef_rfft_256[256]; +extern const float32_t twiddleCoef_rfft_512[512]; +extern const float32_t twiddleCoef_rfft_1024[1024]; +extern const float32_t twiddleCoef_rfft_2048[2048]; +extern const float32_t twiddleCoef_rfft_4096[4096]; + + +/* floating-point bit reversal tables */ +#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20 ) +#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48 ) +#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56 ) +#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208 ) +#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440 ) +#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448 ) +#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800) +#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808) +#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032) + +extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH]; + +/* fixed-point bit reversal tables */ +#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12 ) +#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24 ) +#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56 ) +#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112 ) +#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240 ) +#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480 ) +#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992 ) +#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) +#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) + +extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; +extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; + +/* Tables for Fast Math Sine and Cosine */ +extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; +extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; +extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; + +#endif /* ARM_COMMON_TABLES_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_const_structs.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_const_structs.h new file mode 100644 index 0000000000..217f1d50e2 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_const_structs.h @@ -0,0 +1,79 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 31. July 2014 +* $Revision: V1.4.4 +* +* Project: CMSIS DSP Library +* Title: arm_const_structs.h +* +* Description: This file has constant structs that are initialized for +* user convenience. For example, some can be given as +* arguments to the arm_cfft_f32() function. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. +* -------------------------------------------------------------------- */ + +#ifndef _ARM_CONST_STRUCTS_H +#define _ARM_CONST_STRUCTS_H + +#include "arm_math.h" +#include "arm_common_tables.h" + + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096; + + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096; + + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096; + +#endif diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_math.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_math.h new file mode 100644 index 0000000000..87a9f10fa9 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/arm_math.h @@ -0,0 +1,7539 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2014 ARM Limited. All rights reserved. +* +* $Date: 12. March 2014 +* $Revision: V1.4.4 +* +* Project: CMSIS DSP Library +* Title: arm_math.h +* +* Description: Public header file for CMSIS DSP Library +* +* Target Processor: Cortex-M7/Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* 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 THE +* COPYRIGHT OWNER OR CONTRIBUTORS 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. + * -------------------------------------------------------------------- */ + +/** + \mainpage CMSIS DSP Software Library + * + * Introduction + * ------------ + * + * This user manual describes the CMSIS DSP software library, + * a suite of common signal processing functions for use on Cortex-M processor based devices. + * + * The library is divided into a number of functions each covering a specific category: + * - Basic math functions + * - Fast math functions + * - Complex math functions + * - Filters + * - Matrix functions + * - Transforms + * - Motor control functions + * - Statistical functions + * - Support functions + * - Interpolation functions + * + * The library has separate functions for operating on 8-bit integers, 16-bit integers, + * 32-bit integer and 32-bit floating-point values. + * + * Using the Library + * ------------ + * + * The library installer contains prebuilt versions of the libraries in the Lib folder. + * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4) + * - arm_cortexM4l_math.lib (Little endian on Cortex-M4) + * - arm_cortexM4b_math.lib (Big endian on Cortex-M4) + * - arm_cortexM3l_math.lib (Little endian on Cortex-M3) + * - arm_cortexM3b_math.lib (Big endian on Cortex-M3) + * - arm_cortexM0l_math.lib (Little endian on Cortex-M0) + * - arm_cortexM0b_math.lib (Big endian on Cortex-M3) + * + * The library functions are declared in the public file arm_math.h which is placed in the Include folder. + * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single + * public header file arm_math.h for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. + * Define the appropriate pre processor MACRO ARM_MATH_CM4 or ARM_MATH_CM3 or + * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application. + * + * Examples + * -------- + * + * The library ships with a number of examples which demonstrate how to use the library functions. + * + * Toolchain Support + * ------------ + * + * The library has been developed and tested with MDK-ARM version 4.60. + * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. + * + * Building the Library + * ------------ + * + * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the CMSIS\\DSP_Lib\\Source\\ARM folder. + * - arm_cortexM_math.uvproj + * + * + * The libraries can be built by opening the arm_cortexM_math.uvproj project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above. + * + * Pre-processor Macros + * ------------ + * + * Each library project have differant pre-processor macros. + * + * - UNALIGNED_SUPPORT_DISABLE: + * + * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access + * + * - ARM_MATH_BIG_ENDIAN: + * + * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. + * + * - ARM_MATH_MATRIX_CHECK: + * + * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices + * + * - ARM_MATH_ROUNDING: + * + * Define macro ARM_MATH_ROUNDING for rounding on support functions + * + * - ARM_MATH_CMx: + * + * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target + * and ARM_MATH_CM0 for building library on cortex-M0 target, ARM_MATH_CM0PLUS for building library on cortex-M0+ target. + * + * - __FPU_PRESENT: + * + * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries + * + *
+ * CMSIS-DSP in ARM::CMSIS Pack + * ----------------------------- + * + * The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories: + * |File/Folder |Content | + * |------------------------------|------------------------------------------------------------------------| + * |\b CMSIS\\Documentation\\DSP | This documentation | + * |\b CMSIS\\DSP_Lib | Software license agreement (license.txt) | + * |\b CMSIS\\DSP_Lib\\Examples | Example projects demonstrating the usage of the library functions | + * |\b CMSIS\\DSP_Lib\\Source | Source files for rebuilding the library | + * + *
+ * Revision History of CMSIS-DSP + * ------------ + * Please refer to \ref ChangeLog_pg. + * + * Copyright Notice + * ------------ + * + * Copyright (C) 2010-2014 ARM Limited. All rights reserved. + */ + + +/** + * @defgroup groupMath Basic Math Functions + */ + +/** + * @defgroup groupFastMath Fast Math Functions + * This set of functions provides a fast approximation to sine, cosine, and square root. + * As compared to most of the other functions in the CMSIS math library, the fast math functions + * operate on individual values and not arrays. + * There are separate functions for Q15, Q31, and floating-point data. + * + */ + +/** + * @defgroup groupCmplxMath Complex Math Functions + * This set of functions operates on complex data vectors. + * The data in the complex arrays is stored in an interleaved fashion + * (real, imag, real, imag, ...). + * In the API functions, the number of samples in a complex array refers + * to the number of complex values; the array contains twice this number of + * real values. + */ + +/** + * @defgroup groupFilters Filtering Functions + */ + +/** + * @defgroup groupMatrix Matrix Functions + * + * This set of functions provides basic matrix math operations. + * The functions operate on matrix data structures. For example, + * the type + * definition for the floating-point matrix structure is shown + * below: + *
+ *     typedef struct
+ *     {
+ *       uint16_t numRows;     // number of rows of the matrix.
+ *       uint16_t numCols;     // number of columns of the matrix.
+ *       float32_t *pData;     // points to the data of the matrix.
+ *     } arm_matrix_instance_f32;
+ * 
+ * There are similar definitions for Q15 and Q31 data types. + * + * The structure specifies the size of the matrix and then points to + * an array of data. The array is of size numRows X numCols + * and the values are arranged in row order. That is, the + * matrix element (i, j) is stored at: + *
+ *     pData[i*numCols + j]
+ * 
+ * + * \par Init Functions + * There is an associated initialization function for each type of matrix + * data structure. + * The initialization function sets the values of the internal structure fields. + * Refer to the function arm_mat_init_f32(), arm_mat_init_q31() + * and arm_mat_init_q15() for floating-point, Q31 and Q15 types, respectively. + * + * \par + * Use of the initialization function is optional. However, if initialization function is used + * then the instance structure cannot be placed into a const data section. + * To place the instance structure in a const data + * section, manually initialize the data structure. For example: + *
+ * arm_matrix_instance_f32 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q31 S = {nRows, nColumns, pData};
+ * arm_matrix_instance_q15 S = {nRows, nColumns, pData};
+ * 
+ * where nRows specifies the number of rows, nColumns + * specifies the number of columns, and pData points to the + * data array. + * + * \par Size Checking + * By default all of the matrix functions perform size checking on the input and + * output matrices. For example, the matrix addition function verifies that the + * two input matrices and the output matrix all have the same number of rows and + * columns. If the size check fails the functions return: + *
+ *     ARM_MATH_SIZE_MISMATCH
+ * 
+ * Otherwise the functions return + *
+ *     ARM_MATH_SUCCESS
+ * 
+ * There is some overhead associated with this matrix size checking. + * The matrix size checking is enabled via the \#define + *
+ *     ARM_MATH_MATRIX_CHECK
+ * 
+ * within the library project settings. By default this macro is defined + * and size checking is enabled. By changing the project settings and + * undefining this macro size checking is eliminated and the functions + * run a bit faster. With size checking disabled the functions always + * return ARM_MATH_SUCCESS. + */ + +/** + * @defgroup groupTransforms Transform Functions + */ + +/** + * @defgroup groupController Controller Functions + */ + +/** + * @defgroup groupStats Statistics Functions + */ +/** + * @defgroup groupSupport Support Functions + */ + +/** + * @defgroup groupInterpolation Interpolation Functions + * These functions perform 1- and 2-dimensional interpolation of data. + * Linear interpolation is used for 1-dimensional data and + * bilinear interpolation is used for 2-dimensional data. + */ + +/** + * @defgroup groupExamples Examples + */ +#ifndef _ARM_MATH_H +#define _ARM_MATH_H + +#define __CMSIS_GENERIC /* disable NVIC and Systick functions */ + +#if defined(ARM_MATH_CM7) +#include "core_cm7.h" +#elif defined (ARM_MATH_CM4) +#include "core_cm4.h" +#elif defined (ARM_MATH_CM3) +#include "core_cm3.h" +#elif defined (ARM_MATH_CM0) +#include "core_cm0.h" +#define ARM_MATH_CM0_FAMILY +#elif defined (ARM_MATH_CM0PLUS) +#include "core_cm0plus.h" +#define ARM_MATH_CM0_FAMILY +#else +#include "ARMCM4.h" +#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....." +#endif + +#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ +#include "string.h" +#include "math.h" +#ifdef __cplusplus +extern "C" +{ +#endif + + + /** + * @brief Macros required for reciprocal calculation in Normalized LMS + */ + +#define DELTA_Q31 (0x100) +#define DELTA_Q15 0x5 +#define INDEX_MASK 0x0000003F +#ifndef PI +#define PI 3.14159265358979f +#endif + + /** + * @brief Macros required for SINE and COSINE Fast math approximations + */ + +#define FAST_MATH_TABLE_SIZE 512 +#define FAST_MATH_Q31_SHIFT (32 - 10) +#define FAST_MATH_Q15_SHIFT (16 - 10) +#define CONTROLLER_Q31_SHIFT (32 - 9) +#define TABLE_SIZE 256 +#define TABLE_SPACING_Q31 0x400000 +#define TABLE_SPACING_Q15 0x80 + + /** + * @brief Macros required for SINE and COSINE Controller functions + */ + /* 1.31(q31) Fixed value of 2/360 */ + /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ +#define INPUT_SPACING 0xB60B61 + + /** + * @brief Macro for Unaligned Support + */ +#ifndef UNALIGNED_SUPPORT_DISABLE + #define ALIGN4 +#else + #if defined (__GNUC__) + #define ALIGN4 __attribute__((aligned(4))) + #else + #define ALIGN4 __align(4) + #endif +#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ + + /** + * @brief Error status returned by some functions in the library. + */ + + typedef enum + { + ARM_MATH_SUCCESS = 0, /**< No error */ + ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ + ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ + ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ + ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ + ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ + ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ + } arm_status; + + /** + * @brief 8-bit fractional data type in 1.7 format. + */ + typedef int8_t q7_t; + + /** + * @brief 16-bit fractional data type in 1.15 format. + */ + typedef int16_t q15_t; + + /** + * @brief 32-bit fractional data type in 1.31 format. + */ + typedef int32_t q31_t; + + /** + * @brief 64-bit fractional data type in 1.63 format. + */ + typedef int64_t q63_t; + + /** + * @brief 32-bit floating-point type definition. + */ + typedef float float32_t; + + /** + * @brief 64-bit floating-point type definition. + */ + typedef double float64_t; + + /** + * @brief definition to read/write two 16 bit values. + */ +#if defined __CC_ARM +#define __SIMD32_TYPE int32_t __packed +#define CMSIS_UNUSED __attribute__((unused)) +#elif defined __ICCARM__ +#define CMSIS_UNUSED +#define __SIMD32_TYPE int32_t __packed +#elif defined __GNUC__ +#define __SIMD32_TYPE int32_t +#define CMSIS_UNUSED __attribute__((unused)) +#elif defined __CSMC__ /* Cosmic */ +#define CMSIS_UNUSED +#define __SIMD32_TYPE int32_t +#else +#error Unknown compiler +#endif + +#define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) +#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) + +#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *) (addr)) + +#define __SIMD64(addr) (*(int64_t **) & (addr)) + +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + /** + * @brief definition to pack two 16 bit values. + */ +#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ + (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) +#define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ + (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) + +#endif + + + /** + * @brief definition to pack four 8 bit values. + */ +#ifndef ARM_MATH_BIG_ENDIAN + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) +#else + +#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) + +#endif + + + /** + * @brief Clips Q63 to Q31 values. + */ + static __INLINE q31_t clip_q63_to_q31( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; + } + + /** + * @brief Clips Q63 to Q15 values. + */ + static __INLINE q15_t clip_q63_to_q15( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); + } + + /** + * @brief Clips Q31 to Q7 values. + */ + static __INLINE q7_t clip_q31_to_q7( + q31_t x) + { + return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? + ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; + } + + /** + * @brief Clips Q31 to Q15 values. + */ + static __INLINE q15_t clip_q31_to_q15( + q31_t x) + { + return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? + ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; + } + + /** + * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. + */ + + static __INLINE q63_t mult32x64( + q63_t x, + q31_t y) + { + return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + + (((q63_t) (x >> 32) * y))); + } + + +#if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM ) +#define __CLZ __clz +#endif + +#if defined (ARM_MATH_CM0_FAMILY) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) || defined (__TASKING__) ) + + static __INLINE uint32_t __CLZ( + q31_t data); + + + static __INLINE uint32_t __CLZ( + q31_t data) + { + uint32_t count = 0; + uint32_t mask = 0x80000000; + + while((data & mask) == 0) + { + count += 1u; + mask = mask >> 1u; + } + + return (count); + + } + +#endif + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. + */ + + static __INLINE uint32_t arm_recip_q31( + q31_t in, + q31_t * dst, + q31_t * pRecipTable) + { + + uint32_t out, tempVal; + uint32_t index, i; + uint32_t signBits; + + if(in > 0) + { + signBits = __CLZ(in) - 1; + } + else + { + signBits = __CLZ(-in) - 1; + } + + /* Convert input sample to 1.31 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = (uint32_t) (in >> 24u); + index = (index & INDEX_MASK); + + /* 1.31 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0u; i < 2u; i++) + { + tempVal = (q31_t) (((q63_t) in * out) >> 31u); + tempVal = 0x7FFFFFFF - tempVal; + /* 1.31 with exp 1 */ + //out = (q31_t) (((q63_t) out * tempVal) >> 30u); + out = (q31_t) clip_q63_to_q31(((q63_t) out * tempVal) >> 30u); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1u); + + } + + /** + * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. + */ + static __INLINE uint32_t arm_recip_q15( + q15_t in, + q15_t * dst, + q15_t * pRecipTable) + { + + uint32_t out = 0, tempVal = 0; + uint32_t index = 0, i = 0; + uint32_t signBits = 0; + + if(in > 0) + { + signBits = __CLZ(in) - 17; + } + else + { + signBits = __CLZ(-in) - 17; + } + + /* Convert input sample to 1.15 format */ + in = in << signBits; + + /* calculation of index for initial approximated Val */ + index = in >> 8; + index = (index & INDEX_MASK); + + /* 1.15 with exp 1 */ + out = pRecipTable[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (i = 0; i < 2; i++) + { + tempVal = (q15_t) (((q31_t) in * out) >> 15); + tempVal = 0x7FFF - tempVal; + /* 1.15 with exp 1 */ + out = (q15_t) (((q31_t) out * tempVal) >> 14); + } + + /* write output */ + *dst = out; + + /* return num of signbits of out = 1/in value */ + return (signBits + 1); + + } + + + /* + * @brief C custom defined intrinisic function for only M0 processors + */ +#if defined(ARM_MATH_CM0_FAMILY) + + static __INLINE q31_t __SSAT( + q31_t x, + uint32_t y) + { + int32_t posMax, negMin; + uint32_t i; + + posMax = 1; + for (i = 0; i < (y - 1); i++) + { + posMax = posMax * 2; + } + + if(x > 0) + { + posMax = (posMax - 1); + + if(x > posMax) + { + x = posMax; + } + } + else + { + negMin = -posMax; + + if(x < negMin) + { + x = negMin; + } + } + return (x); + + + } + +#endif /* end of ARM_MATH_CM0_FAMILY */ + + + + /* + * @brief C custom defined intrinsic function for M3 and M0 processors + */ +#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) + + /* + * @brief C custom defined QADD8 for M3 and M0 processors + */ + static __INLINE q31_t __QADD8( + q31_t x, + q31_t y) + { + + q31_t sum; + q7_t r, s, t, u; + + r = (q7_t) x; + s = (q7_t) y; + + r = __SSAT((q31_t) (r + s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8); + t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8); + u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8); + + sum = + (((q31_t) u << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) | + (((q31_t) s << 8) & 0x0000FF00) | (r & 0x000000FF); + + return sum; + + } + + /* + * @brief C custom defined QSUB8 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB8( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s, t, u; + + r = (q7_t) x; + s = (q7_t) y; + + r = __SSAT((r - s), 8); + s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8; + t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16; + u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24; + + sum = + (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & + 0x000000FF); + + return sum; + } + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + + /* + * @brief C custom defined QADD16 for M3 and M0 processors + */ + static __INLINE q31_t __QADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = __SSAT(r + s, 16); + s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined SHADD16 for M3 and M0 processors + */ + static __INLINE q31_t __SHADD16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = ((r >> 1) + (s >> 1)); + s = ((q31_t) ((x >> 17) + (y >> 17))) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + + } + + /* + * @brief C custom defined QSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __QSUB16( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = __SSAT(r - s, 16); + s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16; + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SHSUB16 for M3 and M0 processors + */ + static __INLINE q31_t __SHSUB16( + q31_t x, + q31_t y) + { + + q31_t diff; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = ((r >> 1) - (s >> 1)); + s = (((x >> 17) - (y >> 17)) << 16); + + diff = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return diff; + } + + /* + * @brief C custom defined QASX for M3 and M0 processors + */ + static __INLINE q31_t __QASX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = + ((sum + + clip_q31_to_q15((q31_t) ((q15_t) (x >> 16) + (q15_t) y))) << 16) + + clip_q31_to_q15((q31_t) ((q15_t) x - (q15_t) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHASX for M3 and M0 processors + */ + static __INLINE q31_t __SHASX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = ((r >> 1) - (y >> 17)); + s = (((x >> 17) + (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + + /* + * @brief C custom defined QSAX for M3 and M0 processors + */ + static __INLINE q31_t __QSAX( + q31_t x, + q31_t y) + { + + q31_t sum = 0; + + sum = + ((sum + + clip_q31_to_q15((q31_t) ((q15_t) (x >> 16) - (q15_t) y))) << 16) + + clip_q31_to_q15((q31_t) ((q15_t) x + (q15_t) (y >> 16))); + + return sum; + } + + /* + * @brief C custom defined SHSAX for M3 and M0 processors + */ + static __INLINE q31_t __SHSAX( + q31_t x, + q31_t y) + { + + q31_t sum; + q31_t r, s; + + r = (q15_t) x; + s = (q15_t) y; + + r = ((r >> 1) + (y >> 17)); + s = (((x >> 17) - (s >> 1)) << 16); + + sum = (s & 0xFFFF0000) | (r & 0x0000FFFF); + + return sum; + } + + /* + * @brief C custom defined SMUSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMUSDX( + q31_t x, + q31_t y) + { + + return ((q31_t) (((q15_t) x * (q15_t) (y >> 16)) - + ((q15_t) (x >> 16) * (q15_t) y))); + } + + /* + * @brief C custom defined SMUADX for M3 and M0 processors + */ + static __INLINE q31_t __SMUADX( + q31_t x, + q31_t y) + { + + return ((q31_t) (((q15_t) x * (q15_t) (y >> 16)) + + ((q15_t) (x >> 16) * (q15_t) y))); + } + + /* + * @brief C custom defined QADD for M3 and M0 processors + */ + static __INLINE q31_t __QADD( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x + y); + } + + /* + * @brief C custom defined QSUB for M3 and M0 processors + */ + static __INLINE q31_t __QSUB( + q31_t x, + q31_t y) + { + return clip_q63_to_q31((q63_t) x - y); + } + + /* + * @brief C custom defined SMLAD for M3 and M0 processors + */ + static __INLINE q31_t __SMLAD( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + + ((q15_t) x * (q15_t) y)); + } + + /* + * @brief C custom defined SMLADX for M3 and M0 processors + */ + static __INLINE q31_t __SMLADX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum + ((q15_t) (x >> 16) * (q15_t) (y)) + + ((q15_t) x * (q15_t) (y >> 16))); + } + + /* + * @brief C custom defined SMLSDX for M3 and M0 processors + */ + static __INLINE q31_t __SMLSDX( + q31_t x, + q31_t y, + q31_t sum) + { + + return (sum - ((q15_t) (x >> 16) * (q15_t) (y)) + + ((q15_t) x * (q15_t) (y >> 16))); + } + + /* + * @brief C custom defined SMLALD for M3 and M0 processors + */ + static __INLINE q63_t __SMLALD( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + + ((q15_t) x * (q15_t) y)); + } + + /* + * @brief C custom defined SMLALDX for M3 and M0 processors + */ + static __INLINE q63_t __SMLALDX( + q31_t x, + q31_t y, + q63_t sum) + { + + return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + + ((q15_t) x * (q15_t) (y >> 16)); + } + + /* + * @brief C custom defined SMUAD for M3 and M0 processors + */ + static __INLINE q31_t __SMUAD( + q31_t x, + q31_t y) + { + + return (((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + /* + * @brief C custom defined SMUSD for M3 and M0 processors + */ + static __INLINE q31_t __SMUSD( + q31_t x, + q31_t y) + { + + return (-((x >> 16) * (y >> 16)) + + (((x << 16) >> 16) * ((y << 16) >> 16))); + } + + + /* + * @brief C custom defined SXTB16 for M3 and M0 processors + */ + static __INLINE q31_t __SXTB16( + q31_t x) + { + + return ((((x << 24) >> 24) & 0x0000FFFF) | + (((x << 8) >> 8) & 0xFFFF0000)); + } + + +#endif /* defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ + + + /** + * @brief Instance structure for the Q7 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q7; + + /** + * @brief Instance structure for the Q15 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f32; + + + /** + * @brief Processing function for the Q7 FIR filter. + * @param[in] *S points to an instance of the Q7 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q7( + const arm_fir_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q7 FIR filter. + * @param[in,out] *S points to an instance of the Q7 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed. + * @return none + */ + void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 FIR filter. + * @param[in] *S points to an instance of the Q15 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 FIR filter. + * @param[in,out] *S points to an instance of the Q15 FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if + * numTaps is not a supported value. + */ + + arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR filter. + * @param[in] *S points to an instance of the Q31 FIR filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR filter. + * @param[in,out] *S points to an instance of the Q31 FIR structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the floating-point FIR filter. + * @param[in] *S points to an instance of the floating-point FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_f32( + const arm_fir_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR filter. + * @param[in,out] *S points to an instance of the floating-point FIR filter structure. + * @param[in] numTaps Number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of samples that are processed at a time. + * @return none. + */ + void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q15 Biquad cascade filter. + */ + typedef struct + { + int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q15; + + + /** + * @brief Instance structure for the Q31 Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + + } arm_biquad_casd_df1_inst_q31; + + /** + * @brief Instance structure for the floating-point Biquad cascade filter. + */ + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + + + } arm_biquad_casd_df1_inst_f32; + + + + /** + * @brief Processing function for the Q15 Biquad cascade filter. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q15 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + q15_t * pCoeffs, + q15_t * pState, + int8_t postShift); + + + /** + * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 Biquad cascade filter + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 Biquad cascade filter. + * @param[in,out] *S points to an instance of the Q31 Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q31_t * pState, + int8_t postShift); + + /** + * @brief Processing function for the floating-point Biquad cascade filter. + * @param[in] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point Biquad cascade filter. + * @param[in,out] *S points to an instance of the floating-point Biquad cascade structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float32_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f32; + + + /** + * @brief Instance structure for the floating-point matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float64_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f64; + + /** + * @brief Instance structure for the Q15 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q15_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q15; + + /** + * @brief Instance structure for the Q31 matrix structure. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q31_t *pData; /**< points to the data of the matrix. */ + + } arm_matrix_instance_q31; + + + + /** + * @brief Floating-point matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix addition. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Floating-point, complex, matrix multiplication. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15, complex, matrix multiplication. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_cmplx_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pScratch); + + /** + * @brief Q31, complex, matrix multiplication. + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_cmplx_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); + + + /** + * @brief Q15 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix transpose. + * @param[in] *pSrc points to the input matrix + * @param[out] *pDst points to the output matrix + * @return The function returns either ARM_MATH_SIZE_MISMATCH + * or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @param[in] *pState points to the array for storing intermediate results + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); + + /** + * @brief Q31 matrix multiplication + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Floating-point matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix subtraction + * @param[in] *pSrcA points to the first input matrix structure + * @param[in] *pSrcB points to the second input matrix structure + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); + + /** + * @brief Floating-point matrix scaling. + * @param[in] *pSrc points to the input matrix + * @param[in] scale scale factor + * @param[out] *pDst points to the output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst); + + /** + * @brief Q15 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst); + + /** + * @brief Q31 matrix scaling. + * @param[in] *pSrc points to input matrix + * @param[in] scaleFract fractional portion of the scale factor + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to output matrix structure + * @return The function returns either + * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. + */ + + arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst); + + + /** + * @brief Q31 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t * pData); + + /** + * @brief Q15 matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t * pData); + + /** + * @brief Floating-point matrix initialization. + * @param[in,out] *S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] *pData points to the matrix data array. + * @return none + */ + + void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t * pData); + + + + /** + * @brief Instance structure for the Q15 PID Control. + */ + typedef struct + { + q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ +#ifdef ARM_MATH_CM0_FAMILY + q15_t A1; + q15_t A2; +#else + q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ +#endif + q15_t state[3]; /**< The state array of length 3. */ + q15_t Kp; /**< The proportional gain. */ + q15_t Ki; /**< The integral gain. */ + q15_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q15; + + /** + * @brief Instance structure for the Q31 PID Control. + */ + typedef struct + { + q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + q31_t A2; /**< The derived gain, A2 = Kd . */ + q31_t state[3]; /**< The state array of length 3. */ + q31_t Kp; /**< The proportional gain. */ + q31_t Ki; /**< The integral gain. */ + q31_t Kd; /**< The derivative gain. */ + + } arm_pid_instance_q31; + + /** + * @brief Instance structure for the floating-point PID Control. + */ + typedef struct + { + float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + float32_t A2; /**< The derived gain, A2 = Kd . */ + float32_t state[3]; /**< The state array of length 3. */ + float32_t Kp; /**< The proportional gain. */ + float32_t Ki; /**< The integral gain. */ + float32_t Kd; /**< The derivative gain. */ + } arm_pid_instance_f32; + + + + /** + * @brief Initialization function for the floating-point PID Control. + * @param[in,out] *S points to an instance of the PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @return none + */ + void arm_pid_reset_f32( + arm_pid_instance_f32 * S); + + + /** + * @brief Initialization function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag); + + + /** + * @brief Reset function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @return none + */ + + void arm_pid_reset_q31( + arm_pid_instance_q31 * S); + + /** + * @brief Initialization function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID structure. + * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. + * @return none. + */ + void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag); + + /** + * @brief Reset function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the q15 PID Control structure + * @return none + */ + void arm_pid_reset_q15( + arm_pid_instance_q15 * S); + + + /** + * @brief Instance structure for the floating-point Linear Interpolate function. + */ + typedef struct + { + uint32_t nValues; /**< nValues */ + float32_t x1; /**< x1 */ + float32_t xSpacing; /**< xSpacing */ + float32_t *pYData; /**< pointer to the table of Y values */ + } arm_linear_interp_instance_f32; + + /** + * @brief Instance structure for the floating-point bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + float32_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_f32; + + /** + * @brief Instance structure for the Q31 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q31_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q31; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q15_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q15; + + /** + * @brief Instance structure for the Q15 bilinear interpolation function. + */ + + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + q7_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q7; + + + /** + * @brief Q7 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector multiplication. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_mult_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + + + + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q15( + arm_cfft_radix2_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q15( + const arm_cfft_radix2_instance_q15 * S, + q15_t * pSrc); + + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc); + + /** + * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q31; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q31( + arm_cfft_radix2_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q31( + const arm_cfft_radix2_instance_q31 * S, + q31_t * pSrc); + + /** + * @brief Instance structure for the Q31 CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q31; + +/* Deprecated */ + void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc); + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix2_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_f32( + const arm_cfft_radix2_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f32; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_q15; + +void arm_cfft_q15( + const arm_cfft_instance_q15 * S, + q15_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_q31; + +void arm_cfft_q31( + const arm_cfft_instance_q31 * S, + q31_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_f32; + + void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the Q15 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q15; + + arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst); + + /** + * @brief Instance structure for the Q31 RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_q31; + + arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint16_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_f32; + + arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + +typedef struct + { + arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f32 ; + +arm_status arm_rfft_fast_init_f32 ( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen); + +void arm_rfft_fast_f32( + arm_rfft_fast_instance_f32 * S, + float32_t * p, float32_t * pOut, + uint8_t ifftFlag); + + /** + * @brief Instance structure for the floating-point DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + float32_t normalize; /**< normalizing factor. */ + float32_t *pTwiddle; /**< points to the twiddle factor table. */ + float32_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_f32; + + /** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] *S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + */ + + arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize); + + /** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] *S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q31 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q31_t normalize; /**< normalizing factor. */ + q31_t *pTwiddle; /**< points to the twiddle factor table. */ + q31_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q31; + + /** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] *S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize); + + /** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q31 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer); + + /** + * @brief Instance structure for the Q15 DCT4/IDCT4 function. + */ + + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q15_t normalize; /**< normalizing factor. */ + q15_t *pTwiddle; /**< points to the twiddle factor table. */ + q15_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q15; + + /** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] *S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] *S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] *S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + + arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize); + + /** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] *S points to an instance of the Q15 DCT4 structure. + * @param[in] *pState points to state buffer. + * @param[in,out] *pInlineBuffer points to the in-place input and output buffer. + * @return none. + */ + + void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer); + + /** + * @brief Floating-point vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector addition. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_add_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q7( + q7_t * pSrcA, + q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector subtraction. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_sub_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a floating-point vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scale scale factor to be applied + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_f32( + float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q7 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q7( + q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q15 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q15( + q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Multiplies a Q31 vector by a scalar. + * @param[in] *pSrc points to the input vector + * @param[in] scaleFract fractional portion of the scale value + * @param[in] shift number of bits to shift the result by + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_scale_q31( + q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Q7 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Floating-point vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Q15 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Q31 vector absolute value. + * @param[in] *pSrc points to the input buffer + * @param[out] *pDst points to the output buffer + * @param[in] blockSize number of samples in each vector + * @return none. + */ + + void arm_abs_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Dot product of floating-point vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t blockSize, + float32_t * result); + + /** + * @brief Dot product of Q7 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q7( + q7_t * pSrcA, + q7_t * pSrcB, + uint32_t blockSize, + q31_t * result); + + /** + * @brief Dot product of Q15 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Dot product of Q31 vectors. + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] blockSize number of samples in each vector + * @param[out] *result output result returned here + * @return none. + */ + + void arm_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t blockSize, + q63_t * result); + + /** + * @brief Shifts the elements of a Q7 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q7( + q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q15 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q15( + q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Shifts the elements of a Q31 vector a specified number of bits. + * @param[in] *pSrc points to the input vector + * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_shift_q31( + q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_f32( + float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q7( + q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q15( + q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Adds a constant offset to a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] offset is the offset to be added + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_offset_q31( + q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a floating-point vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q7 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q15 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Negates the elements of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] blockSize number of samples in the vector + * @return none. + */ + + void arm_negate_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Copies the elements of a floating-point vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q7 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q7( + q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Copies the elements of a Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_copy_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** + * @brief Fills a constant value into a floating-point vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q7 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q15 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Fills a constant value into a Q31 vector. + * @param[in] value input value to be filled + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + */ + + + void arm_conv_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_conv_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + + /** + * @brief Convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_conv_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + + /** + * @brief Convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length srcALen+srcBLen-1. + * @return none. + */ + + void arm_conv_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Partial convolution of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] * pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] * pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Partial convolution of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] * pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] * pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Partial convolution of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + /** + * @brief Partial convolution of Q7 sequences + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + + +/** + * @brief Partial convolution of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data + * @param[in] firstIndex is the first output sample to start with. + * @param[in] numPoints is the number of output points to be computed. + * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. + */ + + arm_status arm_conv_partial_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); + + + + /** + * @brief Instance structure for the Q15 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR decimator. + */ + + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + + } arm_fir_decimate_instance_f32; + + + + /** + * @brief Processing function for the floating-point FIR decimator. + * @param[in] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point FIR decimator. + * @param[in,out] *S points to an instance of the floating-point FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @brief Initialization function for the Q15 FIR decimator. + * @param[in,out] *S points to an instance of the Q15 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. + * @param[in] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of input samples to process per call. + * @return none + */ + + void arm_fir_decimate_fast_q31( + arm_fir_decimate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 FIR decimator. + * @param[in,out] *S points to an instance of the Q31 FIR decimator structure. + * @param[in] numTaps number of coefficients in the filter. + * @param[in] M decimation factor. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * blockSize is not a multiple of M. + */ + + arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + + /** + * @brief Instance structure for the Q15 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR interpolator. + */ + + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ + } arm_fir_interpolate_instance_f32; + + + /** + * @brief Processing function for the Q15 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 FIR interpolator. + * @param[in,out] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 FIR interpolator. + * @param[in] *S points to an instance of the Q15 FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR interpolator. + * @param[in,out] *S points to an instance of the Q31 FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point FIR interpolator. + * @param[in] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point FIR interpolator. + * @param[in,out] *S points to an instance of the floating-point FIR interpolator structure. + * @param[in] L upsample factor. + * @param[in] numTaps number of filter coefficients in the filter. + * @param[in] *pCoeffs points to the filter coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] blockSize number of input samples to process per call. + * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if + * the filter length numTaps is not a multiple of the interpolation factor L. + */ + + arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the high precision Q31 Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ + + } arm_biquad_cas_df1_32x64_ins_q31; + + + /** + * @param[in] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @param[in,out] *S points to an instance of the high precision Q31 Biquad cascade filter structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format + * @return none + */ + + void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift); + + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f32; + + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_stereo_df2T_instance_f32; + + + + /** + * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. + */ + + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float64_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + float64_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f64; + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] *S points to an instance of the filter data structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df2T_f32( + const arm_biquad_cascade_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels + * @param[in] *S points to an instance of the filter data structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_stereo_df2T_f32( + const arm_biquad_cascade_stereo_df2T_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in] *S points to an instance of the filter data structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_biquad_cascade_df2T_f64( + const arm_biquad_cascade_df2T_instance_f64 * S, + float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_stereo_df2T_init_f32( + arm_biquad_cascade_stereo_df2T_instance_f32 * S, + uint8_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + + /** + * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + * @param[in,out] *S points to an instance of the filter data structure. + * @param[in] numStages number of 2nd order stages in the filter. + * @param[in] *pCoeffs points to the filter coefficients. + * @param[in] *pState points to the state buffer. + * @return none + */ + + void arm_biquad_cascade_df2T_init_f64( + arm_biquad_cascade_df2T_instance_f64 * S, + uint8_t numStages, + float64_t * pCoeffs, + float64_t * pState); + + + + /** + * @brief Instance structure for the Q15 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point FIR lattice filter. + */ + + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_f32; + + /** + * @brief Initialization function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pCoeffs, + q15_t * pState); + + + /** + * @brief Processing function for the Q15 FIR lattice filter. + * @param[in] *S points to an instance of the Q15 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pCoeffs, + q31_t * pState); + + + /** + * @brief Processing function for the Q31 FIR lattice filter. + * @param[in] *S points to an instance of the Q31 FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Initialization function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] numStages number of filter stages. + * @param[in] *pCoeffs points to the coefficient buffer. The array is of length numStages. + * @param[in] *pState points to the state buffer. The array is of length numStages. + * @return none. + */ + + void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pCoeffs, + float32_t * pState); + + /** + * @brief Processing function for the floating-point FIR lattice filter. + * @param[in] *S points to an instance of the floating-point FIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q15; + + /** + * @brief Instance structure for the Q31 IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q31; + + /** + * @brief Instance structure for the floating-point IIR lattice filter. + */ + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_f32; + + /** + * @brief Processing function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point IIR lattice filter. + * @param[in] *S points to an instance of the floating-point IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize-1. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q31 IIR lattice filter. + * @param[in] *S points to an instance of the Q31 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to the state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize); + + + /** + * @brief Processing function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the Q15 IIR lattice structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + +/** + * @brief Initialization function for the Q15 IIR lattice filter. + * @param[in] *S points to an instance of the fixed-point Q15 IIR lattice structure. + * @param[in] numStages number of stages in the filter. + * @param[in] *pkCoeffs points to reflection coefficient buffer. The array is of length numStages. + * @param[in] *pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. + * @param[in] *pState points to state buffer. The array is of length numStages+blockSize. + * @param[in] blockSize number of samples to process per call. + * @return none. + */ + + void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize); + + /** + * @brief Instance structure for the floating-point LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that controls filter coefficient updates. */ + } arm_lms_instance_f32; + + /** + * @brief Processing function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_f32( + const arm_lms_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + /** + * @brief Instance structure for the Q15 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q15; + + + /** + * @brief Initialization function for the Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to the coefficient buffer. + * @param[in] *pState points to the state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Processing function for Q15 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q15( + const arm_lms_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + + } arm_lms_instance_q31; + + /** + * @brief Processing function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q15 LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_q31( + const arm_lms_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 LMS filter. + * @param[in] *S points to an instance of the Q31 LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift); + + /** + * @brief Instance structure for the floating-point normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that control filter coefficient updates. */ + float32_t energy; /**< saves previous frame energy. */ + float32_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_f32; + + /** + * @brief Processing function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for floating-point normalized LMS filter. + * @param[in] *S points to an instance of the floating-point LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); + + + /** + * @brief Instance structure for the Q31 normalized LMS filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q31_t *recipTable; /**< points to the reciprocal initial value table. */ + q31_t energy; /**< saves previous frame energy. */ + q31_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q31; + + /** + * @brief Processing function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); + + /** + * @brief Initialization function for Q31 normalized LMS filter. + * @param[in] *S points to an instance of the Q31 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Instance structure for the Q15 normalized LMS filter. + */ + + typedef struct + { + uint16_t numTaps; /**< Number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + q15_t *recipTable; /**< Points to the reciprocal initial value table. */ + q15_t energy; /**< saves previous frame energy. */ + q15_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q15; + + /** + * @brief Processing function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] *pSrc points to the block of input data. + * @param[in] *pRef points to the block of reference data. + * @param[out] *pOut points to the block of output data. + * @param[out] *pErr points to the block of error data. + * @param[in] blockSize number of samples to process. + * @return none. + */ + + void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); + + + /** + * @brief Initialization function for Q15 normalized LMS filter. + * @param[in] *S points to an instance of the Q15 normalized LMS filter structure. + * @param[in] numTaps number of filter coefficients. + * @param[in] *pCoeffs points to coefficient buffer. + * @param[in] *pState points to state buffer. + * @param[in] mu step size that controls filter coefficient updates. + * @param[in] blockSize number of samples to process. + * @param[in] postShift bit shift applied to coefficients. + * @return none. + */ + + void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift); + + /** + * @brief Correlation of floating-point sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_f32( + float32_t * pSrcA, + uint32_t srcALen, + float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); + + + /** + * @brief Correlation of Q15 sequences + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + */ + void arm_correlate_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + + /** + * @brief Correlation of Q15 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + + + + /** + * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @return none. + */ + + void arm_correlate_fast_opt_q15( + q15_t * pSrcA, + uint32_t srcALen, + q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + + /** + * @brief Correlation of Q31 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + /** + * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_fast_q31( + q31_t * pSrcA, + uint32_t srcALen, + q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @param[in] *pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + * @param[in] *pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + * @return none. + */ + + void arm_correlate_opt_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + + + /** + * @brief Correlation of Q7 sequences. + * @param[in] *pSrcA points to the first input sequence. + * @param[in] srcALen length of the first input sequence. + * @param[in] *pSrcB points to the second input sequence. + * @param[in] srcBLen length of the second input sequence. + * @param[out] *pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. + * @return none. + */ + + void arm_correlate_q7( + q7_t * pSrcA, + uint32_t srcALen, + q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); + + + /** + * @brief Instance structure for the floating-point sparse FIR filter. + */ + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_f32; + + /** + * @brief Instance structure for the Q31 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q31; + + /** + * @brief Instance structure for the Q15 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q15; + + /** + * @brief Instance structure for the Q7 sparse FIR filter. + */ + + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q7; + + /** + * @brief Processing function for the floating-point sparse FIR filter. + * @param[in] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the floating-point sparse FIR filter. + * @param[in,out] *S points to an instance of the floating-point sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q31 sparse FIR filter. + * @param[in] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q31 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q31 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q15 sparse FIR filter. + * @param[in] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + + /** + * @brief Initialization function for the Q15 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q15 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + /** + * @brief Processing function for the Q7 sparse FIR filter. + * @param[in] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] *pSrc points to the block of input data. + * @param[out] *pDst points to the block of output data + * @param[in] *pScratchIn points to a temporary buffer of size blockSize. + * @param[in] *pScratchOut points to a temporary buffer of size blockSize. + * @param[in] blockSize number of input samples to process per call. + * @return none. + */ + + void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); + + /** + * @brief Initialization function for the Q7 sparse FIR filter. + * @param[in,out] *S points to an instance of the Q7 sparse FIR structure. + * @param[in] numTaps number of nonzero coefficients in the filter. + * @param[in] *pCoeffs points to the array of filter coefficients. + * @param[in] *pState points to the state buffer. + * @param[in] *pTapDelay points to the array of offset times. + * @param[in] maxDelay maximum offset time supported. + * @param[in] blockSize number of samples that will be processed per block. + * @return none + */ + + void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); + + + /* + * @brief Floating-point sin_cos function. + * @param[in] theta input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cos output. + * @return none. + */ + + void arm_sin_cos_f32( + float32_t theta, + float32_t * pSinVal, + float32_t * pCcosVal); + + /* + * @brief Q31 sin_cos function. + * @param[in] theta scaled input value in degrees + * @param[out] *pSinVal points to the processed sine output. + * @param[out] *pCosVal points to the processed cosine output. + * @return none. + */ + + void arm_sin_cos_q31( + q31_t theta, + q31_t * pSinVal, + q31_t * pCosVal); + + + /** + * @brief Floating-point complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex conjugate. + * @param[in] *pSrc points to the input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_conj_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + + /** + * @brief Floating-point complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude squared + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_squared_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup PID PID Motor Control + * + * A Proportional Integral Derivative (PID) controller is a generic feedback control + * loop mechanism widely used in industrial control systems. + * A PID controller is the most commonly used type of feedback controller. + * + * This set of functions implements (PID) controllers + * for Q15, Q31, and floating-point data types. The functions operate on a single sample + * of data and each call to the function returns a single processed value. + * S points to an instance of the PID control data structure. in + * is the input sample value. The functions return the output value. + * + * \par Algorithm: + *
+   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
+   *    A0 = Kp + Ki + Kd
+   *    A1 = (-Kp ) - (2 * Kd )
+   *    A2 = Kd  
+ * + * \par + * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant + * + * \par + * \image html PID.gif "Proportional Integral Derivative Controller" + * + * \par + * The PID controller calculates an "error" value as the difference between + * the measured output and the reference input. + * The controller attempts to minimize the error by adjusting the process control inputs. + * The proportional value determines the reaction to the current error, + * the integral value determines the reaction based on the sum of recent errors, + * and the derivative value determines the reaction based on the rate at which the error has been changing. + * + * \par Instance Structure + * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. + * A separate instance structure must be defined for each PID Controller. + * There are separate instance structure declarations for each of the 3 supported data types. + * + * \par Reset Functions + * There is also an associated reset function for each data type which clears the state array. + * + * \par Initialization Functions + * There is also an associated initialization function for each data type. + * The initialization function performs the following operations: + * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. + * - Zeros out the values in the state buffer. + * + * \par + * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + * + * \par Fixed-Point Behavior + * Care must be taken when using the fixed-point versions of the PID Controller functions. + * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup PID + * @{ + */ + + /** + * @brief Process function for the floating-point PID Control. + * @param[in,out] *S is an instance of the floating-point PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + */ + + + static __INLINE float32_t arm_pid_f32( + arm_pid_instance_f32 * S, + float32_t in) + { + float32_t out; + + /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ + out = (S->A0 * in) + + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q31 PID Control. + * @param[in,out] *S points to an instance of the Q31 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 64-bit accumulator. + * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + * Thus, if the accumulator result overflows it wraps around rather than clip. + * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. + * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + + static __INLINE q31_t arm_pid_q31( + arm_pid_instance_q31 * S, + q31_t in) + { + q63_t acc; + q31_t out; + + /* acc = A0 * x[n] */ + acc = (q63_t) S->A0 * in; + + /* acc += A1 * x[n-1] */ + acc += (q63_t) S->A1 * S->state[0]; + + /* acc += A2 * x[n-2] */ + acc += (q63_t) S->A2 * S->state[1]; + + /* convert output to 1.31 format to add y[n-1] */ + out = (q31_t) (acc >> 31u); + + /* out += y[n-1] */ + out += S->state[2]; + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @brief Process function for the Q15 PID Control. + * @param[in,out] *S points to an instance of the Q15 PID Control structure + * @param[in] in input sample to process + * @return out processed output sample. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using a 64-bit internal accumulator. + * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + * Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + + static __INLINE q15_t arm_pid_q15( + arm_pid_instance_q15 * S, + q15_t in) + { + q63_t acc; + q15_t out; + +#ifndef ARM_MATH_CM0_FAMILY + __SIMD32_TYPE *vstate; + + /* Implementation of PID controller */ + + /* acc = A0 * x[n] */ + acc = (q31_t) __SMUAD(S->A0, in); + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + vstate = __SIMD32_CONST(S->state); + acc = __SMLALD(S->A1, (q31_t) *vstate, acc); + +#else + /* acc = A0 * x[n] */ + acc = ((q31_t) S->A0) * in; + + /* acc += A1 * x[n-1] + A2 * x[n-2] */ + acc += (q31_t) S->A1 * S->state[0]; + acc += (q31_t) S->A2 * S->state[1]; + +#endif + + /* acc += y[n-1] */ + acc += (q31_t) S->state[2] << 15; + + /* saturate the output */ + out = (q15_t) (__SSAT((acc >> 15), 16)); + + /* Update state */ + S->state[1] = S->state[0]; + S->state[0] = in; + S->state[2] = out; + + /* return to application */ + return (out); + + } + + /** + * @} end of PID group + */ + + + /** + * @brief Floating-point matrix inverse. + * @param[in] *src points to the instance of the input floating-point matrix structure. + * @param[out] *dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + + arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); + + + /** + * @brief Floating-point matrix inverse. + * @param[in] *src points to the instance of the input floating-point matrix structure. + * @param[out] *dst points to the instance of the output floating-point matrix structure. + * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. + * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. + */ + + arm_status arm_mat_inverse_f64( + const arm_matrix_instance_f64 * src, + arm_matrix_instance_f64 * dst); + + + + /** + * @ingroup groupController + */ + + + /** + * @defgroup clarke Vector Clarke Transform + * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. + * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents + * in the two-phase orthogonal stator axis Ialpha and Ibeta. + * When Ialpha is superposed with Ia as shown in the figure below + * \image html clarke.gif Stator current space vector and its components in (a,b). + * and Ia + Ib + Ic = 0, in this condition Ialpha and Ibeta + * can be calculated using only Ia and Ib. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeFormula.gif + * where Ia and Ib are the instantaneous stator phases and + * pIalpha and pIbeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup clarke + * @{ + */ + + /** + * + * @brief Floating-point Clarke transform + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + */ + + static __INLINE void arm_clarke_f32( + float32_t Ia, + float32_t Ib, + float32_t * pIalpha, + float32_t * pIbeta) + { + /* Calculate pIalpha using the equation, pIalpha = Ia */ + *pIalpha = Ia; + + /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ + *pIbeta = + ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); + + } + + /** + * @brief Clarke transform for Q31 version + * @param[in] Ia input three-phase coordinate a + * @param[in] Ib input three-phase coordinate b + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + static __INLINE void arm_clarke_q31( + q31_t Ia, + q31_t Ib, + q31_t * pIalpha, + q31_t * pIbeta) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIalpha from Ia by equation pIalpha = Ia */ + *pIalpha = Ia; + + /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); + + /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ + product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); + + /* pIbeta is calculated by adding the intermediate products */ + *pIbeta = __QADD(product1, product2); + } + + /** + * @} end of clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q31 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q31( + q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_clarke Vector Inverse Clarke Transform + * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html clarkeInvFormula.gif + * where pIa and pIb are the instantaneous stator phases and + * Ialpha and Ibeta are the two coordinates of time invariant vector. + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Clarke transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_clarke + * @{ + */ + + /** + * @brief Floating-point Inverse Clarke transform + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + */ + + + static __INLINE void arm_inv_clarke_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pIa, + float32_t * pIb) + { + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ + *pIb = -0.5 * Ialpha + (float32_t) 0.8660254039 *Ibeta; + + } + + /** + * @brief Inverse Clarke transform for Q31 version + * @param[in] Ialpha input two-phase orthogonal vector axis alpha + * @param[in] Ibeta input two-phase orthogonal vector axis beta + * @param[out] *pIa points to output three-phase coordinate a + * @param[out] *pIb points to output three-phase coordinate b + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the subtraction, hence there is no risk of overflow. + */ + + static __INLINE void arm_inv_clarke_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pIa, + q31_t * pIb) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + + /* Calculating pIa from Ialpha by equation pIa = Ialpha */ + *pIa = Ialpha; + + /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); + + /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); + + /* pIb is calculated by subtracting the products */ + *pIb = __QSUB(product2, product1); + + } + + /** + * @} end of inv_clarke group + */ + + /** + * @brief Converts the elements of the Q7 vector to Q15 vector. + * @param[in] *pSrc input pointer + * @param[out] *pDst output pointer + * @param[in] blockSize number of samples to process + * @return none. + */ + void arm_q7_to_q15( + q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + + + /** + * @ingroup groupController + */ + + /** + * @defgroup park Vector Park Transform + * + * Forward Park transform converts the input two-coordinate vector to flux and torque components. + * The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents + * from the stationary to the moving reference frame and control the spatial relationship between + * the stator vector current and rotor flux vector. + * If we consider the d axis aligned with the rotor flux, the diagram below shows the + * current vector and the relationship from the two reference frames: + * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkFormula.gif + * where Ialpha and Ibeta are the stator vector components, + * pId and pIq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup park + * @{ + */ + + /** + * @brief Floating-point Park transform + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * The function implements the forward Park transform. + * + */ + + static __INLINE void arm_park_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pId, + float32_t * pIq, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ + *pId = Ialpha * cosVal + Ibeta * sinVal; + + /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ + *pIq = -Ialpha * sinVal + Ibeta * cosVal; + + } + + /** + * @brief Park transform for Q31 version + * @param[in] Ialpha input two-phase vector coordinate alpha + * @param[in] Ibeta input two-phase vector coordinate beta + * @param[out] *pId points to output rotor reference frame d + * @param[out] *pIq points to output rotor reference frame q + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition and subtraction, hence there is no risk of overflow. + */ + + + static __INLINE void arm_park_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pId, + q31_t * pIq, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Ialpha * cosVal) */ + product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * sinVal) */ + product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Ialpha * sinVal) */ + product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Ibeta * cosVal) */ + product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); + + /* Calculate pId by adding the two intermediate products 1 and 2 */ + *pId = __QADD(product1, product2); + + /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ + *pIq = __QSUB(product4, product3); + } + + /** + * @} end of park group + */ + + /** + * @brief Converts the elements of the Q7 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q7_to_float( + q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupController + */ + + /** + * @defgroup inv_park Vector Inverse Park transform + * Inverse Park transform converts the input flux and torque components to two-coordinate vector. + * + * The function operates on a single sample of data and each call to the function returns the processed output. + * The library provides separate functions for Q31 and floating-point data types. + * \par Algorithm + * \image html parkInvFormula.gif + * where pIalpha and pIbeta are the stator vector components, + * Id and Iq are rotor vector components and cosVal and sinVal are the + * cosine and sine values of theta (rotor flux position). + * \par Fixed-Point Behavior + * Care must be taken when using the Q31 version of the Park transform. + * In particular, the overflow and saturation behavior of the accumulator used must be considered. + * Refer to the function specific documentation below for usage guidelines. + */ + + /** + * @addtogroup inv_park + * @{ + */ + + /** + * @brief Floating-point Inverse Park transform + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + */ + + static __INLINE void arm_inv_park_f32( + float32_t Id, + float32_t Iq, + float32_t * pIalpha, + float32_t * pIbeta, + float32_t sinVal, + float32_t cosVal) + { + /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ + *pIalpha = Id * cosVal - Iq * sinVal; + + /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ + *pIbeta = Id * sinVal + Iq * cosVal; + + } + + + /** + * @brief Inverse Park transform for Q31 version + * @param[in] Id input coordinate of rotor reference frame d + * @param[in] Iq input coordinate of rotor reference frame q + * @param[out] *pIalpha points to output two-phase orthogonal vector axis alpha + * @param[out] *pIbeta points to output two-phase orthogonal vector axis beta + * @param[in] sinVal sine value of rotation angle theta + * @param[in] cosVal cosine value of rotation angle theta + * @return none. + * + * Scaling and Overflow Behavior: + * \par + * The function is implemented using an internal 32-bit accumulator. + * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. + * There is saturation on the addition, hence there is no risk of overflow. + */ + + + static __INLINE void arm_inv_park_q31( + q31_t Id, + q31_t Iq, + q31_t * pIalpha, + q31_t * pIbeta, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ + + /* Intermediate product is calculated by (Id * cosVal) */ + product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); + + /* Intermediate product is calculated by (Iq * sinVal) */ + product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); + + + /* Intermediate product is calculated by (Id * sinVal) */ + product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); + + /* Intermediate product is calculated by (Iq * cosVal) */ + product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); + + /* Calculate pIalpha by using the two intermediate products 1 and 2 */ + *pIalpha = __QSUB(product1, product2); + + /* Calculate pIbeta by using the two intermediate products 3 and 4 */ + *pIbeta = __QADD(product4, product3); + + } + + /** + * @} end of Inverse park group + */ + + + /** + * @brief Converts the elements of the Q31 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_float( + q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup LinearInterpolate Linear Interpolation + * + * Linear interpolation is a method of curve fitting using linear polynomials. + * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line + * + * \par + * \image html LinearInterp.gif "Linear interpolation" + * + * \par + * A Linear Interpolate function calculates an output value(y), for the input(x) + * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) + * + * \par Algorithm: + *
+   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
+   *       where x0, x1 are nearest values of input x
+   *             y0, y1 are nearest values to output y
+   * 
+ * + * \par + * This set of functions implements Linear interpolation process + * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single + * sample of data and each call to the function returns a single processed value. + * S points to an instance of the Linear Interpolate function data structure. + * x is the input sample value. The functions returns the output value. + * + * \par + * if x is outside of the table boundary, Linear interpolation returns first value of the table + * if x is below input range and returns last value of table if x is above range. + */ + + /** + * @addtogroup LinearInterpolate + * @{ + */ + + /** + * @brief Process function for the floating-point Linear Interpolation Function. + * @param[in,out] *S is an instance of the floating-point Linear Interpolation structure + * @param[in] x input sample to process + * @return y processed output sample. + * + */ + + static __INLINE float32_t arm_linear_interp_f32( + arm_linear_interp_instance_f32 * S, + float32_t x) + { + + float32_t y; + float32_t x0, x1; /* Nearest input values */ + float32_t y0, y1; /* Nearest output values */ + float32_t xSpacing = S->xSpacing; /* spacing between input values */ + int32_t i; /* Index variable */ + float32_t *pYData = S->pYData; /* pointer to output table */ + + /* Calculation of index */ + i = (int32_t) ((x - S->x1) / xSpacing); + + if(i < 0) + { + /* Iniatilize output for below specified range as least output value of table */ + y = pYData[0]; + } + else if((uint32_t)i >= S->nValues) + { + /* Iniatilize output for above specified range as last output value of table */ + y = pYData[S->nValues - 1]; + } + else + { + /* Calculation of nearest input values */ + x0 = S->x1 + i * xSpacing; + x1 = S->x1 + (i + 1) * xSpacing; + + /* Read of nearest output values */ + y0 = pYData[i]; + y1 = pYData[i + 1]; + + /* Calculation of output */ + y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)); + + } + + /* returns output value */ + return (y); + } + + /** + * + * @brief Process function for the Q31 Linear Interpolation Function. + * @param[in] *pYData pointer to Q31 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q31_t arm_linear_interp_q31( + q31_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q31_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + + /* 20 bits for the fractional part */ + /* shift left by 11 to keep fract in 1.31 format */ + fract = (x & 0x000FFFFF) << 11; + + /* Read two nearest output values from the index in 1.31(q31) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 2.30 format */ + y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); + + /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ + y += ((q31_t) (((q63_t) y1 * fract) >> 32)); + + /* Convert y to 1.31 format */ + return (y << 1u); + + } + + } + + /** + * + * @brief Process function for the Q15 Linear Interpolation Function. + * @param[in] *pYData pointer to Q15 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + * + */ + + + static __INLINE q15_t arm_linear_interp_q15( + q15_t * pYData, + q31_t x, + uint32_t nValues) + { + q63_t y; /* output */ + q15_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + int32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + index = ((x & 0xFFF00000) >> 20u); + + if(index >= (int32_t)(nValues - 1)) + { + return (pYData[nValues - 1]); + } + else if(index < 0) + { + return (pYData[0]); + } + else + { + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract) and y is in 13.35 format */ + y = ((q63_t) y0 * (0xFFFFF - fract)); + + /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ + y += ((q63_t) y1 * (fract)); + + /* convert y to 1.15 format */ + return (y >> 20); + } + + + } + + /** + * + * @brief Process function for the Q7 Linear Interpolation Function. + * @param[in] *pYData pointer to Q7 Linear Interpolation table + * @param[in] x input sample to process + * @param[in] nValues number of table values + * @return y processed output sample. + * + * \par + * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. + * This function can support maximum of table size 2^12. + */ + + + static __INLINE q7_t arm_linear_interp_q7( + q7_t * pYData, + q31_t x, + uint32_t nValues) + { + q31_t y; /* output */ + q7_t y0, y1; /* Nearest output values */ + q31_t fract; /* fractional part */ + uint32_t index; /* Index to read nearest output values */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + if (x < 0) + { + return (pYData[0]); + } + index = (x >> 20) & 0xfff; + + + if(index >= (nValues - 1)) + { + return (pYData[nValues - 1]); + } + else + { + + /* 20 bits for the fractional part */ + /* fract is in 12.20 format */ + fract = (x & 0x000FFFFF); + + /* Read two nearest output values from the index and are in 1.7(q7) format */ + y0 = pYData[index]; + y1 = pYData[index + 1u]; + + /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ + y = ((y0 * (0xFFFFF - fract))); + + /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ + y += (y1 * fract); + + /* convert y to 1.7(q7) format */ + return (y >> 20u); + + } + + } + /** + * @} end of LinearInterpolate group + */ + + /** + * @brief Fast approximation to the trigonometric sine function for floating-point data. + * @param[in] x input value in radians. + * @return sin(x). + */ + + float32_t arm_sin_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q31_t arm_sin_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric sine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return sin(x). + */ + + q15_t arm_sin_q15( + q15_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for floating-point data. + * @param[in] x input value in radians. + * @return cos(x). + */ + + float32_t arm_cos_f32( + float32_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q31 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q31_t arm_cos_q31( + q31_t x); + + /** + * @brief Fast approximation to the trigonometric cosine function for Q15 data. + * @param[in] x Scaled input value in radians. + * @return cos(x). + */ + + q15_t arm_cos_q15( + q15_t x); + + + /** + * @ingroup groupFastMath + */ + + + /** + * @defgroup SQRT Square Root + * + * Computes the square root of a number. + * There are separate functions for Q15, Q31, and floating-point data types. + * The square root function is computed using the Newton-Raphson algorithm. + * This is an iterative algorithm of the form: + *
+   *      x1 = x0 - f(x0)/f'(x0)
+   * 
+ * where x1 is the current estimate, + * x0 is the previous estimate, and + * f'(x0) is the derivative of f() evaluated at x0. + * For the square root function, the algorithm reduces to: + *
+   *     x0 = in/2                         [initial guess]
+   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]
+   * 
+ */ + + + /** + * @addtogroup SQRT + * @{ + */ + + /** + * @brief Floating-point square root function. + * @param[in] in input value. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + + static __INLINE arm_status arm_sqrt_f32( + float32_t in, + float32_t * pOut) + { + if(in > 0) + { + +// #if __FPU_USED +#if (__FPU_USED == 1) && defined ( __CC_ARM ) + *pOut = __sqrtf(in); +#else + *pOut = sqrtf(in); +#endif + + return (ARM_MATH_SUCCESS); + } + else + { + *pOut = 0.0f; + return (ARM_MATH_ARGUMENT_ERROR); + } + + } + + + /** + * @brief Q31 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q31( + q31_t in, + q31_t * pOut); + + /** + * @brief Q15 square root function. + * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. + * @param[out] *pOut square root of input value. + * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if + * in is negative value and returns zero output for negative values. + */ + arm_status arm_sqrt_q15( + q15_t in, + q15_t * pOut); + + /** + * @} end of SQRT group + */ + + + + + + + /** + * @brief floating-point Circular write function. + */ + + static __INLINE void arm_circularWrite_f32( + int32_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const int32_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief floating-point Circular Read function. + */ + static __INLINE void arm_circularRead_f32( + int32_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + int32_t * dst, + int32_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (int32_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + /** + * @brief Q15 Circular write function. + */ + + static __INLINE void arm_circularWrite_q15( + q15_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q15_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q15 Circular Read function. + */ + static __INLINE void arm_circularRead_q15( + q15_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q15_t * dst, + q15_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q15_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update wOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Q7 Circular write function. + */ + + static __INLINE void arm_circularWrite_q7( + q7_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q7_t * src, + int32_t srcInc, + uint32_t blockSize) + { + uint32_t i = 0u; + int32_t wOffset; + + /* Copy the value of Index pointer that points + * to the current location where the input samples to be copied */ + wOffset = *writeOffset; + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; + + /* Update the input pointer */ + src += srcInc; + + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if(wOffset >= L) + wOffset -= L; + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *writeOffset = wOffset; + } + + + + /** + * @brief Q7 Circular Read function. + */ + static __INLINE void arm_circularRead_q7( + q7_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q7_t * dst, + q7_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { + uint32_t i = 0; + int32_t rOffset, dst_end; + + /* Copy the value of Index pointer that points + * to the current location from where the input samples to be read */ + rOffset = *readOffset; + + dst_end = (int32_t) (dst_base + dst_length); + + /* Loop over the blockSize */ + i = blockSize; + + while(i > 0u) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; + + /* Update the input pointer */ + dst += dstInc; + + if(dst == (q7_t *) dst_end) + { + dst = dst_base; + } + + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; + + if(rOffset >= L) + { + rOffset -= L; + } + + /* Decrement the loop counter */ + i--; + } + + /* Update the index pointer */ + *readOffset = rOffset; + } + + + /** + * @brief Sum of the squares of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q31( + q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q15( + q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult); + + /** + * @brief Sum of the squares of the elements of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_power_q7( + q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_mean_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); + + /** + * @brief Mean value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Mean value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Mean value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + void arm_mean_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Variance of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Variance of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_var_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Root Mean Square of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Root Mean Square of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_rms_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Standard deviation of the elements of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); + + /** + * @brief Standard deviation of the elements of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output value. + * @return none. + */ + + void arm_std_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); + + /** + * @brief Floating-point complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_f32( + float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q31( + q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex magnitude + * @param[in] *pSrc points to the complex input vector + * @param[out] *pDst points to the real output vector + * @param[in] numSamples number of complex samples in the input vector + * @return none. + */ + + void arm_cmplx_mag_q15( + q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q15 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q15( + q15_t * pSrcA, + q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult); + + /** + * @brief Q31 complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_q31( + q31_t * pSrcA, + q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult); + + /** + * @brief Floating-point complex dot product + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[in] numSamples number of complex samples in each vector + * @param[out] *realResult real part of the result returned here + * @param[out] *imagResult imaginary part of the result returned here + * @return none. + */ + + void arm_cmplx_dot_prod_f32( + float32_t * pSrcA, + float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult); + + /** + * @brief Q15 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q15( + q15_t * pSrcCmplx, + q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_q31( + q31_t * pSrcCmplx, + q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-real multiplication + * @param[in] *pSrcCmplx points to the complex input vector + * @param[in] *pSrcReal points to the real input vector + * @param[out] *pCmplxDst points to the complex output vector + * @param[in] numSamples number of samples in each vector + * @return none. + */ + + void arm_cmplx_mult_real_f32( + float32_t * pSrcCmplx, + float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples); + + /** + * @brief Minimum value of a Q7 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *result is output pointer + * @param[in] index is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * result, + uint32_t * index); + + /** + * @brief Minimum value of a Q15 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[in] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a Q31 vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + void arm_min_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + + /** + * @brief Minimum value of a floating-point vector. + * @param[in] *pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] *pResult is output pointer + * @param[out] *pIndex is the array index of the minimum value in the input buffer. + * @return none. + */ + + void arm_min_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q7 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q7( + q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q15 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q15( + q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); + +/** + * @brief Maximum value of a floating-point vector. + * @param[in] *pSrc points to the input buffer + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + + void arm_max_f32( + float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); + + /** + * @brief Q15 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q15( + q15_t * pSrcA, + q15_t * pSrcB, + q15_t * pDst, + uint32_t numSamples); + + /** + * @brief Q31 complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_q31( + q31_t * pSrcA, + q31_t * pSrcB, + q31_t * pDst, + uint32_t numSamples); + + /** + * @brief Floating-point complex-by-complex multiplication + * @param[in] *pSrcA points to the first input vector + * @param[in] *pSrcB points to the second input vector + * @param[out] *pDst points to the output vector + * @param[in] numSamples number of complex samples in each vector + * @return none. + */ + + void arm_cmplx_mult_cmplx_f32( + float32_t * pSrcA, + float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples); + + /** + * @brief Converts the elements of the floating-point vector to Q31 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + * @return none. + */ + void arm_float_to_q31( + float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q15 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q15( + float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none + */ + void arm_float_to_q7( + float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q31 vector to Q15 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q15( + q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q31 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q31_to_q7( + q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + /** + * @brief Converts the elements of the Q15 vector to floating-point vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_float( + q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q31 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q31( + q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + + + /** + * @brief Converts the elements of the Q15 vector to Q7 vector. + * @param[in] *pSrc is input pointer + * @param[out] *pDst is output pointer + * @param[in] blockSize is the number of samples to process + * @return none. + */ + void arm_q15_to_q7( + q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + /** + * @ingroup groupInterpolation + */ + + /** + * @defgroup BilinearInterpolate Bilinear Interpolation + * + * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. + * The underlying function f(x, y) is sampled on a regular grid and the interpolation process + * determines values between the grid points. + * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. + * Bilinear interpolation is often used in image processing to rescale images. + * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. + * + * Algorithm + * \par + * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. + * For floating-point, the instance structure is defined as: + *
+   *   typedef struct
+   *   {
+   *     uint16_t numRows;
+   *     uint16_t numCols;
+   *     float32_t *pData;
+   * } arm_bilinear_interp_instance_f32;
+   * 
+ * + * \par + * where numRows specifies the number of rows in the table; + * numCols specifies the number of columns in the table; + * and pData points to an array of size numRows*numCols values. + * The data table pTable is organized in row order and the supplied data values fall on integer indexes. + * That is, table element (x,y) is located at pTable[x + y*numCols] where x and y are integers. + * + * \par + * Let (x, y) specify the desired interpolation point. Then define: + *
+   *     XF = floor(x)
+   *     YF = floor(y)
+   * 
+ * \par + * The interpolated output point is computed as: + *
+   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
+   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))
+   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)
+   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)
+   * 
+ * Note that the coordinates (x, y) contain integer and fractional components. + * The integer components specify which portion of the table to use while the + * fractional components control the interpolation processor. + * + * \par + * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. + */ + + /** + * @addtogroup BilinearInterpolate + * @{ + */ + + /** + * + * @brief Floating-point bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate. + * @param[in] Y interpolation coordinate. + * @return out interpolated value. + */ + + + static __INLINE float32_t arm_bilinear_interp_f32( + const arm_bilinear_interp_instance_f32 * S, + float32_t X, + float32_t Y) + { + float32_t out; + float32_t f00, f01, f10, f11; + float32_t *pData = S->pData; + int32_t xIndex, yIndex, index; + float32_t xdiff, ydiff; + float32_t b1, b2, b3, b4; + + xIndex = (int32_t) X; + yIndex = (int32_t) Y; + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 + || yIndex > (S->numCols - 1)) + { + return (0); + } + + /* Calculation of index for two nearest points in X-direction */ + index = (xIndex - 1) + (yIndex - 1) * S->numCols; + + + /* Read two nearest points in X-direction */ + f00 = pData[index]; + f01 = pData[index + 1]; + + /* Calculation of index for two nearest points in Y-direction */ + index = (xIndex - 1) + (yIndex) * S->numCols; + + + /* Read two nearest points in Y-direction */ + f10 = pData[index]; + f11 = pData[index + 1]; + + /* Calculation of intermediate values */ + b1 = f00; + b2 = f01 - f00; + b3 = f10 - f00; + b4 = f00 - f01 - f10 + f11; + + /* Calculation of fractional part in X */ + xdiff = X - xIndex; + + /* Calculation of fractional part in Y */ + ydiff = Y - yIndex; + + /* Calculation of bi-linear interpolated output */ + out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; + + /* return to application */ + return (out); + + } + + /** + * + * @brief Q31 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q31_t arm_bilinear_interp_q31( + arm_bilinear_interp_instance_q31 * S, + q31_t X, + q31_t Y) + { + q31_t out; /* Temporary output */ + q31_t acc = 0; /* output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q31_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q31_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20u); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20u); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* shift left xfract by 11 to keep 1.31 format */ + xfract = (X & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + /* 20 bits for the fractional part */ + /* shift left yfract by 11 to keep 1.31 format */ + yfract = (Y & 0x000FFFFF) << 11u; + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ + out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); + acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); + + /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); + + /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ + out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); + acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); + + /* Convert acc to 1.31(q31) format */ + return (acc << 2u); + + } + + /** + * @brief Q15 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q15_t arm_bilinear_interp_q15( + arm_bilinear_interp_instance_q15 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q15_t x1, x2, y1, y2; /* Nearest output values */ + q31_t xfract, yfract; /* X, Y fractional parts */ + int32_t rI, cI; /* Row and column indices */ + q15_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ + + /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ + /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ + out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); + acc = ((q63_t) out * (0xFFFFF - yfract)); + + /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); + acc += ((q63_t) out * (xfract)); + + /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ + out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); + acc += ((q63_t) out * (yfract)); + + /* acc is in 13.51 format and down shift acc by 36 times */ + /* Convert out to 1.15 format */ + return (acc >> 36); + + } + + /** + * @brief Q7 bilinear interpolation. + * @param[in,out] *S points to an instance of the interpolation structure. + * @param[in] X interpolation coordinate in 12.20 format. + * @param[in] Y interpolation coordinate in 12.20 format. + * @return out interpolated value. + */ + + static __INLINE q7_t arm_bilinear_interp_q7( + arm_bilinear_interp_instance_q7 * S, + q31_t X, + q31_t Y) + { + q63_t acc = 0; /* output */ + q31_t out; /* Temporary output */ + q31_t xfract, yfract; /* X, Y fractional parts */ + q7_t x1, x2, y1, y2; /* Nearest output values */ + int32_t rI, cI; /* Row and column indices */ + q7_t *pYData = S->pData; /* pointer to output table values */ + uint32_t nCols = S->numCols; /* num of rows */ + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + rI = ((X & 0xFFF00000) >> 20); + + /* Input is in 12.20 format */ + /* 12 bits for the table index */ + /* Index value calculation */ + cI = ((Y & 0xFFF00000) >> 20); + + /* Care taken for table outside boundary */ + /* Returns zero output when values are outside table boundary */ + if(rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) + { + return (0); + } + + /* 20 bits for the fractional part */ + /* xfract should be in 12.20 format */ + xfract = (X & 0x000FFFFF); + + /* Read two nearest output values from the index */ + x1 = pYData[(rI) + nCols * (cI)]; + x2 = pYData[(rI) + nCols * (cI) + 1u]; + + + /* 20 bits for the fractional part */ + /* yfract should be in 12.20 format */ + yfract = (Y & 0x000FFFFF); + + /* Read two nearest output values from the index */ + y1 = pYData[(rI) + nCols * (cI + 1)]; + y2 = pYData[(rI) + nCols * (cI + 1) + 1u]; + + /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ + out = ((x1 * (0xFFFFF - xfract))); + acc = (((q63_t) out * (0xFFFFF - yfract))); + + /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ + out = ((x2 * (0xFFFFF - yfract))); + acc += (((q63_t) out * (xfract))); + + /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y1 * (0xFFFFF - xfract))); + acc += (((q63_t) out * (yfract))); + + /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ + out = ((y2 * (yfract))); + acc += (((q63_t) out * (xfract))); + + /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ + return (acc >> 40); + + } + + /** + * @} end of BilinearInterpolate group + */ + + +//SMMLAR +#define multAcc_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) + +//SMMLSR +#define multSub_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) + +//SMMULR +#define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) + +//SMMLA +#define multAcc_32x32_keep32(a, x, y) \ + a += (q31_t) (((q63_t) x * y) >> 32) + +//SMMLS +#define multSub_32x32_keep32(a, x, y) \ + a -= (q31_t) (((q63_t) x * y) >> 32) + +//SMMUL +#define mult_32x32_keep32(a, x, y) \ + a = (q31_t) (((q63_t) x * y ) >> 32) + + +#if defined ( __CC_ARM ) //Keil + +//Enter low optimization region - place directly above function definition + #ifdef ARM_MATH_CM4 + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("push") \ + _Pragma ("O1") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + +//Exit low optimization region - place directly after end of function definition + #ifdef ARM_MATH_CM4 + #define LOW_OPTIMIZATION_EXIT \ + _Pragma ("pop") + #else + #define LOW_OPTIMIZATION_EXIT + #endif + +//Enter low optimization region - place directly above function definition + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + +//Exit low optimization region - place directly after end of function definition + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__ICCARM__) //IAR + +//Enter low optimization region - place directly above function definition + #ifdef ARM_MATH_CM4 + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + +//Exit low optimization region - place directly after end of function definition + #define LOW_OPTIMIZATION_EXIT + +//Enter low optimization region - place directly above function definition + #ifdef ARM_MATH_CM4 + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #endif + +//Exit low optimization region - place directly after end of function definition + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__GNUC__) + + #define LOW_OPTIMIZATION_ENTER __attribute__(( optimize("-O1") )) + + #define LOW_OPTIMIZATION_EXIT + + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined(__CSMC__) // Cosmic + +#define LOW_OPTIMIZATION_ENTER +#define LOW_OPTIMIZATION_EXIT +#define IAR_ONLY_LOW_OPTIMIZATION_ENTER +#define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ARM_MATH_H */ + +/** + * + * End of file. + */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0.h new file mode 100644 index 0000000000..5186cb4838 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0.h @@ -0,0 +1,711 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M0 + @{ + */ + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000 + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0plus.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0plus.h new file mode 100644 index 0000000000..17e43984fc --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm0plus.h @@ -0,0 +1,822 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex-M0+ + @{ + */ + +/* CMSIS CM0P definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16) | \ + __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x00) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000 + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0 + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if (__VTOR_PRESENT == 1) + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if (__VTOR_PRESENT == 1) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M0+ Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm3.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm3.h new file mode 100644 index 0000000000..e1357c6735 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm3.h @@ -0,0 +1,1650 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M3 + @{ + */ + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x03) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200 + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if (__CM3_REV < 0x0201) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if ((defined __CM3_REV) && (__CM3_REV >= 0x200)) + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm4.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm4.h new file mode 100644 index 0000000000..bb6be1305d --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm4.h @@ -0,0 +1,1802 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M4 + @{ + */ + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x04) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ +#include /* Compiler specific SIMD Intrinsics */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000 + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0 + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9 /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8 /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1 /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register */ +#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register */ +#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register */ +#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ +/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ + NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm7.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm7.h new file mode 100644 index 0000000000..242540f8b1 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cm7.h @@ -0,0 +1,2221 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 01. September 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup Cortex_M7 + @{ + */ + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_M (0x07) /*!< Cortex-M Core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI_VFP_SUPPORT__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #if (__FPU_PRESENT == 1) + #define __FPU_USED 1 + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0 + #endif + #else + #define __FPU_USED 0 + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ +#include /* Compiler specific SIMD Intrinsics */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000 + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0 + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0 + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0 + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0 + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x07) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x07) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHPR[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t ID_PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t ID_MFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ID_ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1]; + __I uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __I uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __I uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IO uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93]; + __O uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15]; + __I uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __I uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 1 */ + uint32_t RESERVED5[1]; + __O uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1]; + __O uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __O uint32_t DCIMVAU; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __O uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __O uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __O uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __O uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __O uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __O uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6]; + __IO uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IO uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IO uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IO uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IO uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1]; + __IO uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18 /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17 /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16 /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/* Cache Level ID register */ +#define SCB_CLIDR_LOUU_Pos 27 /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24 /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_FORMAT_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* Cache Type register */ +#define SCB_CTR_FORMAT_Pos 29 /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24 /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20 /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16 /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0 /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL << SCB_CTR_IMINLINE_Pos) /*!< SCB CTR: ImInLine Mask */ + +/* Cache Size ID Register */ +#define SCB_CCSIDR_WT_Pos 31 /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (7UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30 /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (7UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29 /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (7UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28 /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (7UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13 /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3 /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0 /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL << SCB_CCSIDR_LINESIZE_Pos) /*!< SCB CCSIDR: LineSize Mask */ + +/* Cache Size Selection Register */ +#define SCB_CSSELR_LEVEL_Pos 0 /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (1UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0 /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL << SCB_CSSELR_IND_Pos) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register */ +#define SCB_STIR_INTID_Pos 0 /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL << SCB_STIR_INTID_Pos) /*!< SCB STIR: INTID Mask */ + +/* Instruction Tightly-Coupled Memory Control Register*/ +#define SCB_ITCMCR_SZ_Pos 3 /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2 /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1FFUL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1 /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1FFUL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0 /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1FFUL << SCB_ITCMCR_EN_Pos) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Registers */ +#define SCB_DTCMCR_SZ_Pos 3 /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2 /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1 /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0 /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL << SCB_DTCMCR_EN_Pos) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register */ +#define SCB_AHBPCR_SZ_Pos 1 /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0 /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL << SCB_AHBPCR_EN_Pos) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register */ +#define SCB_CACR_FORCEWT_Pos 2 /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1 /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0 /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL << SCB_CACR_SIWT_Pos) /*!< SCB CACR: SIWT Mask */ + +/* AHBS control register */ +#define SCB_AHBSCR_INITCOUNT_Pos 11 /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2 /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0 /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL << SCB_AHBPCR_CTL_Pos) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register */ +#define SCB_ABFSR_AXIMTYPE_Pos 8 /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4 /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3 /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2 /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1 /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0 /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL << SCB_ABFSR_ITCM_Pos) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12 /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11 /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10 /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2 /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if (__FPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __IO uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IO uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IO uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __I uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __I uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __I uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register */ +#define FPU_FPCCR_ASPEN_Pos 31 /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30 /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8 /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6 /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5 /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4 /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3 /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1 /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0 /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL << FPU_FPCCR_LSPACT_Pos) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register */ +#define FPU_FPCAR_ADDRESS_Pos 3 /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register */ +#define FPU_FPDSCR_AHP_Pos 26 /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25 /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24 /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22 /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28 /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24 /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20 /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16 /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12 /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8 /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4 /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0 /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL << FPU_MVFR0_A_SIMD_registers_Pos) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28 /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24 /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4 /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0 /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL << FPU_MVFR1_FtZ_mode_Pos) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 */ + +/*@} end of group CMSIS_FPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M4 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#if (__FPU_PRESENT == 1) + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ +/* NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); enable interrupt */ + NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHPR[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHPR[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## Cache functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) +#define CCSIDR_LSSHIFT(x) (((x) & SCB_CCSIDR_LINESIZE_Msk ) >> SCB_CCSIDR_LINESIZE_Pos ) + + +/** \brief Enable I-Cache + + The function turns on I-Cache + */ +__STATIC_INLINE void SCB_EnableICache(void) +{ + #if (__ICACHE_PRESENT == 1) + __DSB(); + __ISB(); + SCB->ICIALLU = 0; // invalidate I-Cache + SCB->CCR |= SCB_CCR_IC_Msk; // enable I-Cache + __DSB(); + __ISB(); + #endif +} + + +/** \brief Disable I-Cache + + The function turns off I-Cache + */ +__STATIC_INLINE void SCB_DisableICache(void) +{ + #if (__ICACHE_PRESENT == 1) + __DSB(); + __ISB(); + SCB->CCR &= ~SCB_CCR_IC_Msk; // disable I-Cache + SCB->ICIALLU = 0; // invalidate I-Cache + __DSB(); + __ISB(); + #endif +} + + +/** \brief Invalidate I-Cache + + The function invalidates I-Cache + */ +__STATIC_INLINE void SCB_InvalidateICache(void) +{ + #if (__ICACHE_PRESENT == 1) + __DSB(); + __ISB(); + SCB->ICIALLU = 0; + __DSB(); + __ISB(); + #endif +} + + +/** \brief Enable D-Cache + + The function turns on D-Cache + */ +__STATIC_INLINE void SCB_EnableDCache(void) +{ + #if (__DCACHE_PRESENT == 1) + uint32_t ccsidr, sshift, wshift, sw; + uint32_t sets, ways; + + ccsidr = SCB->CCSIDR; + sets = CCSIDR_SETS(ccsidr); + sshift = CCSIDR_LSSHIFT(ccsidr) + 4; + ways = CCSIDR_WAYS(ccsidr); + wshift = __CLZ(ways) & 0x1f; + + __DSB(); + + do { // invalidate D-Cache + int32_t tmpways = ways; + do { + sw = ((tmpways << wshift) | (sets << sshift)); + SCB->DCISW = sw; + } while(tmpways--); + } while(sets--); + __DSB(); + + SCB->CCR |= SCB_CCR_DC_Msk; // enable D-Cache + + __DSB(); + __ISB(); + #endif +} + + +/** \brief Disable D-Cache + + The function turns off D-Cache + */ +__STATIC_INLINE void SCB_DisableDCache(void) +{ + #if (__DCACHE_PRESENT == 1) + uint32_t ccsidr, sshift, wshift, sw; + uint32_t sets, ways; + + ccsidr = SCB->CCSIDR; + sets = CCSIDR_SETS(ccsidr); + sshift = CCSIDR_LSSHIFT(ccsidr) + 4; + ways = CCSIDR_WAYS(ccsidr); + wshift = __CLZ(ways) & 0x1f; + + __DSB(); + + SCB->CCR &= ~SCB_CCR_DC_Msk; // disable D-Cache + + do { // clean & invalidate D-Cache + int32_t tmpways = ways; + do { + sw = ((tmpways << wshift) | (sets << sshift)); + SCB->DCCISW = sw; + } while(tmpways--); + } while(sets--); + + + __DSB(); + __ISB(); + #endif +} + + +/** \brief Invalidate D-Cache + + The function invalidates D-Cache + */ +__STATIC_INLINE void SCB_InvalidateDCache(void) +{ + #if (__DCACHE_PRESENT == 1) + uint32_t ccsidr, sshift, wshift, sw; + uint32_t sets, ways; + + ccsidr = SCB->CCSIDR; + sets = CCSIDR_SETS(ccsidr); + sshift = CCSIDR_LSSHIFT(ccsidr) + 4; + ways = CCSIDR_WAYS(ccsidr); + wshift = __CLZ(ways) & 0x1f; + + __DSB(); + + do { // invalidate D-Cache + int32_t tmpways = ways; + do { + sw = ((tmpways << wshift) | (sets << sshift)); + SCB->DCISW = sw; + } while(tmpways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** \brief Clean D-Cache + + The function cleans D-Cache + */ +__STATIC_INLINE void SCB_CleanDCache(void) +{ + #if (__DCACHE_PRESENT == 1) + uint32_t ccsidr, sshift, wshift, sw; + uint32_t sets, ways; + + ccsidr = SCB->CCSIDR; + sets = CCSIDR_SETS(ccsidr); + sshift = CCSIDR_LSSHIFT(ccsidr) + 4; + ways = CCSIDR_WAYS(ccsidr); + wshift = __CLZ(ways) & 0x1f; + + __DSB(); + + do { // clean D-Cache + int32_t tmpways = ways; + do { + sw = ((tmpways << wshift) | (sets << sshift)); + SCB->DCCSW = sw; + } while(tmpways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/** \brief Clean & Invalidate D-Cache + + The function cleans and Invalidates D-Cache + */ +__STATIC_INLINE void SCB_CleanInvalidateDCache(void) +{ + #if (__DCACHE_PRESENT == 1) + uint32_t ccsidr, sshift, wshift, sw; + uint32_t sets, ways; + + ccsidr = SCB->CCSIDR; + sets = CCSIDR_SETS(ccsidr); + sshift = CCSIDR_LSSHIFT(ccsidr) + 4; + ways = CCSIDR_WAYS(ccsidr); + wshift = __CLZ(ways) & 0x1f; + + __DSB(); + + do { // clean & invalidate D-Cache + int32_t tmpways = ways; + do { + sw = ((tmpways << wshift) | (sets << sshift)); + SCB->DCCISW = sw; + } while(tmpways--); + } while(sets--); + + __DSB(); + __ISB(); + #endif +} + + +/*@} end of CMSIS_Core_CacheFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmFunc.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmFunc.h new file mode 100644 index 0000000000..01089f1333 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmFunc.h @@ -0,0 +1,637 @@ +/**************************************************************************//** + * @file core_cmFunc.h + * @brief CMSIS Cortex-M Core Function Access Header File + * @version V4.00 + * @date 28. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CORE_CMFUNC_H +#define __CORE_CMFUNC_H + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + +/* intrinsic void __enable_irq(); */ +/* intrinsic void __disable_irq(); */ + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xff); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1); +} + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#if (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#endif +} + +#endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */ + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/** \brief Enable IRQ Interrupts + + This function enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** \brief Disable IRQ Interrupts + + This function disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** \brief Get Control Register + + This function returns the content of the Control Register. + + \return Control Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +/** \brief Set Control Register + + This function writes the given value to the Control Register. + + \param [in] control Control Register value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +/** \brief Get IPSR Register + + This function returns the content of the IPSR Register. + + \return IPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get APSR Register + + This function returns the content of the APSR Register. + + \return APSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get xPSR Register + + This function returns the content of the xPSR Register. + + \return xPSR Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** \brief Get Process Stack Pointer + + This function returns the current value of the Process Stack Pointer (PSP). + + \return PSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, psp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Process Stack Pointer + + This function assigns the given value to the Process Stack Pointer (PSP). + + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); +} + + +/** \brief Get Main Stack Pointer + + This function returns the current value of the Main Stack Pointer (MSP). + + \return MSP Register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t result; + + __ASM volatile ("MRS %0, msp\n" : "=r" (result) ); + return(result); +} + + +/** \brief Set Main Stack Pointer + + This function assigns the given value to the Main Stack Pointer (MSP). + + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp"); +} + + +/** \brief Get Priority Mask + + This function returns the current state of the priority mask bit from the Priority Mask Register. + + \return Priority Mask value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Priority Mask + + This function assigns the given value to the Priority Mask Register. + + \param [in] priMask Priority Mask + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__CORTEX_M >= 0x03) + +/** \brief Enable FIQ + + This function enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** \brief Disable FIQ + + This function disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** \brief Get Base Priority + + This function returns the current value of the Base Priority register. + + \return Base Priority register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_max" : "=r" (result) ); + return(result); +} + + +/** \brief Set Base Priority + + This function assigns the given value to the Base Priority register. + + \param [in] basePri Base Priority value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory"); +} + + +/** \brief Get Fault Mask + + This function returns the current value of the Fault Mask register. + + \return Fault Mask register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +/** \brief Set Fault Mask + + This function assigns the given value to the Fault Mask register. + + \param [in] faultMask Fault Mask value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + +#endif /* (__CORTEX_M >= 0x03) */ + + +#if (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) + +/** \brief Get FPSCR + + This function returns the current value of the Floating Point Status/Control register. + + \return Floating Point Status/Control register value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + uint32_t result; + + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + __ASM volatile (""); + return(result); +#else + return(0); +#endif +} + + +/** \brief Set FPSCR + + This function assigns the given value to the Floating Point Status/Control register. + + \param [in] fpscr Floating Point Status/Control value to set + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + /* Empty asm statement works as a scheduling barrier */ + __ASM volatile (""); + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc"); + __ASM volatile (""); +#endif +} + +#endif /* (__CORTEX_M == 0x04) || (__CORTEX_M == 0x07) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ +#include + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + +#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ +/* Cosmic specific functions */ +#include + +#endif + +/*@} end of CMSIS_Core_RegAccFunctions */ + +#endif /* __CORE_CMFUNC_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmInstr.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmInstr.h new file mode 100644 index 0000000000..d14110b2ab --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmInstr.h @@ -0,0 +1,880 @@ +/**************************************************************************//** + * @file core_cmInstr.h + * @brief CMSIS Cortex-M Core Instruction Access Header File + * @version V4.00 + * @date 28. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#ifndef __CORE_CMINSTR_H +#define __CORE_CMINSTR_H + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +#define __ISB() __isb(0xF) + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __dsb(0xF) + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __rbit + + +/** \brief LDR Exclusive (8 bit) + + This function executes a exclusive LDR instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) + + +/** \brief LDR Exclusive (16 bit) + + This function executes a exclusive LDR instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) + + +/** \brief LDR Exclusive (32 bit) + + This function executes a exclusive LDR instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) + + +/** \brief STR Exclusive (8 bit) + + This function executes a exclusive STR instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (16 bit) + + This function executes a exclusive STR instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH(value, ptr) __strex(value, ptr) + + +/** \brief STR Exclusive (32 bit) + + This function executes a exclusive STR instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW(value, ptr) __strex(value, ptr) + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +#define __CLREX __clrex + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +/** \brief Rotate Right with Extend (32 bit) + + This function moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. + + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** \brief LDRT Unprivileged (8 bit) + + This function executes a Unprivileged LDRT instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** \brief LDRT Unprivileged (16 bit) + + This function executes a Unprivileged LDRT instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** \brief LDRT Unprivileged (32 bit) + + This function executes a Unprivileged LDRT instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** \brief STRT Unprivileged (8 bit) + + This function executes a Unprivileged STRT instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** \brief STRT Unprivileged (16 bit) + + This function executes a Unprivileged STRT instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** \brief STRT Unprivileged (32 bit) + + This function executes a Unprivileged STRT instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constrant "l" + * Otherwise, use general registers, specified by constrant "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** \brief No Operation + + No Operation does nothing. This instruction can be used for code alignment purposes. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void) +{ + __ASM volatile ("nop"); +} + + +/** \brief Wait For Interrupt + + Wait For Interrupt is a hint instruction that suspends execution + until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void) +{ + __ASM volatile ("wfi"); +} + + +/** \brief Wait For Event + + Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void) +{ + __ASM volatile ("wfe"); +} + + +/** \brief Send Event + + Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void) +{ + __ASM volatile ("sev"); +} + + +/** \brief Instruction Synchronization Barrier + + Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or + memory, after the instruction has been completed. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void) +{ + __ASM volatile ("isb"); +} + + +/** \brief Data Synchronization Barrier + + This function acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void) +{ + __ASM volatile ("dsb"); +} + + +/** \brief Data Memory Barrier + + This function ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void) +{ + __ASM volatile ("dmb"); +} + + +/** \brief Reverse byte order (32 bit) + + This function reverses the byte order in integer value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Reverse byte order (16 bit) + + This function reverses the byte order in two unsigned short values. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** \brief Reverse byte order in signed short value + + This function reverses the byte order in a signed short value with sign extension to integer. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (short)__builtin_bswap16(value); +#else + uint32_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +#endif +} + + +/** \brief Rotate Right in unsigned value (32 bit) + + This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + + \param [in] value Value to rotate + \param [in] value Number of Bits to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + return (op1 >> op2) | (op1 << (32 - op2)); +} + + +/** \brief Breakpoint + + This function causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +#if (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) + +/** \brief Reverse bit order of value + + This function reverses the bit order of the given value. + + \param [in] value Value to reverse + \return Reversed value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); + return(result); +} + + +/** \brief LDR Exclusive (8 bit) + + This function executes a exclusive LDR instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDR Exclusive (16 bit) + + This function executes a exclusive LDR instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDR Exclusive (32 bit) + + This function executes a exclusive LDR instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** \brief STR Exclusive (8 bit) + + This function executes a exclusive STR instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** \brief STR Exclusive (16 bit) + + This function executes a exclusive STR instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** \brief STR Exclusive (32 bit) + + This function executes a exclusive STR instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** \brief Remove the exclusive lock + + This function removes the exclusive lock which is created by LDREX. + + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** \brief Signed Saturate + + This function saturates a signed value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Unsigned Saturate + + This function saturates an unsigned value. + + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** \brief Count leading zeros + + This function counts the number of leading zeros of a data value. + + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief Rotate Right with Extend (32 bit) + + This function moves each bit of a bitstring right by one bit. The carry input is shifted in at the left end of the bitstring. + + \param [in] value Value to rotate + \return Rotated value + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** \brief LDRT Unprivileged (8 bit) + + This function executes a Unprivileged LDRT instruction for 8 bit value. + + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDRT Unprivileged (16 bit) + + This function executes a Unprivileged LDRT instruction for 16 bit values. + + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** \brief LDRT Unprivileged (32 bit) + + This function executes a Unprivileged LDRT instruction for 32 bit values. + + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** \brief STRT Unprivileged (8 bit) + + This function executes a Unprivileged STRT instruction for 8 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** \brief STRT Unprivileged (16 bit) + + This function executes a Unprivileged STRT instruction for 16 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) ); +} + + +/** \brief STRT Unprivileged (32 bit) + + This function executes a Unprivileged STRT instruction for 32 bit values. + + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__attribute__( ( always_inline ) ) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*addr) : "r" (value) ); +} + +#endif /* (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300) */ + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ +#include + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ +/* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + +#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ +/* Cosmic specific functions */ +#include + +#endif + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + +#endif /* __CORE_CMINSTR_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmSimd.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmSimd.h new file mode 100644 index 0000000000..ee58eee56d --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_cmSimd.h @@ -0,0 +1,697 @@ +/**************************************************************************//** + * @file core_cmSimd.h + * @brief CMSIS Cortex-M SIMD Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CMSIMD_H +#define __CORE_CMSIMD_H + +#ifdef __cplusplus + extern "C" { +#endif + + +/******************************************************************************* + * Hardware Abstraction Layer + ******************************************************************************/ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32) ) >> 32)) + + +#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/ +/* GNU gcc specific functions */ +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ // Little endian + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else // Big endian + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ // Little endian + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else // Big endian + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ // Little endian + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else // Big endian + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ // Little endian + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else // Big endian + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + + +#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/ +/* IAR iccarm specific functions */ +#include + + +#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/ +/* TI CCS specific functions */ +#include + + +#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/ +/* TASKING carm specific functions */ +/* not yet supported */ + + +#elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/ +/* Cosmic specific functions */ +#include + +#endif + +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CMSIMD_H */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc000.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc000.h new file mode 100644 index 0000000000..5d0219c89f --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc000.h @@ -0,0 +1,842 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup SC000 + @{ + */ + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (000) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000 + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31]; + __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31]; + __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31]; + __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31]; + uint32_t RESERVED4[64]; + __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1]; + __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154]; + __IO uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/* SCB Security Features Register Definitions */ +#define SCB_SFCR_UNIBRTIMING_Pos 0 /*!< SCB SFCR: UNIBRTIMING Position */ +#define SCB_SFCR_UNIBRTIMING_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SFCR: UNIBRTIMING Mask */ + +#define SCB_SFCR_SECKEY_Pos 16 /*!< SCB SFCR: SECKEY Position */ +#define SCB_SFCR_SECKEY_Msk (0xFFFFUL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SFCR: SECKEY Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2]; + __IO uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0 /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL << SCnSCB_ACTLR_DISMCYCINT_Pos) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) + are only accessible over DAP and not via processor. Therefore + they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of SC000 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/* Interrupt Priorities are WORD accessible only under ARMv6M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 ) +#define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) ) +#define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) ) + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } + else { + NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) | + (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); } +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */ + else { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc300.h b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc300.h new file mode 100644 index 0000000000..b6f6e8b5f2 --- /dev/null +++ b/bsp/mm32l07x/Libraries/CMSIS/IAR_CORE/core_sc300.h @@ -0,0 +1,1630 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V4.00 + * @date 22. August 2014 + * + * @note + * + ******************************************************************************/ +/* Copyright (c) 2009 - 2014 ARM LIMITED + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + 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 COPYRIGHT HOLDERS AND CONTRIBUTORS 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. + ---------------------------------------------------------------------------*/ + + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#ifdef __cplusplus + extern "C" { +#endif + +/** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** \ingroup SC3000 + @{ + */ + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (0x04) /*!< [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (0x00) /*!< [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */ + +#define __CORTEX_SC (300) /*!< Cortex secure core */ + + +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + #define __STATIC_INLINE static __inline + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */ + #define __STATIC_INLINE static inline + +#elif defined ( __TMS470__ ) + #define __ASM __asm /*!< asm keyword for TI CCS Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + #define __STATIC_INLINE static inline + +#elif defined ( __CSMC__ ) + #define __packed + #define __ASM _asm /*!< asm keyword for COSMIC Compiler */ + #define __INLINE inline /*use -pc99 on compile line !< inline keyword for COSMIC Compiler */ + #define __STATIC_INLINE static inline + +#endif + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0 + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TMS470__ ) + #if defined __TI__VFP_SUPPORT____ + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) /* Cosmic */ + #if ( __CSMC__ & 0x400) // FPU present for parser + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif +#endif + +#include /* standard types definitions */ +#include /* Core Instruction Access */ +#include /* Core Function Access */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000 + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0 + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 4 + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0 + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ +#else + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ +#endif + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + + +/** \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + + +/** \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ +#if (__CORTEX_M != 0x04) + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ +#else + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ +#endif + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + + +/** \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/*@} end of group CMSIS_CORE */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IO uint32_t ISER[8]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24]; + __IO uint32_t ICER[8]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24]; + __IO uint32_t ISPR[8]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24]; + __IO uint32_t ICPR[8]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24]; + __IO uint32_t IABR[8]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56]; + __IO uint8_t IP[240]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644]; + __O uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0 /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL << NVIC_STIR_INTID_Pos) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IO uint8_t SHP[12]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IO uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IO uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IO uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IO uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IO uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IO uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __I uint32_t PFR[2]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __I uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __I uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __I uint32_t MMFR[4]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __I uint32_t ISAR[5]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5]; + __IO uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11 /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29 /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8 /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0 /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL << SCB_AIRCR_VECTRESET_Pos) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8 /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4 /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1 /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0 /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL << SCB_CCR_NONBASETHRDENA_Pos) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18 /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17 /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16 /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14 /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13 /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12 /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11 /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10 /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8 /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7 /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3 /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1 /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0 /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL << SCB_SHCSR_MEMFAULTACT_Pos) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Registers Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16 /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8 /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0 /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL << SCB_CFSR_MEMFAULTSR_Pos) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* SCB Hard Fault Status Registers Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31 /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30 /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1 /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4 /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3 /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2 /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1 /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0 /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL << SCB_DFSR_HALTED_Pos) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1]; + __I uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0 /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL << SCnSCB_ICTR_INTLINESNUM_Pos) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_CALIB_TENMS_Pos) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __O union + { + __O uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __O uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __O uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864]; + __IO uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15]; + __IO uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15]; + __IO uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29]; + __O uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __I uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IO uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43]; + __O uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __I uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6]; + __I uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __I uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __I uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __I uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __I uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __I uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __I uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __I uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __I uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __I uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __I uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __I uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0 /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL << ITM_TPR_PRIVMASK_Pos) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23 /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16 /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10 /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8 /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4 /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3 /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2 /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1 /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0 /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL << ITM_TCR_ITMENA_Pos) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0 /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL << ITM_IWR_ATVALIDM_Pos) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0 /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL << ITM_IRR_ATREADYM_Pos) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0 /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL << ITM_IMCR_INTEGRATION_Pos) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2 /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1 /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0 /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL << ITM_LSR_Present_Pos) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IO uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IO uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IO uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IO uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IO uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IO uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __I uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IO uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IO uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IO uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1]; + __IO uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IO uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IO uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1]; + __IO uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IO uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IO uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1]; + __IO uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IO uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IO uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28 /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27 /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26 /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25 /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24 /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22 /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21 /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20 /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19 /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18 /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17 /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16 /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12 /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10 /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9 /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5 /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1 /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0 /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL << DWT_CTRL_CYCCNTENA_Pos) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0 /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL << DWT_CPICNT_CPICNT_Pos) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0 /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL << DWT_EXCCNT_EXCCNT_Pos) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0 /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL << DWT_SLEEPCNT_SLEEPCNT_Pos) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0 /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL << DWT_LSUCNT_LSUCNT_Pos) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0 /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL << DWT_FOLDCNT_FOLDCNT_Pos) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0 /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL << DWT_MASK_MASK_Pos) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24 /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16 /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12 /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10 /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9 /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8 /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7 /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5 /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0 /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL << DWT_FUNCTION_FUNCTION_Pos) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IO uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IO uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2]; + __IO uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55]; + __IO uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131]; + __I uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IO uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __I uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759]; + __I uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ + __I uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __I uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1]; + __I uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __I uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IO uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39]; + __IO uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IO uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8]; + __I uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __I uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0 /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL << TPI_ACPR_PRESCALER_Pos) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0 /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL << TPI_SPPR_TXMODE_Pos) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3 /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2 /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1 /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0 /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL << TPI_FFSR_FlInProg_Pos) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8 /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1 /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0 /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL << TPI_TRIGGER_TRIGGER_Pos) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29 /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27 /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26 /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24 /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16 /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8 /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0 /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL << TPI_FIFO0_ETM0_Pos) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY_Pos 0 /*!< TPI ITATBCTR2: ATREADY Position */ +#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL << TPI_ITATBCTR2_ATREADY_Pos) /*!< TPI ITATBCTR2: ATREADY Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29 /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27 /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26 /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24 /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16 /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8 /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0 /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL << TPI_FIFO1_ITM0_Pos) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY_Pos 0 /*!< TPI ITATBCTR0: ATREADY Position */ +#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL << TPI_ITATBCTR0_ATREADY_Pos) /*!< TPI ITATBCTR0: ATREADY Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0 /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x1UL << TPI_ITCTRL_Mode_Pos) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11 /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10 /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9 /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6 /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5 /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0 /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL << TPI_DEVID_NrTraceInput_Pos) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 0 /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL << TPI_DEVTYPE_SubType_Pos) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 4 /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if (__MPU_PRESENT == 1) +/** \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IO uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IO uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IO uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IO uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IO uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IO uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register */ +#define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register */ +#define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register */ +#define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register */ +#define MPU_RBAR_ADDR_Pos 5 /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register */ +#define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IO uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __O uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IO uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IO uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16 /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25 /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24 /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19 /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18 /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17 /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16 /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5 /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3 /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2 /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1 /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0 /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL << CoreDebug_DHCSR_C_DEBUGEN_Pos) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register */ +#define CoreDebug_DCRSR_REGWnR_Pos 16 /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0 /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL << CoreDebug_DCRSR_REGSEL_Pos) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_TRCENA_Pos 24 /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19 /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18 /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17 /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16 /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10 /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9 /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8 /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7 /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6 /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5 /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4 /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0 /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL << CoreDebug_DEMCR_VC_CORERESET_Pos) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Cortex-M3 Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if (__MPU_PRESENT == 1) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +/** \brief Set Priority Grouping + + The function sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8)); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** \brief Get Priority Grouping + + The function reads the priority grouping field from the NVIC Interrupt Controller. + + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) +{ + return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos); /* read priority grouping field */ +} + + +/** \brief Enable External Interrupt + + The function enables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) +{ + NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */ +} + + +/** \brief Disable External Interrupt + + The function disables a device-specific interrupt in the NVIC interrupt controller. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */ +} + + +/** \brief Get Pending Interrupt + + The function reads the pending register in the NVIC and returns the pending bit + for the specified interrupt. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + */ +__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */ +} + + +/** \brief Set Pending Interrupt + + The function sets the pending bit of an external interrupt. + + \param [in] IRQn Interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */ +} + + +/** \brief Clear Pending Interrupt + + The function clears the pending bit of an external interrupt. + + \param [in] IRQn External interrupt number. Value cannot be negative. + */ +__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */ +} + + +/** \brief Get Active Interrupt + + The function reads the active register in NVIC and returns the active bit. + + \param [in] IRQn Interrupt number. + + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + */ +__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */ +} + + +/** \brief Set Interrupt Priority + + The function sets the priority of an interrupt. + + \note The priority cannot be set for every core interrupt. + + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + */ +__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if(IRQn < 0) { + SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M System Interrupts */ + else { + NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ +} + + +/** \brief Get Interrupt Priority + + The function reads the priority of an interrupt. The interrupt + number can be positive to specify an external (device specific) + interrupt, or negative to specify an internal (core) interrupt. + + + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented + priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) +{ + + if(IRQn < 0) { + return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M system interrupts */ + else { + return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)] >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */ +} + + +/** \brief Encode Priority + + The function encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + return ( + ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) | + ((SubPriority & ((1 << (SubPriorityBits )) - 1))) + ); +} + + +/** \brief Decode Priority + + The function decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & 0x07); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp; + SubPriorityBits = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS; + + *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1); + *pSubPriority = (Priority ) & ((1 << (SubPriorityBits )) - 1); +} + + +/** \brief System Reset + + The function initiates a system reset request to reset the MCU. + */ +__STATIC_INLINE void NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + while(1); /* wait until reset */ +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if (__Vendor_SysTickConfig == 0) + +/** \brief System Tick Configuration + + The function initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + + \param [in] ticks Number of ticks between two interrupts. + + \return 0 Function succeeded. + \return 1 Function failed. + + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ + + SysTick->LOAD = ticks - 1; /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY 0x5AA55AA5 /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** \brief ITM Send Character + + The function transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + + \param [in] ch Character to transmit. + + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */ + (ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0].u32 == 0); + ITM->PORT[0].u8 = (uint8_t) ch; + } + return (ch); +} + + +/** \brief ITM Receive Character + + The function inputs a character via the external variable \ref ITM_RxBuffer. + + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) { + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** \brief ITM Check Character + + The function checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) { + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) { + return (0); /* no character available */ + } else { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/MM32L0xx_lib_version.txt b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/MM32L0xx_lib_version.txt new file mode 100644 index 0000000000..6ca927af2c --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/MM32L0xx_lib_version.txt @@ -0,0 +1,6 @@ + +Release Notes + + +2017-04-21 +MM32L0xx std lib version is updated to Ver2.0.0 diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_adc.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_adc.h new file mode 100644 index 0000000000..907b2509a4 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_adc.h @@ -0,0 +1,312 @@ +/** +****************************************************************************** +* @file HAL_adc.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the ADC firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_ADC_H +#define __HAL_ADC_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup ADC +* @{ +*/ + +/** @defgroup ADC_Exported_Types +* @{ +*/ + +/** +* @brief ADC Init structure definition +*/ + +/* +typedef struct +{ +uint32_t ADC_Mode; +FunctionalState ADC_ScanConvMode; +FunctionalState ADC_ContinuousConvMode; +uint32_t ADC_ExternalTrigConv; +uint32_t ADC_DataAlign; +uint8_t ADC_NbrOfChannel; +}ADC_InitTypeDef; +*/ +typedef struct +{ + uint32_t ADC_Resolution; + uint32_t ADC_PRESCARE; + uint32_t ADC_Mode; + FunctionalState ADC_ContinuousConvMode; + uint32_t ADC_TRGEN; + uint32_t ADC_ExternalTrigConv; + uint32_t ADC_DataAlign; +}ADC_InitTypeDef; +/** +* @} +*/ + +/** @defgroup ADC_Exported_Constants +* @{ +*/ + +#define IS_ADC_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == ADC1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == ADC2_BASE)) + +#define IS_ADC_DMA_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == ADC1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == ADC2_BASE)) + +/** @defgroup ADC_Resolution +* @{ +*/ +#define ADC_Resolution_12b ((uint32_t)0x00000000) +#define ADC_Resolution_11b ((uint32_t)0x00000080) +#define ADC_Resolution_10b ((uint32_t)0x00000100) +#define ADC_Resolution_9b ((uint32_t)0x00000180) +#define ADC_Resolution_8b ((uint32_t)0x00000200) + +#define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_Resolution_12b) || \ +((RESOLUTION) == ADC_Resolution_10b) || \ + ((RESOLUTION) == ADC_Resolution_8b) || \ + ((RESOLUTION) == ADC_Resolution_6b)) + +/** +* @brief for ADC1, ADC2 +*/ + +#define ADC_PCLK2_PRESCARE_2 ((uint32_t)0x00000000) +#define ADC_PCLK2_PRESCARE_4 ((uint32_t)0x00000010) +#define ADC_PCLK2_PRESCARE_6 ((uint32_t)0x00000020) +#define ADC_PCLK2_PRESCARE_8 ((uint32_t)0x00000030) +#define ADC_PCLK2_PRESCARE_10 ((uint32_t)0x00000040) +#define ADC_PCLK2_PRESCARE_12 ((uint32_t)0x00000050) +#define ADC_PCLK2_PRESCARE_14 ((uint32_t)0x00000060) +#define ADC_PCLK2_PRESCARE_16 ((uint32_t)0x00000070) + + + +/** @defgroup ADC_dual_mode +* @{ +*/ + +#define ADC_Mode_Single ((uint32_t)0x00000000) +#define ADC_Mode_Single_Period ((uint32_t)0x00000200) +#define ADC_Mode_Continuous_Scan ((uint32_t)0x00000400) + +#define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Single) || \ +((MODE) == ADC_Mode_Single_Period) || \ + ((MODE) == ADC_Mode_Continuous_Scan)) +/** +* @} +*/ + +#define ADC_TRG_Disable ((uint32_t)0xfffffffB) +#define ADC_TRG_Enable ((uint32_t)0x00000004) + +/** @defgroup ADC_extrenal_trigger_sources_for_regular_channels_conversion +* @{ +*/ + +/** +* @brief for ADC1 +*/ + +#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) +#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00000010) +#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00000020) +#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00000030) +#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00000040) +#define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x00000060) +#define ADC_ExternalTrigConv_EXTI_11 ((uint32_t)0x00000070) + +#define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \ +((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_EXTI_11) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T1_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T2_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_CC4) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T4_TRGO) || \ + ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \ + ((REGTRIG) == ADC_ExternalTrigConv_EXTI_15)) +/** +* @} +*/ + +/** @defgroup ADC_data_align +* @{ +*/ + +#define ADC_DataAlign_Right ((uint32_t)0x00000000) +#define ADC_DataAlign_Left ((uint32_t)0x00000800) +#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \ +((ALIGN) == ADC_DataAlign_Left)) +/** +* @} +*/ + +/** @defgroup ADC_channels +* @{ +*/ + +#define ADC_Channel_0 ((uint8_t)0x00) +#define ADC_Channel_1 ((uint8_t)0x01) +#define ADC_Channel_2 ((uint8_t)0x02) +#define ADC_Channel_3 ((uint8_t)0x03) +#define ADC_Channel_4 ((uint8_t)0x04) +#define ADC_Channel_5 ((uint8_t)0x05) +#define ADC_Channel_6 ((uint8_t)0x06) +#define ADC_Channel_7 ((uint8_t)0x07) +#define ADC_Channel_8 ((uint8_t)0x08) +#define ADC_Channel_9 ((uint8_t)0x09) +#define ADC_Channel_10 ((uint8_t)0x0A) //tempsensor +#define ADC_Channel_11 ((uint8_t)0x0B)//vref 1.2V +#define ADC_Channel_All ((uint8_t)0x0f) + + +#define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || ((CHANNEL) == ADC_Channel_1) || \ +((CHANNEL) == ADC_Channel_2) || ((CHANNEL) == ADC_Channel_3) || \ + ((CHANNEL) == ADC_Channel_4) || ((CHANNEL) == ADC_Channel_5) || \ + ((CHANNEL) == ADC_Channel_6) || ((CHANNEL) == ADC_Channel_7) || \ + ((CHANNEL) == ADC_Channel_8) || ((CHANNEL) == ADC_Channel_All)) + + + +/** @defgroup ADC_sampling_times +* @{ +*/ + +#define ADC_SampleTime_1_5Cycles ((uint8_t)0x00) +#define ADC_SampleTime_7_5Cycles ((uint8_t)0x01) +#define ADC_SampleTime_13_5Cycles ((uint8_t)0x02) +#define ADC_SampleTime_28_5Cycles ((uint8_t)0x03) +#define ADC_SampleTime_41_5Cycles ((uint8_t)0x04) +#define ADC_SampleTime_55_5Cycles ((uint8_t)0x05) +#define ADC_SampleTime_71_5Cycles ((uint8_t)0x06) +#define ADC_SampleTime_239_5Cycles ((uint8_t)0x07) + +#define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_1_5Cycles) || \ +((TIME) == ADC_SampleTime_7_5Cycles) || \ + ((TIME) == ADC_SampleTime_13_5Cycles) || \ + ((TIME) == ADC_SampleTime_28_5Cycles) || \ + ((TIME) == ADC_SampleTime_41_5Cycles) || \ + ((TIME) == ADC_SampleTime_55_5Cycles) || \ + ((TIME) == ADC_SampleTime_71_5Cycles) || \ + ((TIME) == ADC_SampleTime_239_5Cycles)) + + + + +/** @defgroup ADC_analog_watchdog_selection +* @{ +*/ + +#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00000002) +#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) + +#define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \ +((WATCHDOG) == ADC_AnalogWatchdog_None)) +/** +* @} +*/ + +/** @defgroup ADC_interrupts_definition +* @{ +*/ + +#define ADC_IT_EOC ((uint16_t)0x0001) +#define ADC_IT_AWD ((uint16_t)0x0002) + +#define IS_ADC_IT(IT) ((((IT) & (uint16_t)0xFFFC) == 0x00) && ((IT) != 0x00)) + +#define IS_ADC_GET_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD)) + +/** +* @} +*/ + +/** @defgroup ADC_flags_definition +* @{ +*/ + +#define ADC_FLAG_AWD ((uint8_t)0x02) //ADWIF ±È½Ï±ê־λ +#define ADC_FLAG_EOC ((uint8_t)0x01) //ADIF ת»»½áÊø±ê־λ +#define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xF0) == 0x00) && ((FLAG) != 0x00)) +#define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || ((FLAG) == ADC_FLAG_EOC)) + +/** +* @} +*/ + + +/** @defgroup ADC_Exported_Functions +* @{ +*/ + +void ADC_DeInit(ADC_TypeDef* ADCx); +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); + +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx,FunctionalState NewState); +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold); +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); +void ADC_TempSensorCmd(FunctionalState NewState); +void ADC_VrefintCmd(FunctionalState NewState); +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT); + +#endif /*__HAL_ADC_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_bkp.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_bkp.h new file mode 100644 index 0000000000..9faa4f0d67 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_bkp.h @@ -0,0 +1,88 @@ +/** +****************************************************************************** +* @file HAL_bkp.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the BKP firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_BKP_H +#define __HAL_BKP_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + + +#define BKP_DR1 ((uint16_t)0x0050) +#define BKP_DR2 ((uint16_t)0x0054) +#define BKP_DR3 ((uint16_t)0x0058) +#define BKP_DR4 ((uint16_t)0x005C) +#define BKP_DR5 ((uint16_t)0x0060) +#define BKP_DR6 ((uint16_t)0x0064) +#define BKP_DR7 ((uint16_t)0x0068) +#define BKP_DR8 ((uint16_t)0x006C) +#define BKP_DR9 ((uint16_t)0x0070) +#define BKP_DR10 ((uint16_t)0x0074) + +#define IS_BKP_DR(DR) (((DR) == BKP_DR1) || ((DR) == BKP_DR2) || ((DR) == BKP_DR3) || \ +((DR) == BKP_DR4) || ((DR) == BKP_DR5) || ((DR) == BKP_DR6) || \ + ((DR) == BKP_DR7) || ((DR) == BKP_DR8) || ((DR) == BKP_DR9) || \ + ((DR) == BKP_DR10)) + +#define IS_BKP_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x7F) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup BKP_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup BKP_Exported_Functions +* @{ +*/ + + +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); + +#endif /* __HAL_BKP_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_can.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_can.h new file mode 100644 index 0000000000..222bf98d52 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_can.h @@ -0,0 +1,379 @@ +/** +****************************************************************************** +* @file HAL_can.h +* @author AE Team +* @version V1.5.0 +* @date 02/08/2017 +* @brief This file contains all the functions prototypes for the BKP firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_CAN_H +#define __HAL_CAN_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + + +/** @defgroup CAN_sleep_constants +* @{ +*/ + +#define CANINITFAILED ((uint8_t)0x00) /* CAN initialization failed */ +#define CANINITOK ((uint8_t)0x01) /* CAN initialization ok */ + +/** +* @} +*/ + + + +/** @defgroup CAN_sleep_constants +* @{ +*/ + +#define CANSLEEPFAILED ((uint8_t)0x00) /* CAN did not enter the sleep mode */ +#define CANSLEEPOK ((uint8_t)0x01) /* CAN entered the sleep mode */ + +/** +* @} +*/ + + +/** @defgroup CAN_wake_up_constants +* @{ +*/ + +#define CANWAKEUPFAILED ((uint8_t)0x00) /* CAN did not leave the sleep mode */ +#define CANWAKEUPOK ((uint8_t)0x01) /* CAN leaved the sleep mode */ + +/** +* @} +*/ + +/** +* @brief parasmeter of CAN Mode +*/ +#define CAN_BASICMode ((uint32_t)0x0) +#define CAN_PELIMode ((uint32_t)0x80) +#define CAN_WorkMode ((uint32_t)0x80) +#define CAN_ResetMode ((uint32_t)0x1) +#define CAN_ListenOnlyMode ((uint32_t)0x2) +#define CAN_SeftTestMode ((uint32_t)0x4) +#define CAN_FilterMode_Singal ((uint32_t)0x8) +#define CAN_FilterMode_Double ((uint32_t)0xf7) +#define CAN_SleepMode ((uint32_t)0x10) + +/** +* @} +*/ + +/** +* @brief parasmeter of BASIC CAN interrupt +*/ +#define CAN_IT_RIE ((uint32_t)0x2) +#define CAN_IT_TIE ((uint32_t)0x4) +#define CAN_IT_EIE ((uint32_t)0x8) +#define CAN_IT_OIE ((uint32_t)0x10) + +/** +* @} +*/ + +/** +* @brief parasmeter of PELI CAN interrupt +*/ +#define CAN_IT_RI ((uint32_t)0x1) +#define CAN_IT_TI ((uint32_t)0x2) +#define CAN_IT_EI ((uint32_t)0x4) +#define CAN_IT_DOI ((uint32_t)0x8) +#define CAN_IT_WUI ((uint32_t)0x10) +#define CAN_IT_EPI ((uint32_t)0x20) +#define CAN_IT_ALI ((uint32_t)0x40) +#define CAN_IT_BEI ((uint32_t)0x80) +#define CAN_IT_ALL ((uint32_t)0xff) + +/** +* @} +*/ + +/** +* @brief parasmeter of CAN Status +*/ +#define CAN_STATUS_RBS ((uint32_t)0x1) +#define CAN_STATUS_DOS ((uint32_t)0x2) +#define CAN_STATUS_TBS ((uint32_t)0x4) +#define CAN_STATUS_TCS ((uint32_t)0x8) +#define CAN_STATUS_RS ((uint32_t)0x10) +#define CAN_STATUS_TS ((uint32_t)0x20) +#define CAN_STATUS_ES ((uint32_t)0x40) +#define CAN_STATUS_BS ((uint32_t)0x80) + +/** +* @} +*/ + +/** +* @brief parasmeter of CAN Command register +*/ +#define CAN_TR 0x1 +#define CAN_AT 0x2 +#define CAN_RRB 0x4 +#define CAN_CDO 0x8 + +/** +* @} +*/ + +/** +* @brief CAN_Basic init structure definition +*/ +typedef struct +{ + uint8_t SJW; + uint8_t BRP; + FlagStatus SAM; + uint8_t TESG2; + uint8_t TESG1; + FunctionalState GTS; + uint8_t CDCLK; + uint8_t CLOSE_OPEN_CLK; + uint8_t RXINTEN; + uint8_t CBP; +}CAN_Basic_InitTypeDef; + +/** +* @} +*/ + +/** +* @brief CAN_Peli init structure definition +*/ +typedef struct +{ + uint8_t SJW; + uint8_t BRP; + FlagStatus SAM; + uint8_t TESG2; + uint8_t TESG1; + FunctionalState LOM; + FunctionalState STM; + FunctionalState SM; + FunctionalState SRR; + uint32_t EWLR; +}CAN_Peli_InitTypeDef; + +/** +* @} +*/ + +/** +* @brief CAN_Basic filter init structure definition +*/ +typedef struct +{ + uint8_t CAN_FilterId; /*!< Specifies the filter identification number . + This parameter can be a value between 0x00 and 0xFF */ + + uint8_t CAN_FilterMaskId; /*!< Specifies the filter mask number or identification number, + This parameter can be a value between 0x00 and 0xFF */ +} CAN_Basic_FilterInitTypeDef; + +/** +* @} +*/ + +/** +* @brief CAN_Peli filter init structure definition +*/ +typedef struct +{ + uint8_t AFM; + uint8_t CAN_FilterId0; /*!< Specifies the filter identification number + This parameter can be a value between 0x00 and 0xFF */ + uint8_t CAN_FilterId1; + uint8_t CAN_FilterId2; + uint8_t CAN_FilterId3; + + uint8_t CAN_FilterMaskId0; /*!< Specifies the filter mask number or identification number, + This parameter can be a value between 0x00 and 0xFF */ + uint8_t CAN_FilterMaskId1; + uint8_t CAN_FilterMaskId2; + uint8_t CAN_FilterMaskId3; +} CAN_Peli_FilterInitTypeDef; + +/** +* @} +*/ + +/** +* @brief CAN_Peli transmit frame definition +*/ +typedef enum {DataFrame = 0,RemoteFrame = !DataFrame}TransFrame; + +/** +* @} +*/ + +/** +* @brief CAN_Basic Tx message structure definition +*/ +typedef struct +{ + uint8_t IDH; /*!< Specifies the standard high identifier. + This parameter can be a value between 0 to 0xFF. */ + uint8_t IDL; /*!< Specifies the standard low identifier. + This parameter can be a value between 0 to 0x7. */ + uint8_t RTR; /*!< Specifies the type of frame for the message that will + be transmitted. This parameter can be @TransFrame */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be + transmitted. This parameter can be a value between + 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 + to 0xFF. */ +} CanBasicTxMsg; + +/** +* @} +*/ + +/** +* @brief CAN_Basic Rx message structure definition +*/ +typedef struct +{ + uint16_t ID; /*!< Specifies the standard identifier. + This parameter can be a value between 0 to 0x7FF. */ + uint8_t RTR; /*!< Specifies the type of frame for the received message. + This parameter can be a value of + @ref TransFrame */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be received. + This parameter can be a value between 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to + 0xFF. */ + +} CanBasicRxMsg; + +/** +* @} +*/ + +/** +* @brief CAN_Peli_Tx message structure definition +*/ +typedef struct +{ + uint8_t IDLL; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0xFF. */ + uint8_t IDLH; + uint8_t IDHL; + uint8_t IDHH; + uint8_t FF; /*!< Specifies the type of identifier for the message that + will be transmitted. This parameter can be a value + of @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the message that will + be transmitted. This parameter can be a value of + @ref TransFrame */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be + transmitted. This parameter can be a value between + 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 + to 0xFF. */ +} CanPeliTxMsg; + +/** +* @} +*/ + +/** +* @brief CAN Rx message structure definition +*/ +typedef struct +{ + uint32_t ID; /*!< Specifies the extended identifier. + This parameter can be a value between 0 to 0x1FFFFFFF. */ + uint8_t FF; /*!< Specifies the type of identifier for the message that + will be received. This parameter can be a value of + @ref CAN_identifier_type */ + + uint8_t RTR; /*!< Specifies the type of frame for the received message. + This parameter can be a value of + @ref TransFrame */ + + uint8_t DLC; /*!< Specifies the length of the frame that will be received. + This parameter can be a value between 0 to 8 */ + + uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to + 0xFF. */ + +} CanPeliRxMsg; + + + + +#define CANTXFAILED ((uint8_t)0x00) /* CAN transmission failed */ +#define CANTXOK ((uint8_t)0x01) /* CAN transmission succeeded */ +#define CANTXPENDING ((uint8_t)0x02) /* CAN transmission pending */ +#define CAN_NO_MB ((uint8_t)0x04) /* CAN cell did not provide an empty mailbox */ + + +/************************ Basic and Peli Work all need function ********************/ + +void CAN_Mode_Cmd(CAN_TypeDef* CANx, uint32_t CAN_MODE); +void CAN_ResetMode_Cmd(CAN_TypeDef* CANx,FunctionalState NewState); +void CAN_ClearDataOverflow(CAN_TypeDef* CANx); +void CAN_ClearITPendingBit(CAN_TypeDef* CANx); + + +/************************ Basic Work function ********************/ +void CAN_DeInit(CAN_TypeDef* CANx); +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_Basic_InitTypeDef* CAN_Basic_InitStruct); +void CAN_FilterInit(CAN_Basic_FilterInitTypeDef* CAN_Basic_FilterInitStruct); +void CAN_StructInit(CAN_Basic_InitTypeDef* CAN_Basic_InitStruct); +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState Newstate); +uint8_t CAN_Transmit(CAN_TypeDef* CANx,CanBasicTxMsg* BasicTxMessage); +void CAN_CancelTransmit(CAN_TypeDef* CANx); +void CAN_FIFORelease(CAN_TypeDef* CANx); +void CAN_Receive(CAN_TypeDef* CANx,CanBasicRxMsg* BasicRxMessage); +uint8_t CAN_Sleep(CAN_TypeDef* CANx); +uint8_t CAN_WakeUp(CAN_TypeDef* CANx); +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx,uint32_t CAN_FLAG); +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT); + + +/************************ Peli Work function *********************/ +void CAN_Peli_SleepMode_Cmd(FunctionalState NewState); +void CAN_Peli_Init(CAN_Peli_InitTypeDef* CAN_InitStruct); +void CAN_Peli_StructInit(CAN_Peli_InitTypeDef* CAN_Peli_InitStruct); +void CAN_Peli_FilterInit(CAN_Peli_FilterInitTypeDef* CAN_Peli_FilterInitStruct); +void CAN_Peli_FilterStructInit(CAN_Peli_FilterInitTypeDef* CAN_Peli_FilterInitStruct); +void CAN_Peli_Transmit(CanPeliTxMsg* PeliTxMessage); +void CAN_Peli_TransmitRepeat(CanPeliTxMsg* PeliTxMessage); +void CAN_Peli_Receive(CanPeliRxMsg* PeliRxMessage); +uint32_t CAN_Peli_GetRxFIFOInfo(void); +uint8_t CAN_Peli_GetLastErrorCode(void); +uint8_t CAN_Peli_GetReceiveErrorCounter(void); +uint8_t CAN_Peli_GetLSBTransmitErrorCounter(void); +void CAN_Peli_ITConfig(uint32_t CAN_IT, FunctionalState NewState); +ITStatus CAN_Peli_GetITStatus(uint32_t CAN_IT); +void CAN_AutoCfg_BaudParam(CAN_Peli_InitTypeDef *CAN_Peli_InitStruct,unsigned int SrcClk,unsigned int baud ); +#endif /* __HAL_CAN_H */ + diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_comp.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_comp.h new file mode 100644 index 0000000000..793c121976 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_comp.h @@ -0,0 +1,301 @@ +/** +****************************************************************************** +* @file HAL_comp.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the COMP firmware +* library. +****************************************************************************** +* @attention +* +*

© 2017 MindMotion

+****************************************************************************** +*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_COMP_H +#define __HAL_COMP_H + +#ifdef __cplusplus +extern "C" { +#endif + + /* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + + /** @addtogroup + * @{ + */ + + /** @addtogroup COMP + * @{ + */ + + /* Exported types ------------------------------------------------------------*/ + + /** + * @brief COMP Init structure definition + */ + + typedef struct + { + + uint32_t COMP_InvertingInput; /*!< Selects the inverting input of the comparator. + This parameter can be a value of @ref COMP_InvertingInput */ + + uint32_t COMP_NonInvertingInput; /*!< Selects the non inverting input of the comparator. + This parameter can be a value of @ref COMP_NonInvertingInput */ + + uint32_t COMP_Output; /*!< Selects the output redirection of the comparator. + This parameter can be a value of @ref COMP_Output */ + + uint32_t COMP_BlankingSrce; /*!< Selects the output blanking source of the comparator. + This parameter can be a value of @ref COMP_BlankingSrce */ + + uint32_t COMP_OutputPol; /*!< Selects the output polarity of the comparator. + This parameter can be a value of @ref COMP_OutputPoloarity */ + + uint32_t COMP_Hysteresis; /*!< Selects the hysteresis voltage of the comparator. + This parameter can be a value of @ref COMP_Hysteresis */ + + uint32_t COMP_Mode; /*!< Selects the operating mode of the comparator + and allows to adjust the speed/consumption. + This parameter can be a value of @ref COMP_Mode */ + + }COMP_InitTypeDef; + + /* Exported constants --------------------------------------------------------*/ + + /** @defgroup COMP_Exported_Constants + * @{ + */ + + /** @defgroup COMP_Selection + * @{ + */ + +#define COMP_Selection_COMP1 ((uint32_t)0x00000000) /*!< COMP1 Selection */ +#define COMP_Selection_COMP2 ((uint32_t)0x00000004) /*!< COMP2 Selection */ + + +#define IS_COMP_ALL_PERIPH(PERIPH) (((PERIPH) == COMP_Selection_COMP1) || \ + ((PERIPH) == COMP_Selection_COMP2)) + +/** +* @} +*/ + +/** @defgroup COMP_InvertingInput +* @{ +*/ + +#define COMP_InvertingInput_1_4VREFINT ((uint32_t)0x00000000) /*!< 1/4 VREFINT connected to comparator inverting input */ +#define COMP_InvertingInput_1_2VREFINT ((uint32_t)0x00000010) /*!< 1/2 VREFINT connected to comparator inverting input */ +#define COMP_InvertingInput_3_4VREFINT ((uint32_t)0x00000020) /*!< 3/4 VREFINT connected to comparator inverting input */ +#define COMP_InvertingInput_VREFINT ((uint32_t)0x00000030) /*!< VREFINT connected to comparator inverting input */ +#define COMP_InvertingInput_DAC1 ((uint32_t)0x00000040) /*!< DAC1_OUT (PA4) connected to comparator inverting input */ +#define COMP_InvertingInput_DAC2 ((uint32_t)0x00000050) /*!< DAC2_OUT (PA5) connected to comparator inverting input */ +#define COMP_InvertingInput_IO1 ((uint32_t)0x00000060) /*!< I/O1 (PA0 for COMP1, PA2 for COMP2) connected to comparator inverting input */ +#define COMP_InvertingInput_IO2 ((uint32_t)0x00000070) /*!< I/O2 (PA6 for COMP1, PA6 for COMP2) connected to comparator inverting input */ + + +#define IS_COMP_INVERTING_INPUT(INPUT) (((INPUT) == COMP_InvertingInput_1_4VREFINT) || \ +((INPUT) == COMP_InvertingInput_1_2VREFINT) || \ + ((INPUT) == COMP_InvertingInput_3_4VREFINT) || \ + ((INPUT) == COMP_InvertingInput_VREFINT) || \ + ((INPUT) == COMP_InvertingInput_DAC1) || \ + ((INPUT) == COMP_InvertingInput_DAC2) || \ + ((INPUT) == COMP_InvertingInput_IO1) || \ + ((INPUT) == COMP_InvertingInput_IO2)) +/** +* @} +*/ + +/** @defgroup COMP_NonInvertingInput +* @{ +*/ + +#define COMP_NonInvertingInput_IO1 ((uint32_t)0x00000000) /*!< I/O1 (PA0 for COMP1, PA0 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO2 ((uint32_t)0x00000080) /*!< I/O2 (PA1 for COMP1, PA1 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO3 ((uint32_t)0x00000100) /*!< I/O2 (PA2 for COMP1, PA2 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO4 ((uint32_t)0x00000180) /*!< I/O2 (PA3 for COMP1, PA3 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO5 ((uint32_t)0x00000200) /*!< I/O2 (PA4 for COMP1, PA4 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO6 ((uint32_t)0x00000280) /*!< I/O2 (PA5 for COMP1, PA5 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO7 ((uint32_t)0x00000300) /*!< I/O2 (PA6 for COMP1, PA6 for COMP2) connected to comparator non inverting input */ + +#define COMP_NonInvertingInput_IO8 ((uint32_t)0x00000380) /*!< I/O2 (PA7 for COMP1, PA7 for COMP2) connected to comparator non inverting input */ + +#define IS_COMP_NONINVERTING_INPUT(INPUT) (((INPUT) == COMP_NonInvertingInput_IO1) || \ +((INPUT) == COMP_NonInvertingInput_IO1) || \ + ((INPUT) == COMP_NonInvertingInput_IO2) || \ + ((INPUT) == COMP_NonInvertingInput_IO3) || \ + ((INPUT) == COMP_NonInvertingInput_IO4) || \ + ((INPUT) == COMP_NonInvertingInput_IO5) || \ + ((INPUT) == COMP_NonInvertingInput_IO6) || \ + ((INPUT) == COMP_NonInvertingInput_IO7) || \ + ((INPUT) == COMP_NonInvertingInput_IO8)) + +/** +* @} +*/ + +/** @defgroup COMP_Output +* @{ +*/ + +#define COMP_Output_None ((uint32_t)0x00000000) /*!< COMP output isn't connected to other peripherals */ + +/* Output Redirection common for all comparators COMP1...COMP2 */ +#define COMP_Output_TIM1BKIN ((uint32_t)0x00000800) /*!< COMP output connected to TIM1 Break Input (BKIN) */ + +/* Output Redirection common for COMP1 and COMP2 */ +#define COMP_Output_TIM1OCREFCLR ((uint32_t)0x00001800) /*!< COMP output connected to TIM1 OCREF Clear */ +#define COMP_Output_TIM1IC1 ((uint32_t)0x00001C00) /*!< COMP output connected to TIM1 Input Capture 1 */ +#define COMP_Output_TIM2IC4 ((uint32_t)0x00002000) /*!< COMP output connected to TIM2 Input Capture 4 */ +#define COMP_Output_TIM2OCREFCLR ((uint32_t)0x00002400) /*!< COMP output connected to TIM2 OCREF Clear */ +#define COMP_Output_TIM3IC1 ((uint32_t)0x00002800) /*!< COMP output connected to TIM3 Input Capture 1 */ +#define COMP_Output_TIM3OCREFCLR ((uint32_t)0x00002C00) /*!< COMP output connected to TIM3 OCREF Clear */ + + +#define IS_COMP_OUTPUT(OUTPUT) (((OUTPUT) == COMP_Output_None) || \ +((OUTPUT) == COMP_Output_TIM1BKIN) || \ + ((OUTPUT) == COMP_Output_TIM1IC1) || \ + ((OUTPUT) == COMP_Output_TIM1OCREFCLR) || \ + ((OUTPUT) == COMP_Output_TIM2IC4) || \ + ((OUTPUT) == COMP_Output_TIM2OCREFCLR) || \ + ((OUTPUT) == COMP_Output_TIM3IC1) || \ + ((OUTPUT) == COMP_Output_TIM3OCREFCLR)) + +/** +* @} +*/ + +/** @defgroup COMP_BlankingSrce +* @{ +*/ + +/* No blanking source can be selected for all comparators */ +#define COMP_BlankingSrce_None ((uint32_t)0x00000000) /*!< No blanking source */ + + +#define IS_COMP_BLANKING_SOURCE(SOURCE) (((SOURCE) == COMP_BlankingSrce_None)) + +/** +* @} +*/ + +/** @defgroup COMP_OutputPoloarity +* @{ +*/ +#define COMP_OutputPol_NonInverted ((uint32_t)0x00000000) /*!< COMP output on GPIO isn't inverted */ +#define COMP_OutputPol_Inverted ((uint32_t)0x00008000) /*!< COMP output on GPIO is inverted */ + +#define IS_COMP_OUTPUT_POL(POL) (((POL) == COMP_OutputPol_NonInverted) || \ +((POL) == COMP_OutputPol_Inverted)) + +/** +* @} +*/ + +/** @defgroup COMP_Hysteresis +* @{ +*/ +/* Please refer to the electrical characteristics in the device datasheet for +the hysteresis level */ +#define COMP_Hysteresis_No 0x00000000 /*!< No hysteresis */ +#define COMP_Hysteresis_Low ((uint32_t)0x00010000) /*!< Hysteresis level low */ +#define COMP_Hysteresis_Medium ((uint32_t)0x00020000) /*!< Hysteresis level medium */ +#define COMP_Hysteresis_High ((uint32_t)0x00030000) /*!< Hysteresis level high */ + +#define IS_COMP_HYSTERESIS(HYSTERESIS) (((HYSTERESIS) == COMP_Hysteresis_No) || \ +((HYSTERESIS) == COMP_Hysteresis_Low) || \ + ((HYSTERESIS) == COMP_Hysteresis_Medium) || \ + ((HYSTERESIS) == COMP_Hysteresis_High)) +/** +* @} +*/ + +/** @defgroup COMP_Mode +* @{ +*/ +/* Please refer to the electrical characteristics in the device datasheet for +the power consumption values */ +#define COMP_Mode_HighSpeed ((uint32_t)0x0000000C) /*!< High Speed */ +#define COMP_Mode_MediumSpeed ((uint32_t)0x00000008) /*!< Medium Speed */ +#define COMP_Mode_LowPower ((uint32_t)0x00000004) /*!< Low power mode */ +#define COMP_Mode_UltraLowPower 0x00000000 /*!< Ultra-low power mode */ + +#define IS_COMP_MODE(MODE) (((MODE) == COMP_Mode_UltraLowPower) || \ +((MODE) == COMP_Mode_LowPower) || \ + ((MODE) == COMP_Mode_MediumSpeed) || \ + ((MODE) == COMP_Mode_HighSpeed)) +/** +* @} +*/ + +/** @defgroup COMP_OutputLevel +* @{ +*/ +/* When output polarity is not inverted, comparator output is high when +the non-inverting input is at a higher voltage than the inverting input */ +#define COMP_OutputLevel_High ((uint32_t)0x40000000) +/* When output polarity is not inverted, comparator output is low when +the non-inverting input is at a lower voltage than the inverting input*/ +#define COMP_OutputLevel_Low ((uint32_t)0x00000000) + +/** +* @} +*/ + +/** @defgroup COMP_WindowMode +* @{ +*/ +#define IS_COMP_WINDOW(WINDOW) (((WINDOW) == COMP_Selection_COMP2) || \ +((WINDOW) == COMP_Selection_COMP4) || \ + ((WINDOW) == COMP_Selection_COMP6)) +/** +* @} +*/ + +/** +* @} +*/ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +/* Function used to set the COMP configuration to the default reset state ****/ +void COMP_DeInit(uint32_t COMP_Selection); + +/* Initialization and Configuration functions *********************************/ +void COMP_Init(uint32_t COMP_Selection, COMP_InitTypeDef* COMP_InitStruct); +void COMP_StructInit(COMP_InitTypeDef* COMP_InitStruct); +void COMP_Cmd(uint32_t COMP_Selection, FunctionalState NewState); +void COMP_SwitchCmd(uint32_t COMP_Selection, FunctionalState NewState); +uint32_t COMP_GetOutputLevel(uint32_t COMP_Selection); + +/* COMP configuration locking function ****************************************/ +void COMP_LockConfig(uint32_t COMP_Selection); + +#ifdef __cplusplus +} +#endif + +#endif /*__HAL_COMP_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_conf.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_conf.h new file mode 100644 index 0000000000..ed76dadc6c --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_conf.h @@ -0,0 +1,43 @@ +/** +****************************************************************************** +* @file HAL_conf.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains Header file for generic microcontroller. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ +#ifndef __HAL_CONF_H__ +#define __HAL_CONF_H__ + +/*´Ë´¦¿ÉÌí¼Ó»òɾ³ýÍâÉè*/ +#include "HAL_device.h" +#include "HAL_adc.h" +#include "HAL_bkp.h" +#include "HAL_dma.h" +#include "HAL_exti.h" +#include "HAL_flash.h" +#include "HAL_gpio.h" +#include "HAL_i2c.h" +#include "HAL_iwdg.h" +#include "HAL_pwr.h" +#include "HAL_rcc.h" +#include "HAL_spi.h" +#include "HAL_tim.h" +#include "HAL_uart.h" +#include "HAL_wwdg.h" +#include "HAL_misc.h" +#include "HAL_syscfg.h" +#endif + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_dma.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_dma.h new file mode 100644 index 0000000000..1ff1f29da7 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_dma.h @@ -0,0 +1,332 @@ +/** +****************************************************************************** +* @file HAL_dma.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the DMA firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_DMA_H +#define __HAL_DMA_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup DMA +* @{ +*/ + +/** @defgroup DMA_Exported_Types +* @{ +*/ + +/** +* @brief DMA Init structure definition +*/ + +typedef struct +{ + uint32_t DMA_PeripheralBaseAddr; + uint32_t DMA_MemoryBaseAddr; + uint32_t DMA_DIR; + uint32_t DMA_BufferSize; + uint32_t DMA_PeripheralInc; + uint32_t DMA_MemoryInc; + uint32_t DMA_PeripheralDataSize; + uint32_t DMA_MemoryDataSize; + uint32_t DMA_Mode; + uint32_t DMA_Priority; + uint32_t DMA_M2M; +}DMA_InitTypeDef; + +/** +* @} +*/ + +/** @defgroup DMA_Exported_Constants +* @{ +*/ + +#define IS_DMA_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == DMA1_Channel1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == DMA1_Channel2_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == DMA1_Channel3_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == DMA1_Channel4_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == DMA1_Channel5_BASE)) + + + +/** @defgroup DMA_data_transfer_direction +* @{ +*/ + +#define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) //mtop +#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) //ptom +#define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_PeripheralDST) || \ +((DIR) == DMA_DIR_PeripheralSRC)) +/** +* @} +*/ + +/** @defgroup DMA_peripheral_incremented_mode +* @{ +*/ + +#define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) +#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \ +((STATE) == DMA_PeripheralInc_Disable)) +/** +* @} +*/ + +/** @defgroup DMA_memory_incremented_mode +* @{ +*/ + +#define DMA_MemoryInc_Enable ((uint32_t)0x00000080) +#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \ +((STATE) == DMA_MemoryInc_Disable)) +/** +* @} +*/ + +/** @defgroup DMA_peripheral_data_size +* @{ +*/ + +#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) +#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) +#define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \ +((SIZE) == DMA_PeripheralDataSize_HalfWord) || \ + ((SIZE) == DMA_PeripheralDataSize_Word)) +/** +* @} +*/ + +/** @defgroup DMA_memory_data_size +* @{ +*/ + +#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) +#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) +#define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \ +((SIZE) == DMA_MemoryDataSize_HalfWord) || \ + ((SIZE) == DMA_MemoryDataSize_Word)) +/** +* @} +*/ + +/** @defgroup DMA_circular_normal_mode +* @{ +*/ + +#define DMA_Mode_Circular ((uint32_t)0x00000020) +#define DMA_Mode_Normal ((uint32_t)0x00000000) +#define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || ((MODE) == DMA_Mode_Normal)) +/** +* @} +*/ + +/** @defgroup DMA_priority_level +* @{ +*/ + +#define DMA_Priority_VeryHigh ((uint32_t)0x00003000) +#define DMA_Priority_High ((uint32_t)0x00002000) +#define DMA_Priority_Medium ((uint32_t)0x00001000) +#define DMA_Priority_Low ((uint32_t)0x00000000) +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \ +((PRIORITY) == DMA_Priority_High) || \ + ((PRIORITY) == DMA_Priority_Medium) || \ + ((PRIORITY) == DMA_Priority_Low)) +/** +* @} +*/ + +/** @defgroup DMA_memory_to_memory +* @{ +*/ + +#define DMA_M2M_Enable ((uint32_t)0x00004000) +#define DMA_M2M_Disable ((uint32_t)0x00000000) +#define IS_DMA_M2M_STATE(STATE) (((STATE) == DMA_M2M_Enable) || ((STATE) == DMA_M2M_Disable)) + +/** +* @} +*/ + +/** @defgroup DMA_interrupts_definition +* @{ +*/ + +#define DMA_IT_TC ((uint32_t)0x00000002) +#define DMA_IT_HT ((uint32_t)0x00000004) +#define DMA_IT_TE ((uint32_t)0x00000008) +#define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFFF1) == 0x00) && ((IT) != 0x00)) + +/** +* @brief For DMA1 +*/ + +#define DMA1_IT_GL1 ((uint32_t)0x00000001) +#define DMA1_IT_TC1 ((uint32_t)0x00000002) +#define DMA1_IT_HT1 ((uint32_t)0x00000004) +#define DMA1_IT_TE1 ((uint32_t)0x00000008) +#define DMA1_IT_GL2 ((uint32_t)0x00000010) +#define DMA1_IT_TC2 ((uint32_t)0x00000020) +#define DMA1_IT_HT2 ((uint32_t)0x00000040) +#define DMA1_IT_TE2 ((uint32_t)0x00000080) +#define DMA1_IT_GL3 ((uint32_t)0x00000100) +#define DMA1_IT_TC3 ((uint32_t)0x00000200) +#define DMA1_IT_HT3 ((uint32_t)0x00000400) +#define DMA1_IT_TE3 ((uint32_t)0x00000800) +#define DMA1_IT_GL4 ((uint32_t)0x00001000) +#define DMA1_IT_TC4 ((uint32_t)0x00002000) +#define DMA1_IT_HT4 ((uint32_t)0x00004000) +#define DMA1_IT_TE4 ((uint32_t)0x00008000) +#define DMA1_IT_GL5 ((uint32_t)0x00010000) +#define DMA1_IT_TC5 ((uint32_t)0x00020000) +#define DMA1_IT_HT5 ((uint32_t)0x00040000) +#define DMA1_IT_TE5 ((uint32_t)0x00080000) + + +#define IS_DMA_CLEAR_IT(IT) (((((IT) & 0xF0000000) == 0x00) || (((IT) & 0xEFF00000) == 0x00)) && ((IT) != 0x00)) + +#define IS_DMA_GET_IT(IT) (((IT) == DMA1_IT_GL1) || ((IT) == DMA1_IT_TC1) || \ +((IT) == DMA1_IT_HT1) || ((IT) == DMA1_IT_TE1) || \ + ((IT) == DMA1_IT_GL2) || ((IT) == DMA1_IT_TC2) || \ + ((IT) == DMA1_IT_HT2) || ((IT) == DMA1_IT_TE2) || \ + ((IT) == DMA1_IT_GL3) || ((IT) == DMA1_IT_TC3) || \ + ((IT) == DMA1_IT_HT3) || ((IT) == DMA1_IT_TE3) || \ + ((IT) == DMA1_IT_GL4) || ((IT) == DMA1_IT_TC4) || \ + ((IT) == DMA1_IT_HT4) || ((IT) == DMA1_IT_TE4) || \ + ((IT) == DMA1_IT_GL5) || ((IT) == DMA1_IT_TC5) || \ + ((IT) == DMA1_IT_HT5) || ((IT) == DMA1_IT_TE5)) + + +/** +* @} +*/ + +/** @defgroup DMA_flags_definition +* @{ +*/ + +/** +* @brief For DMA1 +*/ + +#define DMA1_FLAG_GL1 ((uint32_t)0x00000001) +#define DMA1_FLAG_TC1 ((uint32_t)0x00000002) +#define DMA1_FLAG_HT1 ((uint32_t)0x00000004) +#define DMA1_FLAG_TE1 ((uint32_t)0x00000008) +#define DMA1_FLAG_GL2 ((uint32_t)0x00000010) +#define DMA1_FLAG_TC2 ((uint32_t)0x00000020) +#define DMA1_FLAG_HT2 ((uint32_t)0x00000040) +#define DMA1_FLAG_TE2 ((uint32_t)0x00000080) +#define DMA1_FLAG_GL3 ((uint32_t)0x00000100) +#define DMA1_FLAG_TC3 ((uint32_t)0x00000200) +#define DMA1_FLAG_HT3 ((uint32_t)0x00000400) +#define DMA1_FLAG_TE3 ((uint32_t)0x00000800) +#define DMA1_FLAG_GL4 ((uint32_t)0x00001000) +#define DMA1_FLAG_TC4 ((uint32_t)0x00002000) +#define DMA1_FLAG_HT4 ((uint32_t)0x00004000) +#define DMA1_FLAG_TE4 ((uint32_t)0x00008000) +#define DMA1_FLAG_GL5 ((uint32_t)0x00010000) +#define DMA1_FLAG_TC5 ((uint32_t)0x00020000) +#define DMA1_FLAG_HT5 ((uint32_t)0x00040000) +#define DMA1_FLAG_TE5 ((uint32_t)0x00080000) + + + + +#define IS_DMA_CLEAR_FLAG(FLAG) (((((FLAG) & 0xF0000000) == 0x00) || (((FLAG) & 0xEFF00000) == 0x00)) && ((FLAG) != 0x00)) + +#define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GL1) || ((FLAG) == DMA1_FLAG_TC1) || \ +((FLAG) == DMA1_FLAG_HT1) || ((FLAG) == DMA1_FLAG_TE1) || \ + ((FLAG) == DMA1_FLAG_GL2) || ((FLAG) == DMA1_FLAG_TC2) || \ + ((FLAG) == DMA1_FLAG_HT2) || ((FLAG) == DMA1_FLAG_TE2) || \ + ((FLAG) == DMA1_FLAG_GL3) || ((FLAG) == DMA1_FLAG_TC3) || \ + ((FLAG) == DMA1_FLAG_HT3) || ((FLAG) == DMA1_FLAG_TE3) || \ + ((FLAG) == DMA1_FLAG_GL4) || ((FLAG) == DMA1_FLAG_TC4) || \ + ((FLAG) == DMA1_FLAG_HT4) || ((FLAG) == DMA1_FLAG_TE4) || \ + ((FLAG) == DMA1_FLAG_GL5) || ((FLAG) == DMA1_FLAG_TC5) || \ + ((FLAG) == DMA1_FLAG_HT5) || ((FLAG) == DMA1_FLAG_TE5)) + + +/** +* @} +*/ + +/** @defgroup DMA_Buffer_Size +* @{ +*/ + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) + +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup DMA_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup DMA_Exported_Functions +* @{ +*/ + +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState); +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx); +FlagStatus DMA_GetFlagStatus(uint32_t DMA_FLAG); +void DMA_ClearFlag(uint32_t DMA_FLAG); +ITStatus DMA_GetITStatus(uint32_t DMA_IT); +void DMA_ClearITPendingBit(uint32_t DMA_IT); + +#endif /*__HAL_DMA_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*------------------ (C) COPYRIGHT 2017 MindMotion ------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_exti.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_exti.h new file mode 100644 index 0000000000..5f72ae685e --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_exti.h @@ -0,0 +1,168 @@ +/** +****************************************************************************** +* @file HAL_exti.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the EXTI +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_EXTI_H +#define __HAL_EXTI_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup EXTI +* @{ +*/ + +/** @defgroup EXTI_Exported_Types +* @{ +*/ + +/** +* @brief EXTI mode enumeration +*/ + +typedef enum +{ + EXTI_Mode_Interrupt = 0x00, + EXTI_Mode_Event = 0x04 +}EXTIMode_TypeDef; + +#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event)) + +/** +* @brief EXTI Trigger enumeration +*/ + +typedef enum +{ + EXTI_Trigger_Rising = 0x08, + EXTI_Trigger_Falling = 0x0C, + EXTI_Trigger_Rising_Falling = 0x10 +}EXTITrigger_TypeDef; + +#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \ +((TRIGGER) == EXTI_Trigger_Falling) || \ + ((TRIGGER) == EXTI_Trigger_Rising_Falling)) +/** +* @brief EXTI Init Structure definition +*/ + +typedef struct +{ + uint32_t EXTI_Line; + EXTIMode_TypeDef EXTI_Mode; + EXTITrigger_TypeDef EXTI_Trigger; + FunctionalState EXTI_LineCmd; +}EXTI_InitTypeDef; + +/** +* @} +*/ + +/** @defgroup EXTI_Exported_Constants +* @{ +*/ + +/** @defgroup EXTI_Lines +* @{ +*/ + +#define EXTI_Line0 ((uint32_t)0x00001) /* External interrupt line 0 */ +#define EXTI_Line1 ((uint32_t)0x00002) /* External interrupt line 1 */ +#define EXTI_Line2 ((uint32_t)0x00004) /* External interrupt line 2 */ +#define EXTI_Line3 ((uint32_t)0x00008) /* External interrupt line 3 */ +#define EXTI_Line4 ((uint32_t)0x00010) /* External interrupt line 4 */ +#define EXTI_Line5 ((uint32_t)0x00020) /* External interrupt line 5 */ +#define EXTI_Line6 ((uint32_t)0x00040) /* External interrupt line 6 */ +#define EXTI_Line7 ((uint32_t)0x00080) /* External interrupt line 7 */ +#define EXTI_Line8 ((uint32_t)0x00100) /* External interrupt line 8 */ +#define EXTI_Line9 ((uint32_t)0x00200) /* External interrupt line 9 */ +#define EXTI_Line10 ((uint32_t)0x00400) /* External interrupt line 10 */ +#define EXTI_Line11 ((uint32_t)0x00800) /* External interrupt line 11 */ +#define EXTI_Line12 ((uint32_t)0x01000) /* External interrupt line 12 */ +#define EXTI_Line13 ((uint32_t)0x02000) /* External interrupt line 13 */ +#define EXTI_Line14 ((uint32_t)0x04000) /* External interrupt line 14 */ +#define EXTI_Line15 ((uint32_t)0x08000) /* External interrupt line 15 */ +#define EXTI_Line16 ((uint32_t)0x10000) /* External interrupt line 16 Connected to the PVD Output */ +//#define EXTI_Line17 ((uint32_t)0x20000) /* External interrupt line 17 Connected to the RTC Alarm event */ +#define EXTI_Line18 ((uint32_t)0x40000) /* External interrupt line 18 Connected to the USB Wakeup from suspend event */ +#define EXTI_Line19 ((uint32_t)0x80000) /* External interrupt line 19 Connected to the COMP1 event */ +#define EXTI_Line20 ((uint32_t)0x100000) /* External interrupt line 20 Connected to the COMP2 event */ + +#define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF80000) == 0x00) && ((LINE) != (uint16_t)0x00)) + +#define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \ +((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \ + ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \ + ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \ + ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \ + ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \ + ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \ + ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \ + ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line18)) || \ + ((LINE) == EXTI_Line19) || ((LINE) == EXTI_Line20)) + +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Exported_Functions +* @{ +*/ + +void EXTI_DeInit(void); +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); +void EXTI_ClearFlag(uint32_t EXTI_Line); +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); +void EXTI_ClearITPendingBit(uint32_t EXTI_Line); + +#endif /* __HAL_EXTI_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_flash.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_flash.h new file mode 100644 index 0000000000..dd68c3280f --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_flash.h @@ -0,0 +1,307 @@ +/** +****************************************************************************** +* @file HAL_flash.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the FLASH +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_FLASH_H +#define __HAL_FLASH_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup FLASH +* @{ +*/ + +/** @defgroup FLASH_Exported_Types +* @{ +*/ + +/** +* @brief FLASH Status +*/ + +typedef enum +{ + FLASH_BUSY = 1, + FLASH_ERROR_PG, + FLASH_ERROR_WRP, + FLASH_COMPLETE, + FLASH_TIMEOUT +}FLASH_Status; + +/** +* @} +*/ + +/** @defgroup FLASH_Exported_Constants +* @{ +*/ + +/** @defgroup Flash_Latency +* @{ +*/ + +#define FLASH_Latency_0 ((uint32_t)0x00000000) /* FLASH Zero Latency cycle */ +#define FLASH_Latency_1 ((uint32_t)0x00000001) /* FLASH One Latency cycle */ +#define FLASH_Latency_2 ((uint32_t)0x00000002) /* FLASH Two Latency cycles */ +#define FLASH_Latency_3 ((uint32_t)0x00000003) /* FLASH Three Latency cycles */ +#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \ +((LATENCY) == FLASH_Latency_1) || \ + ((LATENCY) == FLASH_Latency_2) || \ + ((LATENCY) == FLASH_Latency_3)) +/** +* @} +*/ + +/** @defgroup Half_Cycle_Enable_Disable +* @{ +*/ + +#define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /* FLASH Half Cycle Enable */ +#define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /* FLASH Half Cycle Disable */ +#define IS_FLASH_HALFCYCLEACCESS_STATE(STATE) (((STATE) == FLASH_HalfCycleAccess_Enable) || \ +((STATE) == FLASH_HalfCycleAccess_Disable)) +/** +* @} +*/ + +/** @defgroup Prefetch_Buffer_Enable_Disable +* @{ +*/ + +#define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /* FLASH Prefetch Buffer Enable */ +#define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /* FLASH Prefetch Buffer Disable */ +#define IS_FLASH_PREFETCHBUFFER_STATE(STATE) (((STATE) == FLASH_PrefetchBuffer_Enable) || \ +((STATE) == FLASH_PrefetchBuffer_Disable)) +/** +* @} +*/ + +/** @defgroup Option_Bytes_Write_Protection +* @{ +*/ + +/* Values to be used with microcontroller Medium-density devices: FLASH memory density +ranges between 32 and 128 Kbytes with page size equal to 1 Kbytes */ +#define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /* Write protection of page 0 to 3 */ +#define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /* Write protection of page 4 to 7 */ +#define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /* Write protection of page 8 to 11 */ +#define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /* Write protection of page 12 to 15 */ +#define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /* Write protection of page 16 to 19 */ +#define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /* Write protection of page 20 to 23 */ +#define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /* Write protection of page 24 to 27 */ +#define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /* Write protection of page 28 to 31 */ +#define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /* Write protection of page 32 to 35 */ +#define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /* Write protection of page 36 to 39 */ +#define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /* Write protection of page 40 to 43 */ +#define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /* Write protection of page 44 to 47 */ +#define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /* Write protection of page 48 to 51 */ +#define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /* Write protection of page 52 to 55 */ +#define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /* Write protection of page 56 to 59 */ +#define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /* Write protection of page 60 to 63 */ +#define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /* Write protection of page 64 to 67 */ +#define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /* Write protection of page 68 to 71 */ +#define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /* Write protection of page 72 to 75 */ +#define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /* Write protection of page 76 to 79 */ +#define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /* Write protection of page 80 to 83 */ +#define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /* Write protection of page 84 to 87 */ +#define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /* Write protection of page 88 to 91 */ +#define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /* Write protection of page 92 to 95 */ +#define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /* Write protection of page 96 to 99 */ +#define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /* Write protection of page 100 to 103 */ +#define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /* Write protection of page 104 to 107 */ +#define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /* Write protection of page 108 to 111 */ +#define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /* Write protection of page 112 to 115 */ +#define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /* Write protection of page 115 to 119 */ +#define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /* Write protection of page 120 to 123 */ +#define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /* Write protection of page 124 to 127 */ + +/* Values to be used with microcontroller High-density devices: FLASH memory density +ranges between 256 and 512 Kbytes with page size equal to 2 Kbytes */ +#define FLASH_WRProt_Pages0to1 ((uint32_t)0x00000001) /* Write protection of page 0 to 1 */ +#define FLASH_WRProt_Pages2to3 ((uint32_t)0x00000002) /* Write protection of page 2 to 3 */ +#define FLASH_WRProt_Pages4to5 ((uint32_t)0x00000004) /* Write protection of page 4 to 5 */ +#define FLASH_WRProt_Pages6to7 ((uint32_t)0x00000008) /* Write protection of page 6 to 7 */ +#define FLASH_WRProt_Pages8to9 ((uint32_t)0x00000010) /* Write protection of page 8 to 9 */ +#define FLASH_WRProt_Pages10to11 ((uint32_t)0x00000020) /* Write protection of page 10 to 11 */ +#define FLASH_WRProt_Pages12to13 ((uint32_t)0x00000040) /* Write protection of page 12 to 13 */ +#define FLASH_WRProt_Pages14to15 ((uint32_t)0x00000080) /* Write protection of page 14 to 15 */ +#define FLASH_WRProt_Pages16to17 ((uint32_t)0x00000100) /* Write protection of page 16 to 17 */ +#define FLASH_WRProt_Pages18to19 ((uint32_t)0x00000200) /* Write protection of page 18 to 19 */ +#define FLASH_WRProt_Pages20to21 ((uint32_t)0x00000400) /* Write protection of page 20 to 21 */ +#define FLASH_WRProt_Pages22to23 ((uint32_t)0x00000800) /* Write protection of page 22 to 23 */ +#define FLASH_WRProt_Pages24to25 ((uint32_t)0x00001000) /* Write protection of page 24 to 25 */ +#define FLASH_WRProt_Pages26to27 ((uint32_t)0x00002000) /* Write protection of page 26 to 27 */ +#define FLASH_WRProt_Pages28to29 ((uint32_t)0x00004000) /* Write protection of page 28 to 29 */ +#define FLASH_WRProt_Pages30to31 ((uint32_t)0x00008000) /* Write protection of page 30 to 31 */ +#define FLASH_WRProt_Pages32to33 ((uint32_t)0x00010000) /* Write protection of page 32 to 33 */ +#define FLASH_WRProt_Pages34to35 ((uint32_t)0x00020000) /* Write protection of page 34 to 35 */ +#define FLASH_WRProt_Pages36to37 ((uint32_t)0x00040000) /* Write protection of page 36 to 37 */ +#define FLASH_WRProt_Pages38to39 ((uint32_t)0x00080000) /* Write protection of page 38 to 39 */ +#define FLASH_WRProt_Pages40to41 ((uint32_t)0x00100000) /* Write protection of page 40 to 41 */ +#define FLASH_WRProt_Pages42to43 ((uint32_t)0x00200000) /* Write protection of page 42 to 43 */ +#define FLASH_WRProt_Pages44to45 ((uint32_t)0x00400000) /* Write protection of page 44 to 45 */ +#define FLASH_WRProt_Pages46to47 ((uint32_t)0x00800000) /* Write protection of page 46 to 47 */ +#define FLASH_WRProt_Pages48to49 ((uint32_t)0x01000000) /* Write protection of page 48 to 49 */ +#define FLASH_WRProt_Pages50to51 ((uint32_t)0x02000000) /* Write protection of page 50 to 51 */ +#define FLASH_WRProt_Pages52to53 ((uint32_t)0x04000000) /* Write protection of page 52 to 53 */ +#define FLASH_WRProt_Pages54to55 ((uint32_t)0x08000000) /* Write protection of page 54 to 55 */ +#define FLASH_WRProt_Pages56to57 ((uint32_t)0x10000000) /* Write protection of page 56 to 57 */ +#define FLASH_WRProt_Pages58to59 ((uint32_t)0x20000000) /* Write protection of page 58 to 59 */ +#define FLASH_WRProt_Pages60to61 ((uint32_t)0x40000000) /* Write protection of page 60 to 61 */ +#define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /* Write protection of page 62 to 255 */ +#define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /* Write protection of all Pages */ + +#define IS_FLASH_WRPROT_PAGE(PAGE) (((PAGE) != 0x00000000)) + +#define IS_FLASH_ADDRESS(ADDRESS) (((ADDRESS) >= 0x08000000) && ((ADDRESS) < 0x0807FFFF)) + +#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == 0x1FFFF804) || ((ADDRESS) == 0x1FFFF806)) + +/** +* @} +*/ + +/** @defgroup Option_Bytes_IWatchdog +* @{ +*/ + +#define OB_IWDG_SW ((uint16_t)0x0001) /* Software IWDG selected */ +#define OB_IWDG_HW ((uint16_t)0x0000) /* Hardware IWDG selected */ +#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) + +/** +* @} +*/ + +/** @defgroup Option_Bytes_nRST_STOP +* @{ +*/ + +#define OB_STOP_NoRST ((uint16_t)0x0002) /* No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint16_t)0x0000) /* Reset generated when entering in STOP */ +#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST)) + +/** +* @} +*/ + +/** @defgroup Option_Bytes_nRST_STDBY +* @{ +*/ + +#define OB_STDBY_NoRST ((uint16_t)0x0004) /* No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint16_t)0x0000) /* Reset generated when entering in STANDBY */ +#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST)) + +/** +* @} +*/ + +/** @defgroup FLASH_Interrupts +* @{ +*/ + +#define FLASH_IT_ERROR ((uint32_t)0x00000400) /* FPEC error interrupt source */ +#define FLASH_IT_EOP ((uint32_t)0x00001000) /* End of FLASH Operation Interrupt source */ +#define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFFFFEBFF) == 0x00000000) && (((IT) != 0x00000000))) + +/** +* @} +*/ + +/** @defgroup FLASH_Flags +* @{ +*/ + +#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /* FLASH Busy flag */ +#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /* FLASH End of Operation flag */ +#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /* FLASH Program error flag */ +#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /* FLASH Write protected error flag */ +#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /* FLASH Option Byte error flag */ + +#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000)) +#define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \ +((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \ + ((FLAG) == FLASH_FLAG_OPTERR)) + +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup FLASH_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup FLASH_Exported_Functions +* @{ +*/ + +void FLASH_SetLatency(uint32_t FLASH_Latency); +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess); +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer); +void FLASH_Unlock(void); +void FLASH_Lock(void); +FLASH_Status FLASH_ErasePage(uint32_t Page_Address); +FLASH_Status FLASH_EraseAllPages(void); +FLASH_Status FLASH_EraseOptionBytes(void); +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data); +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages); +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState); +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY); +uint32_t FLASH_GetUserOptionByte(void); +uint32_t FLASH_GetWriteProtectionOptionByte(void); +FlagStatus FLASH_GetReadOutProtectionStatus(void); +FlagStatus FLASH_GetPrefetchBufferStatus(void); +void FLASH_ITConfig(uint16_t FLASH_IT, FunctionalState NewState); +FlagStatus FLASH_GetFlagStatus(uint16_t FLASH_FLAG); +void FLASH_ClearFlag(uint16_t FLASH_FLAG); +FLASH_Status FLASH_GetStatus(void); +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout); + +#endif /* __HAL_FLASH_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_gpio.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_gpio.h new file mode 100644 index 0000000000..d7596b2aef --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_gpio.h @@ -0,0 +1,368 @@ +/** +****************************************************************************** +* @file HAL_gpio.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the GPIO +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_GPIO_H +#define __HAL_GPIO_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup GPIO +* @{ +*/ + +/** @defgroup GPIO_Exported_Types +* @{ +*/ + +#define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == GPIOA_BASE) || \ +((*(uint32_t*)&(PERIPH)) == GPIOB_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == GPIOC_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == GPIOD_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == GPIOE_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == GPIOF_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == GPIOG_BASE)) + +/** +* @brief Output Maximum frequency selection +*/ + +typedef enum +{ + GPIO_Speed_10MHz = 1, + GPIO_Speed_2MHz, + GPIO_Speed_50MHz +}GPIOSpeed_TypeDef; +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \ +((SPEED) == GPIO_Speed_50MHz)) + +/** +* @brief Configuration Mode enumeration +*/ + +typedef enum +{ GPIO_Mode_AIN = 0x0, //Ä£ÄâÊäÈë +GPIO_Mode_IN_FLOATING = 0x04, //¸¡¿ÕÊäÈë +GPIO_Mode_IPD = 0x28, //ÏÂÀ­ÊäÈë +GPIO_Mode_IPU = 0x48, //ÉÏÀ­ÊäÈë +GPIO_Mode_Out_OD = 0x14,//ͨÓÿªÂ©Êä³ö +GPIO_Mode_Out_PP = 0x10,//ͨÓÃÍÆÃâÊä³ö +GPIO_Mode_AF_OD = 0x1C, // ¸´ÓÿªÂ©Êä³ö +GPIO_Mode_AF_PP = 0x18 //¸´ÓÃÍÆÃâÊä³ö +}GPIOMode_TypeDef; + +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \ +((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \ + ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \ + ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP)) + +/** +* @brief GPIO Init structure definition +*/ + +typedef struct +{ + uint16_t GPIO_Pin; + GPIOSpeed_TypeDef GPIO_Speed; + GPIOMode_TypeDef GPIO_Mode; +}GPIO_InitTypeDef; + +/** +* @brief Bit_SET and Bit_RESET enumeration +*/ + +typedef enum +{ Bit_RESET = 0, +Bit_SET +}BitAction; + +#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET)) + +/** +* @} +*/ + +/** @defgroup GPIO_Exported_Constants +* @{ +*/ + +/** @defgroup GPIO_pins_define +* @{ +*/ + +#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */ +#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */ +#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */ +#define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */ +#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */ +#define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */ +#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */ +#define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */ +#define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */ +#define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */ +#define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */ +#define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */ +#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */ +#define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */ +#define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */ +#define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */ +#define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */ + +#define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00)) + +#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \ +((PIN) == GPIO_Pin_1) || \ + ((PIN) == GPIO_Pin_2) || \ + ((PIN) == GPIO_Pin_3) || \ + ((PIN) == GPIO_Pin_4) || \ + ((PIN) == GPIO_Pin_5) || \ + ((PIN) == GPIO_Pin_6) || \ + ((PIN) == GPIO_Pin_7) || \ + ((PIN) == GPIO_Pin_8) || \ + ((PIN) == GPIO_Pin_9) || \ + ((PIN) == GPIO_Pin_10) || \ + ((PIN) == GPIO_Pin_11) || \ + ((PIN) == GPIO_Pin_12) || \ + ((PIN) == GPIO_Pin_13) || \ + ((PIN) == GPIO_Pin_14) || \ + ((PIN) == GPIO_Pin_15)) + +/** +* @} +*/ + +/** @defgroup GPIO_Remap_define +* @{ +*/ + +#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /* SPI1 Alternate Function mapping */ +#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /* I2C1 Alternate Function mapping */ +#define GPIO_Remap_UART1 ((uint32_t)0x00000004) /* UART1 Alternate Function mapping */ + + +#define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /* TIM1 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /* TIM1 Full Alternate Function mapping */ +#define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /* TIM2 Partial1 Alternate Function mapping */ +#define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /* TIM2 Partial2 Alternate Function mapping */ +#define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /* TIM2 Full Alternate Function mapping */ +#define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /* TIM3 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /* TIM3 Full Alternate Function mapping */ + + +#define GPIO_Remap_PD01 ((uint32_t)0x00008000) /* PD01 Alternate Function mapping */ + +#define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /* ADC1 External Trigger Injected Conversion remapping */ +#define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /* ADC1 External Trigger Regular Conversion remapping */ + +#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /* Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ +#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /* JTAG-DP Disabled and SW-DP Enabled */ +#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /* Full SWJ Disabled (JTAG-DP + SW-DP) */ + +#define IS_GPIO_REMAP(REMAP) (((REMAP) == GPIO_Remap_SPI1) || ((REMAP) == GPIO_Remap_I2C1) || \ +((REMAP) == GPIO_Remap_UART1) || ((REMAP) == GPIO_PartialRemap_TIM1) || \ + ((REMAP) == GPIO_FullRemap_TIM1) || ((REMAP) == GPIO_PartialRemap1_TIM2) ||\ + ((REMAP) == GPIO_PartialRemap2_TIM2) || ((REMAP) == GPIO_FullRemap_TIM2) || \ + ((REMAP) == GPIO_PartialRemap_TIM3) || ((REMAP) == GPIO_FullRemap_TIM3) ||\ + ((REMAP) == GPIO_Remap_TIM4) || ((REMAP) == GPIO_Remap_PD01) || \ + ((REMAP) == GPIO_Remap_ADC1_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC1_ETRGREG) || \ + ((REMAP) == GPIO_Remap_SWJ_NoJTRST) || ((REMAP) == GPIO_Remap_SWJ_JTAGDisable)|| \ + ((REMAP) == GPIO_Remap_SWJ_Disable)) + +/** +* @} +*/ + +/** @defgroup GPIO_Port_Sources +* @{ +*/ + +#define GPIO_PortSourceGPIOA ((uint8_t)0x00) +#define GPIO_PortSourceGPIOB ((uint8_t)0x01) +#define GPIO_PortSourceGPIOC ((uint8_t)0x02) +#define GPIO_PortSourceGPIOD ((uint8_t)0x03) +#define GPIO_PortSourceGPIOE ((uint8_t)0x04) +#define GPIO_PortSourceGPIOF ((uint8_t)0x05) +#define GPIO_PortSourceGPIOG ((uint8_t)0x06) +#define IS_GPIO_EVENTOUT_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \ +((PORTSOURCE) == GPIO_PortSourceGPIOB) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOE)) + +#define IS_GPIO_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \ +((PORTSOURCE) == GPIO_PortSourceGPIOB) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOE) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOF) || \ + ((PORTSOURCE) == GPIO_PortSourceGPIOG)) + +/** +* @} +*/ + +/** @defgroup GPIO_Pin_sources +* @{ +*/ + +#define GPIO_PinSource0 ((uint8_t)0x00) +#define GPIO_PinSource1 ((uint8_t)0x01) +#define GPIO_PinSource2 ((uint8_t)0x02) +#define GPIO_PinSource3 ((uint8_t)0x03) +#define GPIO_PinSource4 ((uint8_t)0x04) +#define GPIO_PinSource5 ((uint8_t)0x05) +#define GPIO_PinSource6 ((uint8_t)0x06) +#define GPIO_PinSource7 ((uint8_t)0x07) +#define GPIO_PinSource8 ((uint8_t)0x08) +#define GPIO_PinSource9 ((uint8_t)0x09) +#define GPIO_PinSource10 ((uint8_t)0x0A) +#define GPIO_PinSource11 ((uint8_t)0x0B) +#define GPIO_PinSource12 ((uint8_t)0x0C) +#define GPIO_PinSource13 ((uint8_t)0x0D) +#define GPIO_PinSource14 ((uint8_t)0x0E) +#define GPIO_PinSource15 ((uint8_t)0x0F) + +#define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \ +((PINSOURCE) == GPIO_PinSource1) || \ + ((PINSOURCE) == GPIO_PinSource2) || \ + ((PINSOURCE) == GPIO_PinSource3) || \ + ((PINSOURCE) == GPIO_PinSource4) || \ + ((PINSOURCE) == GPIO_PinSource5) || \ + ((PINSOURCE) == GPIO_PinSource6) || \ + ((PINSOURCE) == GPIO_PinSource7) || \ + ((PINSOURCE) == GPIO_PinSource8) || \ + ((PINSOURCE) == GPIO_PinSource9) || \ + ((PINSOURCE) == GPIO_PinSource10) || \ + ((PINSOURCE) == GPIO_PinSource11) || \ + ((PINSOURCE) == GPIO_PinSource12) || \ + ((PINSOURCE) == GPIO_PinSource13) || \ + ((PINSOURCE) == GPIO_PinSource14) || \ + ((PINSOURCE) == GPIO_PinSource15)) + +/** +* @} +*/ +/** +* @} +*/ + +/** @defgroup GPIO_Alternate_function_selection_define +* @{ +*/ + +/** +* @brief AF 0 selection +*/ +#define GPIO_AF_0 ((uint8_t)0x00) /* SPI1, MC0, TIM17_BKIN, SWDIO,SWCLK, +UART1*/ +/** +* @brief AF 1 selection +*/ +#define GPIO_AF_1 ((uint8_t)0x01) /* UART1, TIM3_CH1, TIM3_CH2, TIM3_CH3, +TIM3_CH4, I2C1*/ +/** +* @brief AF 2 selection +*/ +#define GPIO_AF_2 ((uint8_t)0x02) /* TIM2_CH1_ETR, TIM2_CH2, TIM2_CH3, +TIM2_CH3, TIM2_CH4, TIM1_BKIN, +TIM1_CH1N, TIM1_CH1, TIM1_CH2, +TIM1_CH3, TIM1_CH4, TIM1_ETR, +TIM1_CH2N, TIM1_CH3N, TIM2_CH2, +TIM1 6_BKIN, TIM16_CH1N, TIM17_CH1N, +TIM1 6_CH1, TIM17_CH1 */ +/** +* @brief AF 3 selection +*/ +#define GPIO_AF_3 ((uint8_t)0x03) /* */ + +/** +* @brief AF 4 selection +*/ +#define GPIO_AF_4 ((uint8_t)0x04) /* TIM14_CH1, I2C1*/ + +/** +* @brief AF 5 selection +*/ +#define GPIO_AF_5 ((uint8_t)0x05) /* */ + +/** +* @brief AF 6 selection +*/ +#define GPIO_AF_6 ((uint8_t)0x06) /* */ +/** +* @brief AF 7 selection +*/ +#define GPIO_AF_7 ((uint8_t)0x07) /* */ + +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF_0) || ((AF) == GPIO_AF_1) || \ +((AF) == GPIO_AF_2) || ((AF) == GPIO_AF_3) || \ + ((AF) == GPIO_AF_4) || ((AF) == GPIO_AF_5) || \ + ((AF) == GPIO_AF_6) || ((AF) == GPIO_AF_7)) + +/** +* @} +*/ + +/** @defgroup GPIO_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup GPIO_Exported_Functions +* @{ +*/ + +void GPIO_DeInit(GPIO_TypeDef* GPIOx); +void GPIO_AFIODeInit(void); +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); +#endif /* __HAL_GPIO_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_i2c.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_i2c.h new file mode 100644 index 0000000000..81bd849a6c --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_i2c.h @@ -0,0 +1,330 @@ +/** +****************************************************************************** +* @file HAL_i2c.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the I2C firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_I2C_H +#define __HAL_I2C_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup I2C +* @{ +*/ + +/** @defgroup I2C_Exported_Types +* @{ +*/ + +/** +* @brief I2C Init structure definition +*/ +/* +typedef struct +{ +uint16_t I2C_Mode; +uint16_t I2C_DutyCycle; +uint16_t I2C_OwnAddress1; +uint16_t I2C_Ack; +uint16_t I2C_AcknowledgedAddress; +uint32_t I2C_ClockSpeed; +}I2C_InitTypeDef; +*/ +typedef struct +{ + uint16_t I2C_Mode; + uint16_t I2C_Speed; + uint16_t I2C_OwnAddress; + uint32_t I2C_ClockSpeed; +}I2C_InitTypeDef; + +/** +* @} +*/ + + +/** @defgroup I2C_Exported_Constants +* @{ +*/ + +#define IS_I2C_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == I2C1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == I2C2_BASE)) +/** @defgroup I2C_modes +* @{ +*/ + +#define TX_EMPTY_CTRL (0x0001<<8) +#define IC_SLAVE_DISABLE (0x0001<<6) +#define IC_SLAVE_ENABLE (0x0000<<6) +#define IC_RESTART_EN (0x0001<<5) +#define IC_7BITADDR_MASTER (0x0000<<4) +#define IC_7BITADDR_SLAVE (0x0000<<3) + +#define I2C_Speed_STANDARD ((uint16_t)0x0002) +#define I2C_Speed_FAST ((uint16_t)0x0004) +#define I2C_Mode_MASTER ((uint16_t)0x0001) +#define I2C_Mode_SLAVE ((uint16_t)0x0000) + +#define TDMAE_SET ((uint16_t)0x0002) +#define RDMAE_SET ((uint16_t)0x0001) + +#define CMD_READ ((uint16_t)0x0100) +#define CMD_WRITE ((uint16_t)0x0000) + + + + +#define I2C_Mode_I2C ((uint16_t)0x0000) + +#define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C)) + +/** +* @} +*/ + + +/** @defgroup I2C_transfer_direction +* @{ +*/ + +#define I2C_Direction_Transmitter ((uint8_t)0x00) +#define I2C_Direction_Receiver ((uint8_t)0x01) +#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \ +((DIRECTION) == I2C_Direction_Receiver)) +/** +* @} +*/ + +/** @defgroup I2C_acknowledged_address_defines +* @{ +*/ + +#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) +#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) +#define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \ +((ADDRESS) == I2C_AcknowledgedAddress_10bit)) + +/** +* @} +*/ + +/** @defgroup I2C_interrupts_definition +* @{ +*/ + + +#define IS_I2C_CONFIG_IT(IT) ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00)) +/** +* @} +*/ + +/** @defgroup I2C_interrupts_definition +* @{ +*/ + +#define I2C_IT_RX_UNDER ((uint16_t)0x0001) +#define I2C_IT_RX_OVER ((uint16_t)0x0002) +#define I2C_IT_RX_FULL ((uint16_t)0x0004) +#define I2C_IT_TX_OVER ((uint16_t)0x0008) +#define I2C_IT_TX_EMPTY ((uint16_t)0x0010) +#define I2C_IT_RD_REQ ((uint16_t)0x0020) +#define I2C_IT_TX_ABRT ((uint16_t)0x0040) +#define I2C_IT_RX_DONE ((uint16_t)0x0080) +#define I2C_IT_ACTIVITY ((uint16_t)0x0100) +#define I2C_IT_STOP_DET ((uint16_t)0x0200) +#define I2C_IT_START_DET ((uint16_t)0x0400) +#define I2C_IT_GEN_CALL ((uint16_t)0x0800) + +#define IS_I2C_CLEAR_IT(IT) ((((IT) & (uint16_t)0xF000) == 0x00) && ((IT) != (uint16_t)0x00)) + +#define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_RX_UNDER) || ((IT) == I2C_IT_RX_OVER) || \ +((IT) == I2C_IT_RX_FULL) || ((IT) == I2C_IT_TX_OVER) || \ + ((IT) == I2C_IT_TX_EMPTY) || ((IT) == I2C_IT_RD_REQ) || \ + ((IT) == I2C_IT_TX_ABRT) || ((IT) == I2C_IT_RX_DONE) || \ + ((IT) == I2C_IT_ACTIVITY) || ((IT) == I2C_IT_STOP_DET) || \ + ((IT) == I2C_IT_START_DET) || ((IT) == I2C_IT_GEN_CALL)) +/** +* @} +*/ + +/** @defgroup I2C_flags_definition +* @{ +*/ + + + +#define I2C_FLAG_RX_UNDER ((uint16_t)0x0001) +#define I2C_FLAG_RX_OVER ((uint16_t)0x0002) +#define I2C_FLAG_RX_FULL ((uint16_t)0x0004) +#define I2C_FLAG_TX_OVER ((uint16_t)0x0008) +#define I2C_FLAG_TX_EMPTY ((uint16_t)0x0010) +#define I2C_FLAG_RD_REQ ((uint16_t)0x0020) +#define I2C_FLAG_TX_ABRT ((uint16_t)0x0040) +#define I2C_FLAG_RX_DONE ((uint16_t)0x0080) +#define I2C_FLAG_ACTIVITY ((uint16_t)0x0100) +#define I2C_FLAG_STOP_DET ((uint16_t)0x0200) +#define I2C_FLAG_START_DET ((uint16_t)0x0400) +#define I2C_FLAG_GEN_CALL ((uint16_t)0x0800) + + + + + + +#define IS_I2C_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xF000) == 0x00) && ((FLAG) != (uint16_t)0x00)) + +#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_RX_UNDER) || ((FLAG) == I2C_FLAG_RX_OVER) || \ +((FLAG) == I2C_FLAG_RX_FULL) || ((FLAG) == I2C_FLAG_TX_OVER) || \ + ((FLAG) == I2C_FLAG_TX_EMPTY) || ((FLAG) == I2C_FLAG_RD_REQ) || \ + ((FLAG) == I2C_FLAG_TX_ABRT) || ((FLAG) == I2C_FLAG_RX_DONE) || \ + ((FLAG) == I2C_FLAG_ACTIVITY) || ((FLAG) == I2C_FLAG_STOP_DET) || \ + ((FLAG) == I2C_FLAG_START_DET) || ((FLAG) == I2C_FLAG_GEN_CALL)) + + +/** @defgroup I2C_Statusflags_definition +* @{ +*/ + +#define I2C_STATUS_FLAG_ACTIVITY ((uint16_t)0x8001) +#define I2C_STATUS_FLAG_TFNF ((uint16_t)0x8002) +#define I2C_STATUS_FLAG_TFE ((uint16_t)0x8004) +#define I2C_STATUS_FLAG_RFNE ((uint16_t)0x8008) +#define I2C_STATUS_FLAG_RFF ((uint16_t)0x8010) +#define I2C_STATUS_FLAG_M_ACTIVITY ((uint16_t)0x8020) +#define I2C_STATUS_FLAG_S_ACTIVITY ((uint16_t)0x8040) + + +/** +* @} +*/ + +/** @defgroup I2C_Events +* @{ +*/ + + +#define I2C_EVENT_RX_UNDER ((uint32_t)0x0001) +#define I2C_EVENT_RX_OVER ((uint32_t)0x0002) +#define I2C_EVENT_RX_FULL ((uint32_t)0x0004) +#define I2C_EVENT_TX_OVER ((uint32_t)0x0008) +#define I2C_EVENT_TX_EMPTY ((uint32_t)0x0010) +#define I2C_EVENT_RD_REQ ((uint32_t)0x0020) +#define I2C_EVENT_TX_ABRT ((uint32_t)0x0040) +#define I2C_EVENT_RX_DONE ((uint32_t)0x0080) +#define I2C_EVENT_ACTIVITY ((uint32_t)0x0100) +#define I2C_EVENT_STOP_DET ((uint32_t)0x0200) +#define I2C_EVENT_START_DET ((uint32_t)0x0400) +#define I2C_EVENT_GEN_CALL ((uint32_t)0x0800) + + +#define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_RX_UNDER) || \ +((EVENT) == I2C_EVENT_RX_OVER) || \ + ((EVENT) == I2C_EVENT_RX_FULL) || \ + ((EVENT) == I2C_EVENT_TX_OVER) || \ + ((EVENT) == I2C_EVENT_RD_REQ) || \ + ((EVENT) == I2C_EVENT_TX_ABRT) || \ + ((EVENT) == I2C_EVENT_RX_DONE) || \ + ((EVENT) == (I2C_EVENT_ACTIVITY | I2C_EVENT_STOP_DET)) || \ + ((EVENT) == (I2C_EVENT_START_DET | I2C_EVENT_GEN_CALL))) + +/** +* @} +*/ + +/** @defgroup I2C_own_address1 +* @{ +*/ + +#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF) +/** +* @} +*/ + +/** @defgroup I2C_clock_speed +* @{ +*/ + +#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000)) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Exported_Functions +* @{ +*/ + +void I2C_DeInit(I2C_TypeDef* I2Cx); +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct); +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); + +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address); +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); + +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx); +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT); +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT); +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT); +void I2C_ReadCmd(I2C_TypeDef* I2Cx); + + +#endif /*__HAL_I2C_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_iwdg.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_iwdg.h new file mode 100644 index 0000000000..e0c88d6c67 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_iwdg.h @@ -0,0 +1,131 @@ +/** +****************************************************************************** +* @file HAL_iwdg.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the IWDG +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_IWDG_H +#define __HAL_IWDG_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup IWDG +* @{ +*/ + +/** @defgroup IWDG_Exported_Types +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Exported_Constants +* @{ +*/ + +/** @defgroup Write_access_to_IWDG_PR_and_IWDG_RLR_registers +* @{ +*/ + +#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) +#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) +#define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \ +((ACCESS) == IWDG_WriteAccess_Disable)) +/** +* @} +*/ + +/** @defgroup IWDG_prescaler +* @{ +*/ + +#define IWDG_Prescaler_4 ((uint8_t)0x00) +#define IWDG_Prescaler_8 ((uint8_t)0x01) +#define IWDG_Prescaler_16 ((uint8_t)0x02) +#define IWDG_Prescaler_32 ((uint8_t)0x03) +#define IWDG_Prescaler_64 ((uint8_t)0x04) +#define IWDG_Prescaler_128 ((uint8_t)0x05) +#define IWDG_Prescaler_256 ((uint8_t)0x06) +#define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \ +((PRESCALER) == IWDG_Prescaler_8) || \ + ((PRESCALER) == IWDG_Prescaler_16) || \ + ((PRESCALER) == IWDG_Prescaler_32) || \ + ((PRESCALER) == IWDG_Prescaler_64) || \ + ((PRESCALER) == IWDG_Prescaler_128)|| \ + ((PRESCALER) == IWDG_Prescaler_256)) +/** +* @} +*/ + +/** @defgroup IWDG_Flag +* @{ +*/ + +#define IWDG_FLAG_PVU ((uint16_t)0x0001) +#define IWDG_FLAG_RVU ((uint16_t)0x0002) +#define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU)) +#define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Exported_Functions +* @{ +*/ + +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); +void IWDG_SetReload(uint16_t Reload); +void IWDG_ReloadCounter(void); +void IWDG_Enable(void); +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); + +#endif /* __HAL_IWDG_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_misc.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_misc.h new file mode 100644 index 0000000000..c6ed999885 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_misc.h @@ -0,0 +1,136 @@ +/** +****************************************************************************** +* @file HAL_misc.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the +* miscellaneous firmware library functions. +****************************************************************************** + +*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_MISC_H +#define __HAL_MISC_H + +#ifdef __cplusplus + extern "C" { +#endif +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup MISC +* @{ +*/ + +/** @defgroup MISC_Exported_Types +* @{ +*/ + +/** +* @brief NVIC Init Structure definition +*/ + +typedef struct +{ + uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled. + This parameter can be a value of @ref IRQn_Type + (For the complete MM32 Devices IRQ Channels list, + please refer to HAL_device.h file) */ + + uint8_t NVIC_IRQChannelPriority; /*!< Specifies the priority level for the IRQ channel specified + in NVIC_IRQChannel. This parameter can be a value + between 0 and 3. */ + + FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel + will be enabled or disabled. + This parameter can be set either to ENABLE or DISABLE */ +} NVIC_InitTypeDef; + +/** +* @} +*/ + +/** @defgroup MISC_Exported_Constants +* @{ +*/ + +/** @defgroup MISC_System_Low_Power + * @{ + */ + +#define NVIC_LP_SEVONPEND ((uint8_t)0x10) +#define NVIC_LP_SLEEPDEEP ((uint8_t)0x04) +#define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02) +#define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \ +((LP) == NVIC_LP_SLEEPDEEP) || \ + ((LP) == NVIC_LP_SLEEPONEXIT)) +/** +* @} +*/ + +/** @defgroup MISC_Preemption_Priority_Group + * @{ + */ +#define IS_NVIC_PRIORITY(PRIORITY) ((PRIORITY) < 0x04) + +/** +* @} +*/ + +/** @defgroup SysTick_clock_source +* @{ +*/ + +#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) +#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \ +((SOURCE) == SysTick_CLKSource_HCLK_Div8)) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup MISC_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup MISC_Exported_Functions +* @{ +*/ + +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState); +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource); + +#ifdef __cplusplus +} +#endif + +#endif /* __HAL_MISC_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_pwr.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_pwr.h new file mode 100644 index 0000000000..4c091a814d --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_pwr.h @@ -0,0 +1,152 @@ +/** +****************************************************************************** +* @file HAL_pwr.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the PWR firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_PWR_H +#define __HAL_PWR_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup PWR +* @{ +*/ + +/** @defgroup PWR_Exported_Types +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Exported_Constants +* @{ +*/ + +/** @defgroup PVD_detection_level +* @{ +*/ + +#define PWR_PVDLevel_1V8 ((uint32_t)0x00000000) +#define PWR_PVDLevel_2V1 ((uint32_t)0x00000200) +#define PWR_PVDLevel_2V4 ((uint32_t)0x00000400) +#define PWR_PVDLevel_2V7 ((uint32_t)0x00000600) +#define PWR_PVDLevel_3V0 ((uint32_t)0x00000800) +#define PWR_PVDLevel_3V3 ((uint32_t)0x00000A00) +#define PWR_PVDLevel_3V6 ((uint32_t)0x00000C00) +#define PWR_PVDLevel_3V9 ((uint32_t)0x00000E00) +#define PWR_PVDLevel_4V2 ((uint32_t)0x00001000) +#define PWR_PVDLevel_4V5 ((uint32_t)0x00001200) +#define PWR_PVDLevel_4V8 ((uint32_t)0x00001400) +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_1V8) || ((LEVEL) == PWR_PVDLevel_2V1)|| \ +((LEVEL) == PWR_PVDLevel_2V4) || ((LEVEL) == PWR_PVDLevel_2V7)|| \ + ((LEVEL) == PWR_PVDLevel_3V0) || ((LEVEL) == PWR_PVDLevel_3V3)|| \ + ((LEVEL) == PWR_PVDLevel_3V6) || ((LEVEL) == PWR_PVDLevel_3V9)|| \ + ((LEVEL) == PWR_PVDLevel_4V2) || ((LEVEL) == PWR_PVDLevel_4V5)|| \ + ((LEVEL) == PWR_PVDLevel_4V8)) +/** +* @} +*/ + +/** @defgroup Regulator_state_is_STOP_mode +* @{ +*/ + +#define PWR_Regulator_ON ((uint32_t)0x00000000) +#define PWR_Regulator_LowPower ((uint32_t)0x00000002) +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ +((REGULATOR) == PWR_Regulator_LowPower)) +/** +* @} +*/ + +/** @defgroup STOP_mode_entry +* @{ +*/ + +#define PWR_STOPEntry_WFI ((uint8_t)0x01) +#define PWR_STOPEntry_WFE ((uint8_t)0x02) +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE)) + +/** +* @} +*/ + +/** @defgroup PWR_Flag +* @{ +*/ + +#define PWR_FLAG_WU ((uint32_t)0x00000001) +#define PWR_FLAG_SB ((uint32_t)0x00000002) +#define PWR_FLAG_PVDO ((uint32_t)0x00000004) +#define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ +((FLAG) == PWR_FLAG_PVDO)) + +#define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Exported_Functions +* @{ +*/ + +void PWR_DeInit(void); +void PWR_BackupAccessCmd(FunctionalState NewState); +void PWR_PVDCmd(FunctionalState NewState); +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); +void PWR_WakeUpPinCmd(FunctionalState NewState); +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); +void PWR_EnterSTANDBYMode(void); +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); +void PWR_ClearFlag(uint32_t PWR_FLAG); + +#endif /* __HAL_PWR_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_rcc.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_rcc.h new file mode 100644 index 0000000000..6ab7f8de22 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_rcc.h @@ -0,0 +1,368 @@ +/** +****************************************************************************** +* @file HAL_rcc.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the RCC firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ +//SJH&TM change + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_RCC_H +#define __HAL_RCC_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup RCC +* @{ +*/ + +/** @defgroup RCC_Exported_Types +* @{ +*/ + +typedef struct +{ + uint32_t SYSCLK_Frequency; + uint32_t HCLK_Frequency; + uint32_t PCLK1_Frequency; + uint32_t PCLK2_Frequency; +}RCC_ClocksTypeDef; + +/** +* @} +*/ + +/** @defgroup RCC_Exported_Constants +* @{ +*/ + +/** @defgroup HSE_configuration +* @{ +*/ + +#define RCC_HSE_OFF ((uint32_t)0x00000000) +#define RCC_HSE_ON ((uint32_t)0x00010000) +#define RCC_HSE_Bypass ((uint32_t)0x00040000) +#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ +((HSE) == RCC_HSE_Bypass)) + +/** +* @} +*/ + +/** @defgroup PLL_entry_clock_source +* @{ +*/ + +#define RCC_PLLSource_HSI_Div4 ((uint32_t)0x00000000) +#define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000) +#define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000) +#define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div4) || \ +((SOURCE) == RCC_PLLSource_HSE_Div1) || \ + ((SOURCE) == RCC_PLLSource_HSE_Div2)) +/** +* @} +*/ + + +/** @defgroup System_clock_source +* @{ +*/ + +#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) +#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) +#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) +#define RCC_SYSCLKSource_LSI ((uint32_t)0x00000003) +#define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \ +((SOURCE) == RCC_SYSCLKSource_HSE) || \ + ((SOURCE) == RCC_SYSCLKSource_PLLCLK||(SOURCE) == RCC_SYSCLKSource_LSI)) +/** +* @} +*/ + +/** @defgroup AHB_clock_source +* @{ +*/ + +#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) +#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) +#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) +#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) +#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) +#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) +#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) +#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) +#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) +#define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \ +((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \ + ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \ + ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \ + ((HCLK) == RCC_SYSCLK_Div512)) +/** +* @} +*/ + +/** @defgroup APB1_APB2_clock_source +* @{ +*/ + +#define RCC_HCLK_Div1 ((uint32_t)0x00000000) +#define RCC_HCLK_Div2 ((uint32_t)0x00000400) +#define RCC_HCLK_Div4 ((uint32_t)0x00000500) +#define RCC_HCLK_Div8 ((uint32_t)0x00000600) +#define RCC_HCLK_Div16 ((uint32_t)0x00000700) +#define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \ +((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \ + ((PCLK) == RCC_HCLK_Div16)) + +/** +* @} +*/ + +/** @defgroup PLL_multiplication_factor +* @{ +*/ + +#define RCC_PLLMul_2 ((uint32_t)0x00000000) +#define RCC_PLLMul_3 ((uint32_t)0x00040000) +#define RCC_PLLMul_4 ((uint32_t)0x00080000) +#define RCC_PLLMul_5 ((uint32_t)0x000C0000) +#define RCC_PLLMul_6 ((uint32_t)0x00100000) +#define RCC_PLLMul_7 ((uint32_t)0x00140000) +#define RCC_PLLMul_8 ((uint32_t)0x00180000) +#define RCC_PLLMul_9 ((uint32_t)0x001C0000) +#define RCC_PLLMul_10 ((uint32_t)0x00200000) +#define RCC_PLLMul_11 ((uint32_t)0x00240000) +#define RCC_PLLMul_12 ((uint32_t)0x00280000) +#define RCC_PLLMul_13 ((uint32_t)0x002C0000) +#define RCC_PLLMul_14 ((uint32_t)0x00300000) +#define RCC_PLLMul_15 ((uint32_t)0x00340000) +#define RCC_PLLMul_16 ((uint32_t)0x00380000) + +#define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_2) || ((MUL) == RCC_PLLMul_3) || \ +((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \ + ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \ + ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \ + ((MUL) == RCC_PLLMul_10) || ((MUL) == RCC_PLLMul_11) || \ + ((MUL) == RCC_PLLMul_12) || ((MUL) == RCC_PLLMul_13) || \ + ((MUL) == RCC_PLLMul_14) || ((MUL) == RCC_PLLMul_15) || \ + ((MUL) == RCC_PLLMul_16)) + + +/** +* @} +*/ + +/** @defgroup RCC_Interrupt_source +* @{ +*/ + +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xE0) == 0x00) && ((IT) != 0x00)) +#define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || \ +((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \ + ((IT) == RCC_IT_PLLRDY)) + +#define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x60) == 0x00) && ((IT) != 0x00)) +/** +* @} +*/ + +/** @defgroup USB_clock_source +* @{ +*/ + +#define RCC_USBCLKSource_PLLCLK_Div1 ((uint32_t)0x00000000) +#define RCC_USBCLKSource_PLLCLK_Div2 ((uint32_t)0x00400000) +#define RCC_USBCLKSource_PLLCLK_Div3 ((uint32_t)0x00800000) +#define RCC_USBCLKSource_PLLCLK_Div4 ((uint32_t)0x00c00000) +#define IS_RCC_USBCLK_SOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSource_PLLCLK_Div1) || \ +((SOURCE) == RCC_USBCLKSource_PLLCLK_Div2) || ((SOURCE) == RCC_USBCLKSource_PLLCLK_Div3)|| \ +((SOURCE) == RCC_USBCLKSource_PLLCLK_Div4)) + + +/** @defgroup AHB_peripheral +* @{ +*/ + +#define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001) +#define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004) +#define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010) +#define RCC_AHBPeriph_AES ((uint32_t)0x00000080) +#define RCC_AHBPeriph_GPIOA ((uint32_t)0x00020000) +#define RCC_AHBPeriph_GPIOB ((uint32_t)0x00040000) +#define RCC_AHBPeriph_GPIOC ((uint32_t)0x00080000) +#define RCC_AHBPeriph_GPIOD ((uint32_t)0x00100000) + + +#define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFE1FF6A) == 0x00) && ((PERIPH) != 0x00)) +/** +* @} +*/ + +/** @defgroup APB2_peripheral +* @{ +*/ + +#define RCC_APB2Periph_SYSCFG ((uint32_t)0x00000001) +#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200) +#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800) +#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) +#define RCC_APB2Periph_UART1 ((uint32_t)0x00004000) +#define RCC_APB2Periph_COMP ((uint32_t)0x00008000) +#define RCC_APB2Periph_TIM14 ((uint32_t)0x00010000) +#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000) +#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000) +#define RCC_APB2Periph_DBGMCU ((uint32_t)0x00400000) +#define RCC_APB2Periph_ALL ((uint32_t)0x0047DA01) +#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFB825FE) == 0x00) && ((PERIPH) != 0x00)) +/** +* @} +*/ + +/** @defgroup APB1_peripheral +* @{ +*/ + +#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) +#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) + +#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) +#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) +#define RCC_APB1Periph_UART2 ((uint32_t)0x00020000) + +#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) + +#define RCC_APB1Periph_USB ((uint32_t)0x00800000) +#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) +#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) +#define RCC_APB1Periph_CRS ((uint32_t)0x08000000) + +#define RCC_APB1Periph_ALL ((uint32_t)0x1AA24803) + +#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0xE55DB7FC) == 0x00) && ((PERIPH) != 0x00)) +/** +* @} +*/ + +/** @defgroup Clock_source_to_output_on_MCO_pin +* @{ +*/ + +#define RCC_MCO_NoClock ((uint8_t)0x00) +#define RCC_MCO_SYSCLK ((uint8_t)0x04) +#define RCC_MCO_HSI ((uint8_t)0x05) +#define RCC_MCO_HSE ((uint8_t)0x06) +#define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07) +#define RCC_MCO_LSI ((uint8_t)0x02) +#define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \ +((MCO) == RCC_MCO_SYSCLK) || ((MCO) == RCC_MCO_HSE) || \ + ((MCO) == RCC_MCO_PLLCLK_Div2)||((MCO) == RCC_MCO_LSI)) +/** +* @} +*/ + +/** @defgroup RCC_Flag +* @{ +*/ + +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_PINRST ((uint8_t)0x7A) +#define RCC_FLAG_PORRST ((uint8_t)0x7B) +#define RCC_FLAG_SFTRST ((uint8_t)0x7C) +#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) +#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) +#define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \ +((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \ + ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \ + ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \ + ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)) + +#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup RCC_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup RCC_Exported_Functions +* @{ +*/ + +void RCC_DeInit(void); +void RCC_HSEConfig(uint32_t RCC_HSE); +ErrorStatus RCC_WaitForHSEStartUp(void); +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); +void RCC_HSICmd(FunctionalState NewState); +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); +void RCC_PLLCmd(FunctionalState NewState); +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); +uint8_t RCC_GetSYSCLKSource(void); +void RCC_HCLKConfig(uint32_t RCC_SYSCLK); +void RCC_PCLK1Config(uint32_t RCC_HCLK); +void RCC_PCLK2Config(uint32_t RCC_HCLK); +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); +void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource); +void RCC_LSICmd(FunctionalState NewState); +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_ClockSecuritySystemCmd(FunctionalState NewState); +void RCC_MCOConfig(uint8_t RCC_MCO); +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); +void RCC_ClearFlag(void); +ITStatus RCC_GetITStatus(uint8_t RCC_IT); +void RCC_ClearITPendingBit(uint8_t RCC_IT); + +#endif /* __HAL_RCC_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_spi.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_spi.h new file mode 100644 index 0000000000..88ac78f6bf --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_spi.h @@ -0,0 +1,418 @@ +/** +****************************************************************************** +* @file HAL_spi.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the SPI firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_SPI_H +#define __HAL_SPI_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup SPI +* @{ +*/ + +/** @defgroup SPI_Exported_Types +* @{ +*/ + +/** +* @brief SPI Init structure definition +*/ + +typedef struct +{ + uint16_t SPI_Mode; + uint16_t SPI_DataSize; + uint16_t SPI_DataWidth; + uint16_t SPI_CPOL; + uint16_t SPI_CPHA; + uint16_t SPI_NSS; + uint16_t SPI_BaudRatePrescaler; + uint16_t SPI_FirstBit; +}SPI_InitTypeDef; + + +/** +* @} +*/ + +/** @defgroup SPI_Exported_Constants +* @{ +*/ + +#define IS_SPI_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == SPI0_BASE) || \ +((*(uint32_t*)&(PERIPH)) == SPI1_BASE)) + +#define IS_SPI_2_PERIPH(PERIPH) ((*(uint32_t*)&(PERIPH)) == SPI1_BASE) + + +/** +* @} +*/ + +/** @defgroup SPI_master_slave_mode +* @{ +*/ + +#define SPI_Mode_Master ((uint16_t)0x0004) +#define SPI_Mode_Slave ((uint16_t)0x0000) +#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \ +((MODE) == SPI_Mode_Slave)) +/** +* @} +*/ + +/** @defgroup SPI_data_size +* @{ +*/ + +#define SPI_DataSize_32b ((uint16_t)0x0800) +#define SPI_DataSize_8b ((uint16_t)0x0000) +#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_32b) || \ +((DATASIZE) == SPI_DataSize_8b)) + +/** +* @} +*/ + + +/** @defgroup SPI_7bit_8bit data width +* @{ +*/ + +#define SPI_DataWidth_1b ((uint16_t)0x0001) +#define SPI_DataWidth_2b ((uint16_t)0x0002) +#define SPI_DataWidth_3b ((uint16_t)0x0003) +#define SPI_DataWidth_4b ((uint16_t)0x0004) +#define SPI_DataWidth_5b ((uint16_t)0x0005) +#define SPI_DataWidth_6b ((uint16_t)0x0006) +#define SPI_DataWidth_7b ((uint16_t)0x0007) +#define SPI_DataWidth_8b ((uint16_t)0x0008) +#define SPI_DataWidth_9b ((uint16_t)0x0009) +#define SPI_DataWidth_10b ((uint16_t)0x000a) +#define SPI_DataWidth_11b ((uint16_t)0x000b) +#define SPI_DataWidth_12b ((uint16_t)0x000c) +#define SPI_DataWidth_13b ((uint16_t)0x000d) +#define SPI_DataWidth_14b ((uint16_t)0x000e) +#define SPI_DataWidth_15b ((uint16_t)0x000f) +#define SPI_DataWidth_16b ((uint16_t)0x0010) +#define SPI_DataWidth_17b ((uint16_t)0x0011) +#define SPI_DataWidth_18b ((uint16_t)0x0012) +#define SPI_DataWidth_19b ((uint16_t)0x0013) +#define SPI_DataWidth_20b ((uint16_t)0x0014) +#define SPI_DataWidth_21b ((uint16_t)0x0015) +#define SPI_DataWidth_22b ((uint16_t)0x0016) +#define SPI_DataWidth_23b ((uint16_t)0x0017) +#define SPI_DataWidth_24b ((uint16_t)0x0018) +#define SPI_DataWidth_25b ((uint16_t)0x0019) +#define SPI_DataWidth_26b ((uint16_t)0x001a) +#define SPI_DataWidth_27b ((uint16_t)0x001b) +#define SPI_DataWidth_28b ((uint16_t)0x001c) +#define SPI_DataWidth_29b ((uint16_t)0x001d) +#define SPI_DataWidth_30b ((uint16_t)0x001e) +#define SPI_DataWidth_31b ((uint16_t)0x001f) +#define SPI_DataWidth_32b ((uint16_t)0x0000) +#define IS_SPI_DATAWIDRH(WIDTH) (((WIDTH) == SPI_DataWidth_1b) || ((WIDTH) == SPI_DataWidth_2b)||\ + ((WIDTH) == SPI_DataWidth_3b)||((WIDTH) == SPI_DataWidth_4b)||\ + ((WIDTH) == SPI_DataWidth_5b)||((WIDTH) == SPI_DataWidth_6b)||\ + ((WIDTH) == SPI_DataWidth_7b)||((WIDTH) == SPI_DataWidth_8b)||\ + ((WIDTH) == SPI_DataWidth_9b)||((WIDTH) == SPI_DataWidth_10b)||\ + ((WIDTH) == SPI_DataWidth_11b)||((WIDTH) == SPI_DataWidth_12b)||\ + ((WIDTH) == SPI_DataWidth_13b)||((WIDTH) == SPI_DataWidth_14b)||\ + ((WIDTH) == SPI_DataWidth_15b)||((WIDTH) == SPI_DataWidth_16b)||\ + ((WIDTH) == SPI_DataWidth_17b)||((WIDTH) == SPI_DataWidth_18b)||\ + ((WIDTH) == SPI_DataWidth_19b)||((WIDTH) == SPI_DataWidth_20b)||\ + ((WIDTH) == SPI_DataWidth_21b)||((WIDTH) == SPI_DataWidth_22b)||\ + ((WIDTH) == SPI_DataWidth_23b)||((WIDTH) == SPI_DataWidth_24b)||\ + ((WIDTH) == SPI_DataWidth_25b)||((WIDTH) == SPI_DataWidth_26b)||\ + ((WIDTH) == SPI_DataWidth_27b)||((WIDTH) == SPI_DataWidth_28b)||\ + ((WIDTH) == SPI_DataWidth_29b)||((WIDTH) == SPI_DataWidth_30b)||\ + ((WIDTH) == SPI_DataWidth_31b)||((WIDTH) == SPI_DataWidth_32b)||) +/** +* @} +*/ + + +/** @defgroup SPI_Clock_Polarity +* @{ +*/ + +#define SPI_CPOL_Low ((uint16_t)0x0000) +#define SPI_CPOL_High ((uint16_t)0x0002) +#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \ +((CPOL) == SPI_CPOL_High)) +/** +* @} +*/ + +/** @defgroup SPI_Clock_Phase +* @{ +*/ + +#define SPI_CPHA_1Edge ((uint16_t)0x0001) +#define SPI_CPHA_2Edge ((uint16_t)0x0000) +#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \ +((CPHA) == SPI_CPHA_2Edge)) +/** +* @} +*/ + +/** @defgroup SPI_Slave_Select_management +* @{ +*/ + +#define SPI_NSS_Soft ((uint16_t)0x0000) +#define SPI_NSS_Hard ((uint16_t)0x0400) +#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \ +((NSS) == SPI_NSS_Hard)) + + +/** +* @} +*/ + +/** @defgroup SPI_NSS_internal_software_mangement +* @{ +*/ + +#define SPI_NSSInternalSoft_Set ((uint16_t)0x0001) +#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFFFE) +#define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \ +((INTERNAL) == SPI_NSSInternalSoft_Reset)) +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup SPI_BaudRate_Prescaler_ +* @{ +*/ + + +#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0002) +#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0004) +#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0008) +#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0010) +#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) +#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0040) +#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0080) +#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0100) +#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \ +((PRESCALER) == SPI_BaudRatePrescaler_4) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_8) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_16) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_32) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_64) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_128) || \ + ((PRESCALER) == SPI_BaudRatePrescaler_256)) +/** +* @} +*/ + +/** @defgroup SPI_MSB_LSB_transmission +* @{ +*/ + +#define SPI_FirstBit_MSB ((uint16_t)0x0000) +#define SPI_FirstBit_LSB ((uint16_t)0x0004) +#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \ +((BIT) == SPI_FirstBit_LSB)) + + +/** +* @} +*/ + +/** @defgroup SPI_DMA_transfer_requests +* @{ +*/ + +#define SPI_DMAReq_EN ((uint16_t)0x0200) +#define IS_SPI_DMAREQ(DMAREQ) ((DMAREQ) == SPI_DMAReq_EN) + + +/** +* @} +*/ + +/** @defgroup SPI TX Fifo and RX Fifo trigger level +* @{ +*/ +#define SPI_TXTLF ((uint16_t)0x0080) +#define SPI_RXTLF ((uint16_t)0x0020) +#define IS_SPI_FIFOTRIGGER(TRIGGER) (((TRIGGER) == SPI_TXTLF) && ((TRIGGER) == SPI_RXTLF)) + + + + + + + +/** +* @} +*/ + +/** @defgroup SPI_NSS_internal_software_mangement +* @{ +*/ + +#define SPI_CS_BIT0 ((uint16_t)0xfffe) +#define SPI_CS_BIT1 ((uint16_t)0xfffd) +#define SPI_CS_BIT2 ((uint16_t)0xfffb) +#define SPI_CS_BIT3 ((uint16_t)0xfff7) +#define SPI_CS_BIT4 ((uint16_t)0xffef) +#define SPI_CS_BIT5 ((uint16_t)0xffdf) +#define SPI_CS_BIT6 ((uint16_t)0xffbf) +#define SPI_CS_BIT7 ((uint16_t)0xff7f) +#define IS_SPI_CS(CS) (((CS) == SPI_CS_BIT0) || ((CS) == SPI_CS_BIT1)||\ +((CS) == SPI_CS_BIT2) || ((CS) == SPI_CS_BIT3)||\ + ((CS) == SPI_CS_BIT4) || ((CS) == SPI_CS_BIT5)||\ + ((CS) == SPI_CS_BIT6) || ((CS) == SPI_CS_BIT7)) +/** +* @} +*/ + + +/** @defgroup SPI_direction_transmit_receive +* @{ +*/ + +#define SPI_Direction_Rx ((uint16_t)0x0010) +#define SPI_Direction_Tx ((uint16_t)0x0008) +#define SPI_Disable_Tx ((uint16_t)0xfff7) +#define SPI_Disable_Rx ((uint16_t)0xffef) +#define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \ +((DIRECTION) == SPI_Direction_Tx) || \ + ((DIRECTION) == SPI_Disable_Tx) || \ + ((DIRECTION) == SPI_Disable_Rx)) +/** +* @} +*/ + +/** @defgroup SPI_interrupts_definition +* @{ +*/ +#define SPI_INT_EN ((uint16_t)0x0002) + +#define SPI_IT_TX ((uint8_t)0x01) +#define SPI_IT_RX ((uint8_t)0x02) + +#define IS_SPI_CONFIG_IT(IT) (((IT) == SPI_IT_TX) || \ +((IT) == SPI_IT_RX)) + +#define SPI_IT_UNDERRUN ((uint8_t)0x04) +#define SPI_IT_RXOVER ((uint8_t)0x08) +#define SPI_IT_RXMATCH ((uint8_t)0x10) +#define SPI_IT_RXFULL ((uint8_t)0x20) +#define SPI_IT_TXEPT ((uint8_t)0x40) + +#define IS_SPI_GET_IT(IT) (((IT) == SPI_IT_TX) || ((IT) == SPI_IT_RX) || \ +((IT) == SPI_IT_UNDERRUN) || ((IT) == SPI_IT_RXOVER) || \ + ((IT) == SPI_IT_RXMATCH) || ((IT) == SPI_IT_RXFULL) || \ + ((IT) == SPI_IT_TXEPT)) +/** +* @} +*/ + +/** @defgroup SPI_flags_definition +* @{ +*/ + + +#define SPI_FLAG_RXAVL ((uint16_t)0x0002) +#define SPI_FLAG_TXEPT ((uint16_t)0x0001) + +#define IS_SPI_GET_FLAG(FLAG) (((FLAG) == SPI_FLAG_RXAVL) || \ +((FLAG) == SPI_FLAG_TXEPT)) + +/** +* @} +*/ + +/** @defgroup SPI mode tx data transmit phase adjust set +*in slave mode according to txedge bit of CCTL register +* @{ +*/ + + +#define SPI_SlaveAdjust_FAST ((uint16_t)0x0020) +#define SPI_SlaveAdjust_LOW ((uint16_t)0xffdf) + +#define IS_SPI_SlaveAdjust(ADJUST) (((ADJUST) == SPI_SlaveAdjust_FAST) || \ +((ADJUST) == SPI_SlaveAdjust_LOW)) + + +/** +* @} +*/ + +/** @defgroup SPI_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup SPI_Exported_Functions +* @{ +*/ + +void SPI_DeInit(SPI_TypeDef* SPIx); +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct); +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct); +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_IT, FunctionalState NewState); +void SPI_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_DMAReq, FunctionalState NewState); +void SPI_FifoTrigger(SPI_TypeDef* SPIx, uint16_t SPI_FifoTriggerValue, FunctionalState NewState); +void SPI_SendData(SPI_TypeDef* SPIx, uint32_t Data); +uint32_t SPI_ReceiveData(SPI_TypeDef* SPIx); +void SPI_CSInternalSelected(SPI_TypeDef* SPIx, uint16_t SPI_CSInternalSelected,FunctionalState NewState); +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); +FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_FLAG); +ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_IT); +void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_IT); +void SPI_RxBytes(SPI_TypeDef* SPIx, uint16_t Number); +void SPI_SlaveAdjust(SPI_TypeDef* SPIx, uint16_t AdjustValue); +#endif /*__HAL_SPI_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_syscfg.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_syscfg.h new file mode 100644 index 0000000000..ff1f4645ce --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_syscfg.h @@ -0,0 +1,180 @@ +/** +****************************************************************************** +* @file HAL_syscfg.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the SYSCFG firmware +* library. +****************************************************************************** +* @attention +* +*

© COPYRIGHT 2017 MindMotion

+* +*/ + +/*!< Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_SYSCFG_H +#define __HAL_SYSCFG_H + +#ifdef __cplusplus +extern "C" { +#endif + + /*!< Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + + /** @addtogroup StdPeriph_Driver + * @{ + */ + + /** @addtogroup SYSCFG + * @{ + */ + /* Exported types ------------------------------------------------------------*/ + /* Exported constants --------------------------------------------------------*/ + + /** @defgroup SYSCFG_Exported_Constants + * @{ + */ + + /** @defgroup SYSCFG_EXTI_Port_Sources + * @{ + */ +#define EXTI_PortSourceGPIOA ((uint8_t)0x00) +#define EXTI_PortSourceGPIOB ((uint8_t)0x01) +#define EXTI_PortSourceGPIOC ((uint8_t)0x02) +#define EXTI_PortSourceGPIOD ((uint8_t)0x03) +#define EXTI_PortSourceGPIOE ((uint8_t)0x04) +#define EXTI_PortSourceGPIOF ((uint8_t)0x05) + +#define IS_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == EXTI_PortSourceGPIOA) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOB) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOC) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOD) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOE) || \ + ((PORTSOURCE) == EXTI_PortSourceGPIOF)) +/** +* @} +*/ + +/** @defgroup SYSCFG_EXTI_Pin_sources +* @{ +*/ +#define EXTI_PinSource0 ((uint8_t)0x00) +#define EXTI_PinSource1 ((uint8_t)0x01) +#define EXTI_PinSource2 ((uint8_t)0x02) +#define EXTI_PinSource3 ((uint8_t)0x03) +#define EXTI_PinSource4 ((uint8_t)0x04) +#define EXTI_PinSource5 ((uint8_t)0x05) +#define EXTI_PinSource6 ((uint8_t)0x06) +#define EXTI_PinSource7 ((uint8_t)0x07) +#define EXTI_PinSource8 ((uint8_t)0x08) +#define EXTI_PinSource9 ((uint8_t)0x09) +#define EXTI_PinSource10 ((uint8_t)0x0A) +#define EXTI_PinSource11 ((uint8_t)0x0B) +#define EXTI_PinSource12 ((uint8_t)0x0C) +#define EXTI_PinSource13 ((uint8_t)0x0D) +#define EXTI_PinSource14 ((uint8_t)0x0E) +#define EXTI_PinSource15 ((uint8_t)0x0F) + +#define IS_EXTI_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == EXTI_PinSource0) || \ +((PINSOURCE) == EXTI_PinSource1) || \ + ((PINSOURCE) == EXTI_PinSource2) || \ + ((PINSOURCE) == EXTI_PinSource3) || \ + ((PINSOURCE) == EXTI_PinSource4) || \ + ((PINSOURCE) == EXTI_PinSource5) || \ + ((PINSOURCE) == EXTI_PinSource6) || \ + ((PINSOURCE) == EXTI_PinSource7) || \ + ((PINSOURCE) == EXTI_PinSource8) || \ + ((PINSOURCE) == EXTI_PinSource9) || \ + ((PINSOURCE) == EXTI_PinSource10) || \ + ((PINSOURCE) == EXTI_PinSource11) || \ + ((PINSOURCE) == EXTI_PinSource12) || \ + ((PINSOURCE) == EXTI_PinSource13) || \ + ((PINSOURCE) == EXTI_PinSource14) || \ + ((PINSOURCE) == EXTI_PinSource15)) +/** +* @} +*/ + +/** @defgroup SYSCFG_Memory_Remap_Config +* @{ +*/ +#define SYSCFG_MemoryRemap_Flash ((uint8_t)0x00) +#define SYSCFG_MemoryRemap_SystemMemory ((uint8_t)0x01) +#define SYSCFG_MemoryRemap_SRAM ((uint8_t)0x03) + + +#define IS_SYSCFG_MEMORY_REMAP(REMAP) (((REMAP) == SYSCFG_MemoryRemap_Flash) || \ +((REMAP) == SYSCFG_MemoryRemap_SystemMemory) || \ + ((REMAP) == SYSCFG_MemoryRemap_SRAM)) + +/** +* @} +*/ + +/** @defgroup SYSCFG_DMA_Remap_Config +* @{ +*/ +#define SYSCFG_DMARemap_TIM17 SYSCFG_CFGR_TIM17_DMA_RMP /* Remap TIM17 DMA requests from channel1 to channel2 */ +#define SYSCFG_DMARemap_TIM16 SYSCFG_CFGR_TIM16_DMA_RMP /* Remap TIM16 DMA requests from channel3 to channel4 */ +#define SYSCFG_DMARemap_UART1Rx SYSCFG_CFGR_UART1RX_DMA_RMP /* Remap UART1 Rx DMA requests from channel3 to channel5 */ +#define SYSCFG_DMARemap_UART1Tx SYSCFG_CFGR_UART1TX_DMA_RMP /* Remap UART1 Tx DMA requests from channel2 to channel4 */ +#define SYSCFG_DMARemap_ADC1 SYSCFG_CFGR_ADC_DMA_RMP /* Remap ADC1 DMA requests from channel1 to channel2 */ + +#define IS_SYSCFG_DMA_REMAP(REMAP) (((REMAP) == SYSCFG_DMARemap_TIM17) || \ +((REMAP) == SYSCFG_DMARemap_TIM16) || \ + ((REMAP) == SYSCFG_DMARemap_UART1Rx) || \ + ((REMAP) == SYSCFG_DMARemap_UART1Tx) || \ + ((REMAP) == SYSCFG_CFGR1_TIM3_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_TIM2_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_TIM1_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_I2C1_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_UART3_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_UART2_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_SPI2_DMA_RMP) || \ + ((REMAP) == SYSCFG_CFGR1_TIM17_DMA_RMP2) || \ + ((REMAP) == SYSCFG_CFGR1_TIM16_DMA_RMP2) || \ + ((REMAP) == SYSCFG_DMARemap_ADC1)) + + +/** +* @} +*/ + + + + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +/* Function used to set the SYSCFG configuration to the default reset state **/ +void SYSCFG_DeInit(void); + +/* SYSCFG configuration functions *********************************************/ +void SYSCFG_MemoryRemapConfig(uint32_t SYSCFG_MemoryRemap); +void SYSCFG_DMAChannelRemapConfig(uint32_t SYSCFG_DMARemap, FunctionalState NewState); +void SYSCFG_I2CFastModePlusConfig(uint32_t SYSCFG_I2CFastModePlus, FunctionalState NewState); +void SYSCFG_IRDAEnvSelection(uint32_t SYSCFG_IRDAEnv); +void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex); +uint32_t SYSCFG_GetPendingIT(uint32_t ITSourceLine); +void SYSCFG_BreakConfig(uint32_t SYSCFG_Break); +FlagStatus SYSCFG_GetFlagStatus(uint32_t SYSCFG_Flag); +void SYSCFG_ClearFlag(uint32_t SYSCFG_Flag); + +#ifdef __cplusplus +} +#endif + +#endif /*__HAL_SYSCFG_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_tim.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_tim.h new file mode 100644 index 0000000000..6fa1dd7e5f --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_tim.h @@ -0,0 +1,1103 @@ +/** +****************************************************************************** +* @file HAL_tim.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the TIM firmware +* library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_TIM_H +#define __HAL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + + /* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + + /** @addtogroup StdPeriph_Driver + * @{ + */ + + /** @addtogroup TIM + * @{ + */ + + /* Exported types ------------------------------------------------------------*/ + + /** + * @brief TIM Time Base Init structure definition + * @note This sturcture is used with all TIMx. + */ + + typedef struct + { + uint32_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between 0x0000 and 0xFFFF */ + + uint32_t TIM_CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t TIM_Period; + /*!< Auto-Reload Register at the next update event. + This parameter must be a number between 0x0000 and 0xFFFF. */ + + uint32_t TIM_ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_Clock_Division_CKD */ + + uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + This parameter must be a number between 0x00 and 0xFF. + @note This parameter is valid only for TIM1. */ + } TIM_TimeBaseInitTypeDef; + + /** + * @brief TIM Output Compare Init structure definition + */ + + typedef struct + { + uint16_t TIM_OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint16_t TIM_OutputState; /*!< Specifies the TIM Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_state */ + + uint16_t TIM_OutputNState; /*!< Specifies the TIM complementary Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_N_state + @note This parameter is valid only for TIM1. */ + + uint16_t TIM_Pulse; + uint16_t TIM_OCPolarity; + uint16_t TIM_OCNPolarity; + uint16_t TIM_OCIdleState; + uint16_t TIM_OCNIdleState; + } TIM_OCInitTypeDef; + + /** + * @brief TIM Input Capture Init structure definition + */ + + typedef struct + { + uint16_t TIM_Channel; + uint16_t TIM_ICPolarity; + uint16_t TIM_ICSelection; + uint16_t TIM_ICPrescaler; + uint16_t TIM_ICFilter; + } TIM_ICInitTypeDef; + + /** + * @brief BDTR structure definition + */ + + typedef struct + { + uint16_t TIM_OSSRState; + uint16_t TIM_OSSIState; + uint16_t TIM_LOCKLevel; + uint16_t TIM_DeadTime; + uint16_t TIM_Break; + uint16_t TIM_BreakPolarity; + uint16_t TIM_AutomaticOutput; + } TIM_BDTRInitTypeDef; + + /** @defgroup TIM_Exported_constants + * @{ + */ + +#define IS_TIM_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == TIM1_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == TIM2_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == TIM3_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == TIM4_BASE)) + +/* LIST4: TIM 1, 2, 3, 14, 15, 16 and 17 */ +#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM14) || \ + ((PERIPH) == TIM16)|| \ + ((PERIPH) == TIM17)) + +/* LIST5: TIM 1, 2, 3, 15, 16 and 17 */ +#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM16)|| \ + ((PERIPH) == TIM17)) + +/* LIST6: TIM 1, 2, 3 */ +#define IS_TIM_LIST6_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3)) + +/* LIST7: TIM 1, 2, 3 and 14 */ +#define IS_TIM_LIST7_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM14)) + +/* LIST8: TIM 1, 2, 3 and 14 */ +#define IS_TIM_LIST8_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM14)) + +/* LIST9: TIM 1, 2, 3 */ +#define IS_TIM_LIST9_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3)) + +/* LIST10: TIM 1, 2, 3, 16 and 17 */ +#define IS_TIM_LIST10_PERIPH(PERIPH) (((PERIPH) == TIM1) || \ +((PERIPH) == TIM2) || \ + ((PERIPH) == TIM3) || \ + ((PERIPH) == TIM16)|| \ + ((PERIPH) == TIM17)) + +/* LIST1: TIM 11 */ +#define IS_TIM_LIST11_PERIPH(PERIPH) ((PERIPH) == TIM14) + + +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_and_PWM_modes +* @{ +*/ + +#define TIM_OCMode_Timing ((uint16_t)0x0000) +#define TIM_OCMode_Active ((uint16_t)0x0010) +#define TIM_OCMode_Inactive ((uint16_t)0x0020) +#define TIM_OCMode_Toggle ((uint16_t)0x0030) +#define TIM_OCMode_PWM1 ((uint16_t)0x0060) +#define TIM_OCMode_PWM2 ((uint16_t)0x0070) +#define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMode_Timing) || \ +((MODE) == TIM_OCMode_Active) || \ + ((MODE) == TIM_OCMode_Inactive) || \ + ((MODE) == TIM_OCMode_Toggle)|| \ + ((MODE) == TIM_OCMode_PWM1) || \ + ((MODE) == TIM_OCMode_PWM2)) +#define IS_TIM_OCM(MODE) (((MODE) == TIM_OCMode_Timing) || \ +((MODE) == TIM_OCMode_Active) || \ + ((MODE) == TIM_OCMode_Inactive) || \ + ((MODE) == TIM_OCMode_Toggle)|| \ + ((MODE) == TIM_OCMode_PWM1) || \ + ((MODE) == TIM_OCMode_PWM2) || \ + ((MODE) == TIM_ForcedAction_Active) || \ + ((MODE) == TIM_ForcedAction_InActive)) +/** +* @} +*/ + +/** @defgroup TIM_One_Pulse_Mode +* @{ +*/ + +#define TIM_OPMode_Single ((uint16_t)0x0008) +#define TIM_OPMode_Repetitive ((uint16_t)0x0000) +#define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \ +((MODE) == TIM_OPMode_Repetitive)) +/** +* @} +*/ + +/** @defgroup TIM_Channel +* @{ +*/ + +#define TIM_Channel_1 ((uint16_t)0x0000) +#define TIM_Channel_2 ((uint16_t)0x0004) +#define TIM_Channel_3 ((uint16_t)0x0008) +#define TIM_Channel_4 ((uint16_t)0x000C) + +#define IS_TIM_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ +((CHANNEL) == TIM_Channel_2) || \ + ((CHANNEL) == TIM_Channel_3) || \ + ((CHANNEL) == TIM_Channel_4)) +#define IS_TIM_COMPLEMENTARY_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ +((CHANNEL) == TIM_Channel_2) || \ + ((CHANNEL) == TIM_Channel_3)) +#define IS_TIM_PWMI_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \ +((CHANNEL) == TIM_Channel_2)) + +/** +* @} +*/ + +/** @defgroup TIM_Clock_Division_CKD +* @{ +*/ + +#define TIM_CKD_DIV1 ((uint16_t)0x0000) +#define TIM_CKD_DIV2 ((uint16_t)0x0100) +#define TIM_CKD_DIV4 ((uint16_t)0x0200) +#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \ +((DIV) == TIM_CKD_DIV2) || \ + ((DIV) == TIM_CKD_DIV4)) +/** +* @} +*/ + +/** @defgroup TIM_Counter_Mode +* @{ +*/ + +#define TIM_CounterMode_Up ((uint16_t)0x0000) +#define TIM_CounterMode_Down ((uint16_t)0x0010) +#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) +#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) +#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) +#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) || \ +((MODE) == TIM_CounterMode_Down) || \ + ((MODE) == TIM_CounterMode_CenterAligned1) || \ + ((MODE) == TIM_CounterMode_CenterAligned2) || \ + ((MODE) == TIM_CounterMode_CenterAligned3)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_Polarity +* @{ +*/ + +#define TIM_OCPolarity_High ((uint16_t)0x0000) +#define TIM_OCPolarity_Low ((uint16_t)0x0002) +#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \ +((POLARITY) == TIM_OCPolarity_Low)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_N_Polarity +* @{ +*/ + +#define TIM_OCNPolarity_High ((uint16_t)0x0000) +#define TIM_OCNPolarity_Low ((uint16_t)0x0008) +#define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPolarity_High) || \ +((POLARITY) == TIM_OCNPolarity_Low)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_state +* @{ +*/ + +#define TIM_OutputState_Disable ((uint16_t)0x0000) +#define TIM_OutputState_Enable ((uint16_t)0x0001) +#define IS_TIM_OUTPUT_STATE(STATE) (((STATE) == TIM_OutputState_Disable) || \ +((STATE) == TIM_OutputState_Enable)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_N_state +* @{ +*/ + +#define TIM_OutputNState_Disable ((uint16_t)0x0000) +#define TIM_OutputNState_Enable ((uint16_t)0x0004) +#define IS_TIM_OUTPUTN_STATE(STATE) (((STATE) == TIM_OutputNState_Disable) || \ +((STATE) == TIM_OutputNState_Enable)) +/** +* @} +*/ + +/** @defgroup TIM_Capture_Compare_state +* @{ +*/ + +#define TIM_CCx_Enable ((uint16_t)0x0001) +#define TIM_CCx_Disable ((uint16_t)0x0000) +#define IS_TIM_CCX(CCX) (((CCX) == TIM_CCx_Enable) || \ +((CCX) == TIM_CCx_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Capture_Compare_N_state +* @{ +*/ + +#define TIM_CCxN_Enable ((uint16_t)0x0004) +#define TIM_CCxN_Disable ((uint16_t)0x0000) +#define IS_TIM_CCXN(CCXN) (((CCXN) == TIM_CCxN_Enable) || \ +((CCXN) == TIM_CCxN_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Break_Input_enable_disable +* @{ +*/ + +#define TIM_Break_Enable ((uint16_t)0x1000) +#define TIM_Break_Disable ((uint16_t)0x0000) +#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \ +((STATE) == TIM_Break_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Break_Polarity +* @{ +*/ + +#define TIM_BreakPolarity_Low ((uint16_t)0x0000) +#define TIM_BreakPolarity_High ((uint16_t)0x2000) +#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \ +((POLARITY) == TIM_BreakPolarity_High)) +/** +* @} +*/ + +/** @defgroup TIM_AOE_Bit_Set_Reset +* @{ +*/ + +#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) +#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \ +((STATE) == TIM_AutomaticOutput_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Lock_level +* @{ +*/ + +#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) +#define TIM_LOCKLevel_1 ((uint16_t)0x0100) +#define TIM_LOCKLevel_2 ((uint16_t)0x0200) +#define TIM_LOCKLevel_3 ((uint16_t)0x0300) +#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \ +((LEVEL) == TIM_LOCKLevel_1) || \ + ((LEVEL) == TIM_LOCKLevel_2) || \ + ((LEVEL) == TIM_LOCKLevel_3)) +/** +* @} +*/ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state +* @{ +*/ + +#define TIM_OSSIState_Enable ((uint16_t)0x0400) +#define TIM_OSSIState_Disable ((uint16_t)0x0000) +#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \ +((STATE) == TIM_OSSIState_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state +* @{ +*/ + +#define TIM_OSSRState_Enable ((uint16_t)0x0800) +#define TIM_OSSRState_Disable ((uint16_t)0x0000) +#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \ +((STATE) == TIM_OSSRState_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_Idle_State +* @{ +*/ + +#define TIM_OCIdleState_Set ((uint16_t)0x0100) +#define TIM_OCIdleState_Reset ((uint16_t)0x0000) +#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \ +((STATE) == TIM_OCIdleState_Reset)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_N_Idle_State +* @{ +*/ + +#define TIM_OCNIdleState_Set ((uint16_t)0x0200) +#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) +#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \ +((STATE) == TIM_OCNIdleState_Reset)) +/** +* @} +*/ + +/** @defgroup TIM_Input_Capture_Polarity +* @{ +*/ + +#define TIM_ICPolarity_Rising ((uint16_t)0x0000) +#define TIM_ICPolarity_Falling ((uint16_t)0x0002) +#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) +#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ +((POLARITY) == TIM_ICPolarity_Falling)|| \ + ((POLARITY) == TIM_ICPolarity_BothEdge)) +/** +* @} +*/ + +/** @defgroup TIM_Input_Capture_Selection +* @{ +*/ + +#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be +connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be +connected to IC2, IC1, IC4 or IC3, respectively. */ +#define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ +#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \ +((SELECTION) == TIM_ICSelection_IndirectTI) || \ + ((SELECTION) == TIM_ICSelection_TRC)) +/** +* @} +*/ + +/** @defgroup TIM_Input_Capture_Prescaler +* @{ +*/ + +#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */ +#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */ +#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */ +#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */ +#define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \ +((PRESCALER) == TIM_ICPSC_DIV2) || \ + ((PRESCALER) == TIM_ICPSC_DIV4) || \ + ((PRESCALER) == TIM_ICPSC_DIV8)) +/** +* @} +*/ + +/** @defgroup TIM_interrupt_sources +* @{ +*/ + +#define TIM_IT_Update ((uint16_t)0x0001) +#define TIM_IT_CC1 ((uint16_t)0x0002) +#define TIM_IT_CC2 ((uint16_t)0x0004) +#define TIM_IT_CC3 ((uint16_t)0x0008) +#define TIM_IT_CC4 ((uint16_t)0x0010) +#define TIM_IT_COM ((uint16_t)0x0020) +#define TIM_IT_Trigger ((uint16_t)0x0040) +#define TIM_IT_Break ((uint16_t)0x0080) +#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000)) + +#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \ +((IT) == TIM_IT_CC1) || \ + ((IT) == TIM_IT_CC2) || \ + ((IT) == TIM_IT_CC3) || \ + ((IT) == TIM_IT_CC4) || \ + ((IT) == TIM_IT_COM) || \ + ((IT) == TIM_IT_Trigger) || \ + ((IT) == TIM_IT_Break)) +/** +* @} +*/ + +/** @defgroup TIM_DMA_Base_address +* @{ +*/ + +#define TIM_DMABase_CR1 ((uint16_t)0x0000) +#define TIM_DMABase_CR2 ((uint16_t)0x0001) +#define TIM_DMABase_SMCR ((uint16_t)0x0002) +#define TIM_DMABase_DIER ((uint16_t)0x0003) +#define TIM_DMABase_SR ((uint16_t)0x0004) +#define TIM_DMABase_EGR ((uint16_t)0x0005) +#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) +#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) +#define TIM_DMABase_CCER ((uint16_t)0x0008) +#define TIM_DMABase_CNT ((uint16_t)0x0009) +#define TIM_DMABase_PSC ((uint16_t)0x000A) +#define TIM_DMABase_ARR ((uint16_t)0x000B) +#define TIM_DMABase_RCR ((uint16_t)0x000C) +#define TIM_DMABase_CCR1 ((uint16_t)0x000D) +#define TIM_DMABase_CCR2 ((uint16_t)0x000E) +#define TIM_DMABase_CCR3 ((uint16_t)0x000F) +#define TIM_DMABase_CCR4 ((uint16_t)0x0010) +#define TIM_DMABase_BDTR ((uint16_t)0x0011) +#define TIM_DMABase_DCR ((uint16_t)0x0012) +#define TIM_DMABase_OR ((uint16_t)0x0013) +#define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \ +((BASE) == TIM_DMABase_CR2) || \ + ((BASE) == TIM_DMABase_SMCR) || \ + ((BASE) == TIM_DMABase_DIER) || \ + ((BASE) == TIM_DMABase_SR) || \ + ((BASE) == TIM_DMABase_EGR) || \ + ((BASE) == TIM_DMABase_CCMR1) || \ + ((BASE) == TIM_DMABase_CCMR2) || \ + ((BASE) == TIM_DMABase_CCER) || \ + ((BASE) == TIM_DMABase_CNT) || \ + ((BASE) == TIM_DMABase_PSC) || \ + ((BASE) == TIM_DMABase_ARR) || \ + ((BASE) == TIM_DMABase_RCR) || \ + ((BASE) == TIM_DMABase_CCR1) || \ + ((BASE) == TIM_DMABase_CCR2) || \ + ((BASE) == TIM_DMABase_CCR3) || \ + ((BASE) == TIM_DMABase_CCR4) || \ + ((BASE) == TIM_DMABase_BDTR) || \ + ((BASE) == TIM_DMABase_DCR) || \ + ((BASE) == TIM_DMABase_OR)) +/** +* @} +*/ + + +/** @defgroup TIM_DMA_Burst_Length +* @{ +*/ + +#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) +#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) +#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) +#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) +#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) +#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) +#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) +#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) +#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) +#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) +#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) +#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) +#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) +#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) +#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) +#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) +#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) +#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) +#define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \ +((LENGTH) == TIM_DMABurstLength_2Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_3Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_4Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_5Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_6Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_7Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_8Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_9Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_10Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_11Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_12Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_13Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_14Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_15Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_16Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_17Transfers) || \ + ((LENGTH) == TIM_DMABurstLength_18Transfers)) +/** +* @} +*/ + +/** @defgroup TIM_DMA_sources +* @{ +*/ + +#define TIM_DMA_Update ((uint16_t)0x0100) +#define TIM_DMA_CC1 ((uint16_t)0x0200) +#define TIM_DMA_CC2 ((uint16_t)0x0400) +#define TIM_DMA_CC3 ((uint16_t)0x0800) +#define TIM_DMA_CC4 ((uint16_t)0x1000) +#define TIM_DMA_COM ((uint16_t)0x2000) +#define TIM_DMA_Trigger ((uint16_t)0x4000) +#define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000)) + +/** +* @} +*/ + +/** @defgroup TIM_External_Trigger_Prescaler +* @{ +*/ + +#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) +#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) +#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) +#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) +#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \ +((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \ + ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \ + ((PRESCALER) == TIM_ExtTRGPSC_DIV8)) +/** +* @} +*/ + +/** @defgroup TIM_Internal_Trigger_Selection +* @{ +*/ + +#define TIM_TS_ITR0 ((uint16_t)0x0000) +#define TIM_TS_ITR1 ((uint16_t)0x0010) +#define TIM_TS_ITR2 ((uint16_t)0x0020) +#define TIM_TS_ITR3 ((uint16_t)0x0030) +#define TIM_TS_TI1F_ED ((uint16_t)0x0040) +#define TIM_TS_TI1FP1 ((uint16_t)0x0050) +#define TIM_TS_TI2FP2 ((uint16_t)0x0060) +#define TIM_TS_ETRF ((uint16_t)0x0070) +#define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ +((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3) || \ + ((SELECTION) == TIM_TS_TI1F_ED) || \ + ((SELECTION) == TIM_TS_TI1FP1) || \ + ((SELECTION) == TIM_TS_TI2FP2) || \ + ((SELECTION) == TIM_TS_ETRF)) +#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \ +((SELECTION) == TIM_TS_ITR1) || \ + ((SELECTION) == TIM_TS_ITR2) || \ + ((SELECTION) == TIM_TS_ITR3)) +/** +* @} +*/ + +/** @defgroup TIM_TIx_External_Clock_Source +* @{ +*/ + +#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) +#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) +#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) + +/** +* @} +*/ + +/** @defgroup TIM_External_Trigger_Polarity +* @{ +*/ +#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) +#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) +#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \ +((POLARITY) == TIM_ExtTRGPolarity_NonInverted)) +/** +* @} +*/ + +/** @defgroup TIM_Prescaler_Reload_Mode +* @{ +*/ + +#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) +#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) +#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \ +((RELOAD) == TIM_PSCReloadMode_Immediate)) +/** +* @} +*/ + +/** @defgroup TIM_Forced_Action +* @{ +*/ + +#define TIM_ForcedAction_Active ((uint16_t)0x0050) +#define TIM_ForcedAction_InActive ((uint16_t)0x0040) +#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \ +((ACTION) == TIM_ForcedAction_InActive)) +/** +* @} +*/ + +/** @defgroup TIM_Encoder_Mode +* @{ +*/ + +#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) +#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) +#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) +#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \ +((MODE) == TIM_EncoderMode_TI2) || \ + ((MODE) == TIM_EncoderMode_TI12)) +/** +* @} +*/ + + +/** @defgroup TIM_Event_Source +* @{ +*/ + +#define TIM_EventSource_Update ((uint16_t)0x0001) +#define TIM_EventSource_CC1 ((uint16_t)0x0002) +#define TIM_EventSource_CC2 ((uint16_t)0x0004) +#define TIM_EventSource_CC3 ((uint16_t)0x0008) +#define TIM_EventSource_CC4 ((uint16_t)0x0010) +#define TIM_EventSource_COM ((uint16_t)0x0020) +#define TIM_EventSource_Trigger ((uint16_t)0x0040) +#define TIM_EventSource_Break ((uint16_t)0x0080) +#define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000)) + +/** +* @} +*/ + +/** @defgroup TIM_Update_Source +* @{ +*/ + +#define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow +or the setting of UG bit, or an update generation +through the slave mode controller. */ +#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */ +#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \ +((SOURCE) == TIM_UpdateSource_Regular)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_Preload_State +* @{ +*/ + +#define TIM_OCPreload_Enable ((uint16_t)0x0008) +#define TIM_OCPreload_Disable ((uint16_t)0x0000) +#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \ +((STATE) == TIM_OCPreload_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_Fast_State +* @{ +*/ + +#define TIM_OCFast_Enable ((uint16_t)0x0004) +#define TIM_OCFast_Disable ((uint16_t)0x0000) +#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \ +((STATE) == TIM_OCFast_Disable)) + +/** +* @} +*/ + +/** @defgroup TIM_Output_Compare_Clear_State +* @{ +*/ + +#define TIM_OCClear_Enable ((uint16_t)0x0080) +#define TIM_OCClear_Disable ((uint16_t)0x0000) +#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \ +((STATE) == TIM_OCClear_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Trigger_Output_Source +* @{ +*/ + +#define TIM_TRGOSource_Reset ((uint16_t)0x0000) +#define TIM_TRGOSource_Enable ((uint16_t)0x0010) +#define TIM_TRGOSource_Update ((uint16_t)0x0020) +#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) +#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) +#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) +#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) +#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) +#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \ +((SOURCE) == TIM_TRGOSource_Enable) || \ + ((SOURCE) == TIM_TRGOSource_Update) || \ + ((SOURCE) == TIM_TRGOSource_OC1) || \ + ((SOURCE) == TIM_TRGOSource_OC1Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC2Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC3Ref) || \ + ((SOURCE) == TIM_TRGOSource_OC4Ref)) +/** +* @} +*/ + +/** @defgroup TIM_Slave_Mode +* @{ +*/ + +#define TIM_SlaveMode_Reset ((uint16_t)0x0004) +#define TIM_SlaveMode_Gated ((uint16_t)0x0005) +#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) +#define TIM_SlaveMode_External1 ((uint16_t)0x0007) +#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \ +((MODE) == TIM_SlaveMode_Gated) || \ + ((MODE) == TIM_SlaveMode_Trigger) || \ + ((MODE) == TIM_SlaveMode_External1)) +/** +* @} +*/ + +/** @defgroup TIM_Master_Slave_Mode +* @{ +*/ + +#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) +#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) +#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \ +((STATE) == TIM_MasterSlaveMode_Disable)) +/** +* @} +*/ + +/** @defgroup TIM_Flags +* @{ +*/ + +#define TIM_FLAG_Update ((uint16_t)0x0001) +#define TIM_FLAG_CC1 ((uint16_t)0x0002) +#define TIM_FLAG_CC2 ((uint16_t)0x0004) +#define TIM_FLAG_CC3 ((uint16_t)0x0008) +#define TIM_FLAG_CC4 ((uint16_t)0x0010) +#define TIM_FLAG_COM ((uint16_t)0x0020) +#define TIM_FLAG_Trigger ((uint16_t)0x0040) +#define TIM_FLAG_Break ((uint16_t)0x0080) +#define TIM_FLAG_CC1OF ((uint16_t)0x0200) +#define TIM_FLAG_CC2OF ((uint16_t)0x0400) +#define TIM_FLAG_CC3OF ((uint16_t)0x0800) +#define TIM_FLAG_CC4OF ((uint16_t)0x1000) +#define IS_TIM_GET_FLAG(FLAG) (((FLAG) == TIM_FLAG_Update) || \ +((FLAG) == TIM_FLAG_CC1) || \ + ((FLAG) == TIM_FLAG_CC2) || \ + ((FLAG) == TIM_FLAG_CC3) || \ + ((FLAG) == TIM_FLAG_CC4) || \ + ((FLAG) == TIM_FLAG_COM) || \ + ((FLAG) == TIM_FLAG_Trigger) || \ + ((FLAG) == TIM_FLAG_Break) || \ + ((FLAG) == TIM_FLAG_CC1OF) || \ + ((FLAG) == TIM_FLAG_CC2OF) || \ + ((FLAG) == TIM_FLAG_CC3OF) || \ + ((FLAG) == TIM_FLAG_CC4OF)) + + +#define IS_TIM_CLEAR_FLAG(TIM_FLAG) ((((TIM_FLAG) & (uint16_t)0xE100) == 0x0000) && ((TIM_FLAG) != 0x0000)) +/** +* @} +*/ + + +/** @defgroup TIM_Input_Capture_Filer_Value +* @{ +*/ + +#define IS_TIM_IC_FILTER(ICFILTER) ((ICFILTER) <= 0xF) +/** +* @} +*/ + +/** @defgroup TIM_External_Trigger_Filter +* @{ +*/ + +#define IS_TIM_EXT_FILTER(EXTFILTER) ((EXTFILTER) <= 0xF) +/** +* @} +*/ + +/** @defgroup TIM_OCReferenceClear +* @{ +*/ +#define TIM_OCReferenceClear_ETRF ((uint16_t)0x0008) +#define TIM_OCReferenceClear_OCREFCLR ((uint16_t)0x0000) +#define TIM_OCREFERENCECECLEAR_SOURCE(SOURCE) (((SOURCE) == TIM_OCReferenceClear_ETRF) || \ +((SOURCE) == TIM_OCReferenceClear_OCREFCLR)) + +/** +* @} +*/ +/** @defgroup TIM_Remap +* @{ +*/ +#define TIM14_GPIO ((uint16_t)0x0000) +#define TIM14_RTC_CLK ((uint16_t)0x0001) +#define TIM14_HSEDiv32 ((uint16_t)0x0002) +#define TIM14_MCO ((uint16_t)0x0003) + +#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM14_GPIO)|| \ +((TIM_REMAP) == TIM14_RTC_CLK) || \ + ((TIM_REMAP) == TIM14_HSEDiv32) || \ + ((TIM_REMAP) == TIM14_MCO)) +/** +* @} +*/ + +/** @defgroup TIM_Legacy +* @{ +*/ + +#define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer +#define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers +#define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers +#define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers +#define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers +#define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers +#define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers +#define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers +#define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers +#define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers +#define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers +#define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers +#define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers +#define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers +#define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers +#define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers +#define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers +#define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers +/** +* @} +*/ + +/** +* @} +*/ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +/* TimeBase management ********************************************************/ +void TIM_DeInit(TIM_TypeDef* TIMx); +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); +void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter); +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload); +uint32_t TIM_GetCounter(TIM_TypeDef* TIMx); +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Advanced-control timers (TIM1) specific features*******************/ +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Output Compare management **************************************************/ +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1); +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2); +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3); +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4); +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_SelectOCREFClear(TIM_TypeDef* TIMx, uint16_t TIM_OCReferenceClear); +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Input Capture management ***************************************************/ +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx); +uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx); +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); + +/* Interrupts, DMA and flags management ***************************************/ +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Clocks management **********************************************************/ +void TIM_InternalClockConfig(TIM_TypeDef* TIMx); +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter); +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); + + +/* Synchronization management *************************************************/ +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); + +/* Specific interface management **********************************************/ +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); + +/* Specific remapping management **********************************************/ +void TIM_RemapConfig(TIM_TypeDef* TIMx, uint16_t TIM_Remap); + + +#ifdef __cplusplus +} +#endif + +#endif /*__HAL_TIM_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_uart.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_uart.h new file mode 100644 index 0000000000..10ed65b208 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_uart.h @@ -0,0 +1,247 @@ +/** +****************************************************************************** +* @file HAL_UART.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the UART +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_UART_H +#define __HAL_UART_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup UART +* @{ +*/ + +/** @defgroup UART_Exported_Types +* @{ +*/ + +/** +* @brief UART Init Structure definition +*/ + +typedef struct +{ + uint32_t UART_BaudRate; + uint16_t UART_WordLength; + uint16_t UART_StopBits; + uint16_t UART_Parity; + uint16_t UART_Mode; + uint16_t UART_HardwareFlowControl; +} UART_InitTypeDef; + + +/** +* @} +*/ + +/** @defgroup UART_Exported_Constants +* @{ +*/ + +#define IS_UART_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == UART1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == UART2_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == UART3_BASE)) +#define IS_UART_123_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == UART1_BASE) || \ +((*(uint32_t*)&(PERIPH)) == UART2_BASE) || \ + ((*(uint32_t*)&(PERIPH)) == UART3_BASE)) + +/** @defgroup UART_Word_Length +* @{ +*/ + +#define UART_WordLength_5b ((uint16_t)0x0000) +#define UART_WordLength_6b ((uint16_t)0x0010) +#define UART_WordLength_7b ((uint16_t)0x0020) +#define UART_WordLength_8b ((uint16_t)0x0030) + + +#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WordLength_5b) || \ +((LENGTH) == UART_WordLength_6b) || \ + ((LENGTH) == UART_WordLength_7b) || \ + ((LENGTH) == UART_WordLength_8b)) +/** +* @} +*/ + +/** @defgroup UART_Stop_Bits +* @{ +*/ + +#define UART_StopBits_1 ((uint16_t)0x0000) +#define UART_StopBits_2 ((uint16_t)0x0004) + +#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_StopBits_1) || \ +((STOPBITS) == UART_StopBits_2)) + +/** +* @} +*/ + +/** @defgroup UART_Parity +* @{ +*/ + +#define UART_Parity_No ((uint16_t)0x0000) +#define UART_Parity_Even ((uint16_t)0x0003) +#define UART_Parity_Odd ((uint16_t)0x0001) +#define IS_UART_PARITY(PARITY) (((PARITY) == UART_Parity_No) || \ +((PARITY) == UART_Parity_Even) || \ + ((PARITY) == UART_Parity_Odd)) +/** +* @} +*/ + +/** @defgroup UART_Mode +* @{ +*/ + +#define UART_Mode_Rx ((uint16_t)0x0008) +#define UART_Mode_Tx ((uint16_t)0x0010) +#define IS_UART_MODE(MODE) ((((MODE) & (uint16_t)0xFFE7) == 0x00) && ((MODE) != (uint16_t)0x00)) + +#define UART_EN ((uint16_t)0x0001) + +/** +* @} +*/ + +/** @defgroup UART_Hardware_Flow_Control +* @{ +*/ +#define UART_HardwareFlowControl_None ((uint16_t)0x0000) + +#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ +(((CONTROL) == UART_HardwareFlowControl_None) || \ + ((CONTROL) == UART_HardwareFlowControl_RTS) || \ + ((CONTROL) == UART_HardwareFlowControl_CTS) || \ + ((CONTROL) == UART_HardwareFlowControl_RTS_CTS)) + +/** @defgroup UART_Interrupt_definition +* @{ +*/ + + +#define UART_IT_ERR ((uint16_t)0x0020) +#define UART_IT_PE ((uint16_t)0x0010) +#define UART_OVER_ERR ((uint16_t)0x0008) +#define UART_TIMEOUT_ERR ((uint16_t)0x0004) +#define UART_IT_RXIEN ((uint16_t)0x0002) +#define UART_IT_TXIEN ((uint16_t)0x0001) + +#define IS_UART_CONFIG_IT(IT) (((IT) == UART_IT_PE) || ((IT) == UART_IT_TXIEN) || \ +((IT) == UART_IT_RXIEN) || ((IT) == UART_IT_ERR)) + +#define IS_UART_GET_IT(IT) (((IT) == UART_IT_PE) || ((IT) == UART_IT_TXIEN) || \ +((IT) == UART_IT_ERR) || ((IT) == UART_IT_RXIEN) || \ + ((IT) == UART_OVER_ERR) || ((IT) == UART_TIMEOUT_ERR)) + +#define IS_UART_CLEAR_IT(IT) ((IT) == UART_IT_RXIEN) + + +/** +* @} +*/ + +/** @defgroup UART_DMA_Requests +* @{ +*/ +#define UART_DMAReq_EN ((uint16_t)0x0002) + +#define IS_UART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFD) == 0x00) && ((DMAREQ) != (uint16_t)0x00)) + +/** +* @} +*/ + + +/** @defgroup UART_Flags +* @{ +*/ + + +#define UART_FLAG_TXEMPTY ((uint16_t)0x0008) +#define UART_FLAG_TXFULL ((uint16_t)0x0004) +#define UART_FLAG_RXAVL ((uint16_t)0x0002) +#define UART_FLAG_TXEPT ((uint16_t)0x0001) + + +#define IS_UART_FLAG(FLAG) (((FLAG) == UART_FLAG_TXEMPTY) || ((FLAG) == UART_FLAG_TXFULL) || \ +((FLAG) == UART_FLAG_RXAVL) || ((FLAG) == UART_FLAG_TXEPT)) + + +#define IS_UART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0x00FF) == 0x00) && ((FLAG) != (uint16_t)0x00)) + +#define IS_UART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x0044AA21)) +#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) +#define IS_UART_DATA(DATA) ((DATA) <= 0x1FF) + +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup UART_Exported_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup UART_Exported_Functions +* @{ +*/ + +void UART_DeInit(UART_TypeDef* UARTx); +void UART_Init(UART_TypeDef* UARTx, UART_InitTypeDef* UART_InitStruct); +void UART_StructInit(UART_InitTypeDef* UART_InitStruct); +void UART_Cmd(UART_TypeDef* UARTx, FunctionalState NewState); +void UART_ITConfig(UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState); +void UART_DMACmd(UART_TypeDef* UARTx, uint16_t UART_DMAReq, FunctionalState NewState); +void UART_SendData(UART_TypeDef* UARTx, uint16_t Data); +uint16_t UART_ReceiveData(UART_TypeDef* UARTx); +FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx, uint16_t UART_FLAG); +void UART_ClearFlag(UART_TypeDef* UARTx, uint16_t UART_FLAG); +ITStatus UART_GetITStatus(UART_TypeDef* UARTx, uint16_t UART_IT); +void UART_ClearITPendingBit(UART_TypeDef* UARTx, uint16_t UART_IT); + +#endif /* __HAL_UART_H */ +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_wwdg.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_wwdg.h new file mode 100644 index 0000000000..7a49a29a63 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/HAL_wwdg.h @@ -0,0 +1,106 @@ +/** +****************************************************************************** +* @file HAL_wwdg.h +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file contains all the functions prototypes for the WWDG +* firmware library. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __HAL_WWDG_H +#define __HAL_WWDG_H + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_device.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @addtogroup WWDG +* @{ +*/ + +/** @defgroup WWDG_Exported_Types +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Exported_Constants +* @{ +*/ + +/** @defgroup WWDG_Prescaler +* @{ +*/ + +#define WWDG_Prescaler_1 ((uint32_t)0x00000000) +#define WWDG_Prescaler_2 ((uint32_t)0x00000080) +#define WWDG_Prescaler_4 ((uint32_t)0x00000100) +#define WWDG_Prescaler_8 ((uint32_t)0x00000180) +#define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \ +((PRESCALER) == WWDG_Prescaler_2) || \ + ((PRESCALER) == WWDG_Prescaler_4) || \ + ((PRESCALER) == WWDG_Prescaler_8)) +#define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F) +#define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F)) + +/** +* @} +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Exported_Macros +* @{ +*/ +/** +* @} +*/ + +/** @defgroup WWDG_Exported_Functions +* @{ +*/ + +void WWDG_DeInit(void); +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); +void WWDG_SetWindowValue(uint8_t WindowValue); +void WWDG_EnableIT(void); +void WWDG_SetCounter(uint8_t Counter); +void WWDG_Enable(uint8_t Counter); +FlagStatus WWDG_GetFlagStatus(void); +void WWDG_ClearFlag(void); + +#endif /* __HAL_WWDG_H */ + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/dtype.h b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/dtype.h new file mode 100644 index 0000000000..670dbf5af4 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/inc/dtype.h @@ -0,0 +1,56 @@ +/****************************************Copyright (c)**************************************************** +** + +**--------------File Info--------------------------------------------------------------------------------- +** File name: dtype.h +** modified Date: 22/08/2017 +** Last Version: V2.0.0 +** Descriptions: ¶¨Ò幤³ÌÒªÓõ½µÄÊý¾ÝÀàÐÍ£¬°üÀ¨º¯Êý¿âºÍÓ¦ÓôúÂë¶¼Ó¦¸ÃʹÓñ¾ÎļþÀﶨÒåµÄÊý¾ÝÀàÐÍ +** +*********************************************************************************************************/ +#ifndef _DTYPE_H_ +#define _DTYPE_H_ //ÕâÑù´¦ÀíÊÇΪÁ˱ÜÃâͬһ¸öÎļþÖØ¸´°üº¬¸ÃÍ·Îļþ + +/********************************************************************************************************* +/¶¨ÒåÊý¾ÝµÄ¶ÁÐ´ÌØÐÔ£¬³£ÓÃÓÚÍâΧ¼Ä´æÆ÷µÄ´æ´¢ÏÞÖÆ +*********************************************************************************************************/ +#define __I volatile const //Ö»¶Á +#define __O volatile //ֻд +#define __IO volatile //¶Áд + +/********************************************************************************************************* +³£ÓÃÊý¾ÝÀàÐͶ¨Òå +*********************************************************************************************************/ +typedef unsigned char int8u; //ÎÞ·ûºÅ8λÕûÐͱäÁ¿ +typedef signed char int8s; //ÓзûºÅ8λÕûÐͱäÁ¿ +typedef unsigned short int16u; //ÎÞ·ûºÅ16λÕûÐͱäÁ¿ +typedef signed short int16s; //ÓзûºÅ16λÕûÐͱäÁ¿ +typedef unsigned int int32u; //ÎÞ·ûºÅ32λÕûÐͱäÁ¿ +typedef signed int int32s; //ÓзûºÅ32λÕûÐͱäÁ¿ +typedef float fp32; //µ¥¾«¶È¸¡µãÊý£¨32볤¶È£© +typedef double fp64; //Ë«¾«¶È¸¡µãÊý£¨64볤¶È£© + +/********************************************************************************************************* +±ê×¼º¯Êý¿âÓõ½µÄÊý¾ÝÀàÐͶ¨Òå +*********************************************************************************************************/ +//typedef signed char int8_t; +//typedef signed short int int16_t; +//typedef signed int int32_t; +// +//typedef unsigned char uint8_t; +//typedef unsigned short int uint16_t; +//typedef unsigned int uint32_t; +// +//typedef int32_t s32; +//typedef int16_t s16; +//typedef int8_t s8; +//typedef uint32_t u32; +//typedef uint16_t u16; +//typedef uint8_t u8; +/* +typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) +*/ +#endif //_DTYPE_H_ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_adc.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_adc.c new file mode 100644 index 0000000000..099525a7a9 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_adc.c @@ -0,0 +1,816 @@ +/** +****************************************************************************** +* @file HAL_adc.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the ADC firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_adc.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup ADC +* @brief ADC driver modules +* @{ +*/ + +/** @defgroup ADC_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup ADC_Private_Defines +* @{ +*/ + + +/* ADCR register Mask */ +#define ADCR_CLEAR_Mask ((uint32_t)0xFFFFF180) + +/* ADCFG register Mask */ +#define ADCFG_CLEAR_Mask ((uint32_t)0xFFFFFF8F) +#define ADCFG_SAMCTL_Set ((uint32_t)0x1c00) +#define ADCFG_TSEN_Set ((uint32_t)0x00000004) +#define ADCFG_VSEN_Set ((uint32_t)0x00000008) + +/* ADC ADEN mask */ +#define ADCFG_ADEN_Set ((uint32_t)0x00000001) +#define ADCFG_ADEN_Reset ((uint32_t)0xFFFFFFFE) + +/* ADC DMA mask */ +#define ADCR_DMA_Set ((uint32_t)0x00000008) +#define ADCR_DMA_Reset ((uint32_t)0xFFFFFFF7) + +/* ADC Software start mask */ +#define ADCR_SWSTART_Set ((uint32_t)0x00000100) +#define ADCR_SWSTART_Reset ((uint32_t)0xFFFFFEFF) + +/* ADC EXTTRIG mask */ +#define ADCR_EXTTRIG_Set ((uint32_t)0x00000004) +#define ADCR_EXTTRIG_Reset ((uint32_t)0xFFFFFFFB) + +/*seletec channle enable */ +#define CHEN0_ENABLE ((uint32_t)0x00000001) +#define CHEN1_ENABLE ((uint32_t)0x00000002) +#define CHEN2_ENABLE ((uint32_t)0x00000004) +#define CHEN3_ENABLE ((uint32_t)0x00000008) +#define CHEN4_ENABLE ((uint32_t)0x00000010) +#define CHEN5_ENABLE ((uint32_t)0x00000020) +#define CHEN6_ENABLE ((uint32_t)0x00000040) +#define CHEN7_ENABLE ((uint32_t)0x00000080) +#define CHEN8_ENABLE ((uint32_t)0x00000100) +#define CHEN9_ENABLE ((uint32_t)0x00000200) +#define CHEN10_ENABLE ((uint32_t)0x00004000) +#define CHEN11_ENABLE ((uint32_t)0x00008000) +#define CHALL_ENABLE ((uint32_t)0x0000C3ff) + +#define CHEN_DISABLE ((uint32_t)0xFFFF3C00) + +/* ADC EXTSEL mask */ +#define ADCR_EXTSEL_Reset ((uint32_t)0xFFFFFF8F) + +/* ADC Analog watchdog enable mode mask */ +#define ADCFG_AWDMode_Reset ((uint32_t)0xFFFFFFFD) +#define ADCFG_AWDMode_Set ((uint32_t)0x00000002) + +/* ADC AWDCH mask */ +#define ADCR_AWDCH_Reset ((uint32_t)0xFFFF0FFF) + +/* ADC TSPD mask */ +#define ADCHS_TSVREFE_Set ((uint32_t)0x00004000) +#define ADCHS_TSVREFE_Reset ((uint32_t)0xFFFFBFFF) + +#define ADCHS_VSVREFE_Set ((uint32_t)0x00008000) +#define ADCHS_VSVREFE_Reset ((uint32_t)0xFFFF7FFF) + +/* ADC1 DATA register base address */ +#define ADDATA_ADDRESS ((uint32_t)0x40012400) +/** +* @} +*/ + +/** @defgroup ADC_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup ADC_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup ADC_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup ADC_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the ADCx peripheral registers to their default +* reset values. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @retval : None +*/ +void ADC_DeInit(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + switch (*(uint32_t*)&ADCx) + { + case ADC1_BASE: + /* Enable ADC1 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE); + /* Release ADC1 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE); + break; + + default: + break; + } +} + +/** +* @brief Initializes the ADCx peripheral according to the specified parameters +* in the ADC_InitStruct. +* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. +* @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that +* contains the configuration information for the specified +* ADC peripheral. +* @retval : None +*/ +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) +{ + uint32_t tmpreg1 = 0; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_MODE(ADC_InitStruct->ADC_Mode)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode)); + assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode)); + assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv)); + assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); + /*---------------------------- ADCx ADCFG Configuration -----------------*/ + /* Get the ADCx ADCFG value */ + tmpreg1 = ADCx->ADCFG; + /* Clear ADCPRE bits */ + tmpreg1 &= ADCFG_CLEAR_Mask; + /* Configure ADCx: AD convertion prescare*/ + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_PRESCARE); + /* Write to ADCx ADCFG */ + ADCx->ADCFG = tmpreg1; + + /*---------------------------- ADCx ADCR Configuration -----------------*/ + /* Get the ADCx ADCR value */ + tmpreg1 = ADCx->ADCR; + /* Clear ALIGN , ADMD, TRGSEL, DMAEN,TRGEN,ADWIE and ADIE bits */ + tmpreg1 &= ADCR_CLEAR_Mask; + /* Configure ADCx: external trigger event and AD conversion mode and ALIGN*/ + /* Set ALIGN bit according to ADC_DataAlign value */ + /* Set TRGEN bits according to ADC_ContinuousConvMode value */ + /* Set TRGSEL bits according to ADC_ExternalTrigConv value */ + /* Set ADMD bit according to ADC_Mode value */ + tmpreg1 |= ((uint32_t)ADC_InitStruct->ADC_DataAlign) | ADC_InitStruct->ADC_ExternalTrigConv | + ((uint32_t)ADC_InitStruct->ADC_Mode) ; + + /* Write to ADCx ADCR */ + ADCx->ADCR = tmpreg1; + +} + +/** +* @brief Fills each ADC_InitStruct member with its default value. +* @param ADC_InitStruct : pointer to an ADC_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) +{ + /* Initialize the ADC_PRESCARE values */ + ADC_InitStruct->ADC_PRESCARE = ADC_PCLK2_PRESCARE_16; + /* Initialize the ADC_Mode member */ + ADC_InitStruct->ADC_Mode = ADC_Mode_Single; + /* Initialize the ADC_ContinuousConvMode member */ + ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; + /* Initialize the ADC_ExternalTrigConv member */ + ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + /* Initialize the ADC_DataAlign member */ + ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; + /* Initialize the ADC_Resolution member */ + ADC_InitStruct->ADC_Resolution = ADC_Resolution_12b; +} + +/** +* @brief Enables or disables the specified ADC peripheral. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param NewState: new state of the ADCx peripheral. This parameter +* can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the ADEN bit */ + ADCx->ADCFG |= ADCFG_ADEN_Set; + } + else + { + /* Disable the selected ADC peripheral */ + ADCx->ADCFG &= ADCFG_ADEN_Reset; + } +} + +/** +* @brief Enables or disables the specified ADC DMA request. +* @param ADCx: where x can be 1 or 2 to select the ADC peripheral. +* @param NewState: new state of the selected ADC DMA transfer. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_DMA_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC DMA request */ + ADCx->ADCR |= ADCR_DMA_Set; + } + else + { + /* Disable the selected ADC DMA request */ + ADCx->ADCR &= ADCR_DMA_Reset; + } +} + +/** +* @brief Enables or disables the specified ADC interrupts. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param ADC_IT: specifies the ADC interrupt sources to be enabled +* or disabled. +* This parameter can be any combination of the following values: +* @arg ADC_IT_EOC: End of conversion interrupt mask +* @arg ADC_IT_AWD: Analog watchdog interrupt mask +* @param NewState: new state of the specified ADC interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState) +{ + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_ADC_IT(ADC_IT)); + /* Get the ADC IT index */ + //itmask = (uint8_t)ADC_IT; + if (NewState != DISABLE) + { + /* Enable the selected ADC interrupts */ + ADCx->ADCR |= ADC_IT; + } + else + { + /* Disable the selected ADC interrupts */ + ADCx->ADCR &= (~(uint32_t)ADC_IT); + } +} + +/** +* @brief Enables or disables the selected ADC software start conversion . +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param NewState: new state of the selected ADC software start conversion. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC conversion on external event and start the selected + ADC conversion */ + /*Set ADST bit*/ + ADCx->ADCR |= ADCR_SWSTART_Set; + } + else + { + /* Disable the selected ADC conversion on external event and stop the selected + ADC conversion */ + ADCx->ADCR &= ADCR_SWSTART_Reset; + } +} + +/** +* @brief Gets the selected ADC Software start conversion Status. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @retval : The new state of ADC software start conversion (SET or RESET). +*/ +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Check the status of ADST bit */ + if ((ADCx->ADCR & ADCR_SWSTART_Set) != (uint32_t)RESET) + { + /* ADST bit is set */ + bitstatus = SET; + } + else + { + /* ADST bit is reset */ + bitstatus = RESET; + } + /* Return the ADST bit status */ + return bitstatus; +} + +/** +* @brief Configures for the selected ADC channel its corresponding +* rank in the sequencer and its sample time. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param ADC_Channel: the ADC channel to configure. +* This parameter can be one of the following values: +* @arg ADC_Channel_0: ADC Channel0 selected +* @arg ADC_Channel_1: ADC Channel1 selected +* @arg ADC_Channel_2: ADC Channel2 selected +* @arg ADC_Channel_3: ADC Channel3 selected +* @arg ADC_Channel_4: ADC Channel4 selected +* @arg ADC_Channel_5: ADC Channel5 selected +* @arg ADC_Channel_6: ADC Channel6 selected +* @arg ADC_Channel_7: ADC Channel7 selected +* @arg ADC_Channel_8: ADC Channel8 selected +* @retval : None +*/ +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + assert_param(IS_ADC_REGULAR_RANK(Rank)); + assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime)); + tmpreg = ADCx->ADCFG; + tmpreg &= ~(ADCFG_SAMCTL_Set); + tmpreg|=ADC_SampleTime<<10; + ADCx->ADCFG = tmpreg; + switch(ADC_Channel) + { + /* set the CHEN0 bit for channel 0 enable*/ + case ADC_Channel_0: ADCx->ADCHS |= CHEN0_ENABLE; + break; + /* set the CHEN1 bit for channel 1 enable*/ + case ADC_Channel_1: ADCx->ADCHS |= CHEN1_ENABLE; + break; + /* set the CHEN2 bit for channel 2 enable*/ + case ADC_Channel_2: ADCx->ADCHS |= CHEN2_ENABLE; + break; + /* set the CHEN3 bit for channel 3 enable*/ + case ADC_Channel_3: ADCx->ADCHS |= CHEN3_ENABLE; + break; + /* set the CHEN4 bit for channel 4 enable*/ + case ADC_Channel_4: ADCx->ADCHS |= CHEN4_ENABLE; + break; + /* set the CHEN5 bit for channel 5 enable*/ + case ADC_Channel_5: ADCx->ADCHS |= CHEN5_ENABLE; + break; + /* set the CHEN6 bit for channel 6 enable*/ + case ADC_Channel_6: ADCx->ADCHS |= CHEN6_ENABLE; + break; + /* set the CHEN7 bit for channel 7 enable*/ + case ADC_Channel_7: ADCx->ADCHS |= CHEN7_ENABLE; + break; + /* set the CHEN8 bit for channel 8 enable*/ + case ADC_Channel_8: ADCx->ADCHS |= CHEN8_ENABLE; + break; + case ADC_Channel_9: ADCx->ADCHS |= CHEN9_ENABLE; + break; + case ADC_Channel_10: ADCx->ADCHS |= CHEN10_ENABLE; //Temperature Sensor + break; + case ADC_Channel_11: ADCx->ADCHS |= CHEN11_ENABLE; //Voltage Sensor + break; + case ADC_Channel_All:ADCx->ADCHS |= CHALL_ENABLE; + break; + default: + ADCx->ADCHS &= CHEN_DISABLE; + break; + + } + +} + +/** +* @brief Enables or disables the ADCx conversion through external trigger. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param NewState: new state of the selected ADC external trigger +* start of conversion. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC conversion on external event */ + ADCx->ADCR |= ADCR_EXTTRIG_Set; + } + else + { + /* Disable the selected ADC conversion on external event */ + ADCx->ADCR &= ADCR_EXTTRIG_Reset; + } +} + +/** +* @brief Returns the last ADCx conversion result data for regular channel. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @retval : The Data conversion value. +*/ +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + /* Return the selected ADC conversion value */ + if(((ADCx->ADCFG&0x000000380)>>7)==0) + return (uint16_t) ADCx->ADDATA; + else if(((ADCx->ADCFG&0x000000380)>>7)==1) + return (uint16_t) (ADCx->ADDATA>>1); + else if(((ADCx->ADCFG&0x000000380)>>7)==2) + return (uint16_t) (ADCx->ADDATA>>2); + else if(((ADCx->ADCFG&0x000000380)>>7)==3) + return (uint16_t) (ADCx->ADDATA>>3); + else if(((ADCx->ADCFG&0x000000380)>>7)==4) + return (uint16_t) (ADCx->ADDATA>>4); + return (uint16_t) ADCx->ADDATA; +} + + +/** +* @brief Configures the ADCx external trigger for injected channels conversion. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param ADC_ExternalTrigInjecConv: specifies the ADC trigger to +* start injected conversion. +* This parameter can be one of the following values: +* @arg ADC_ExternalTrigConv_T1_CC1: Timer1 capture +* compare1 selected (for ADC1) +* @arg ADC_ExternalTrigConv_T1_CC2: Timer1 capture +* compare2 selected (for ADC1) +* @arg ADC_ExternalTrigConv_T1_CC3: Timer1 capture +* compare3 selected (for ADC1) +* @arg ADC_ExternalTrigConv_T2_CC2: Timer2 capture +* compare2 selected (for ADC1) +* @arg ADC_ExternalTrigConv_T3_TRGO: Timer3 TRGO event +* selected (for ADC1) +* @arg ADC_ExternalTrigConv_T3_CC1: Timer3 capture +* compare1 selected (for ADC1) +* @arg ADC_ExternalTrigConv_EXTI_11: EXTI line 11 event +* cselected (for ADC1) +* @retval : None +*/ +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv)); + /* Get the old register value */ + tmpreg = ADCx->ADCR; + /* Clear the old external event selection for injected group */ + tmpreg &= ADCR_EXTSEL_Reset; + /* Set the external event selection for injected group */ + tmpreg |= ADC_ExternalTrigInjecConv; + /* Store the new register value */ + ADCx->ADCR = tmpreg; +} + +/** +* @brief Enables or disables the ADCx injected channels conversion +* through external trigger +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param NewState: new state of the selected ADC external trigger +* start of injected conversion. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC external event selection for injected group */ + ADCx->ADCR |= ADCR_EXTTRIG_Set; + } + else + { + /* Disable the selected ADC external event selection for injected group */ + ADCx->ADCR &= ADCR_EXTTRIG_Reset; + } +} + + +/** +* @brief Enables or disables the analog watchdog on single/all regular +* or injected channels +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param ADC_AnalogWatchdog: the ADC analog watchdog configuration. +* This parameter can be one of the following values: +* @arg ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on +* a single regular channel +* @arg ADC_AnalogWatchdog_None: No channel guarded by the +* analog watchdog +* analog watchdog +* @retval : None +*/ +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx,FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected ADC window comparison */ + ADCx->ADCFG |= ADCFG_AWDMode_Set; + } + else + { + /* Disable the selected ADC window comparison */ + ADCx->ADCFG &= ADCFG_AWDMode_Reset; + } +} + +/** +* @brief Configures the high and low thresholds of the analog watchdog. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param HighThreshold: the ADC analog watchdog High threshold value. +* This parameter must be a 12bit value. +* @param LowThreshold: the ADC analog watchdog Low threshold value. +* This parameter must be a 12bit value. +* @retval : None +*/ +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, + uint16_t LowThreshold) +{ + uint32_t tempThreshold; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_THRESHOLD(HighThreshold)); + assert_param(IS_ADC_THRESHOLD(LowThreshold)); + /* Get the ADCx high threshold */ + tempThreshold = HighThreshold; + /* Set the ADCx high threshold and the ADCx low threshold */ + ADCx->ADCMPR = (tempThreshold<<16) | LowThreshold; +} + +/** +* @brief Configures the analog watchdog guarded single channel +* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. +* @param ADC_Channel: the ADC channel to configure for the analog +* watchdog. +* This parameter can be one of the following values: +* @arg ADC_Channel_0: ADC Channel0 selected +* @arg ADC_Channel_1: ADC Channel1 selected +* @arg ADC_Channel_2: ADC Channel2 selected +* @arg ADC_Channel_3: ADC Channel3 selected +* @arg ADC_Channel_4: ADC Channel4 selected +* @arg ADC_Channel_5: ADC Channel5 selected +* @arg ADC_Channel_6: ADC Channel6 selected +* @arg ADC_Channel_7: ADC Channel7 selected +* @arg ADC_Channel_8: ADC Channel8 selected +* @arg ADC_Channel_9: ADC Channel9 selected +* @arg ADC_Channel_10: ADC Channel10 selected +* @arg ADC_Channel_11: ADC Channel11 selected +* @arg ADC_Channel_All: ADC all Channel selected +* @retval : None +*/ +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CHANNEL(ADC_Channel)); + /* Get the old register value */ + tmpreg = ADCx->ADCR; + /* Clear the Analog watchdog channel select bits */ + tmpreg &= ADCR_AWDCH_Reset; + /* Set the Analog watchdog channel */ + tmpreg |= (ADC_Channel<<12); + /* Store the new register value */ + ADCx->ADCR = tmpreg; +} + +/** +* @brief Enables or disables the temperature sensor and Vrefint channel. +* @param NewState: new state of the temperature sensor. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ + +void ADC_TempSensorCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable temperature sensor */ + ADC1->ADCFG|=ADCFG_TSEN_Set; + + /* Enable the temperature sensor channel*/ + ADC1->ADCHS |= ADCHS_TSVREFE_Set ; + } + else + { + /* Disbale temperature sensor */ + ADC1->ADCFG&=~ADCFG_TSEN_Set; + + /* Disable the temperature sensor channel*/ + ADC1->ADCHS &= ADCHS_TSVREFE_Reset; + + } +} + +/** +* @brief Enables or disables the temperature sensor and Vrefint channel. +* @param NewState: new state of the temperature sensor. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void ADC_VrefintCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable temperature sensor */ + ADC1->ADCFG|=ADCFG_VSEN_Set; + + /* Enable the temperature sensor and Vrefint channel*/ + ADC1->ADCHS |= ADCHS_VSVREFE_Set ; + } + else + { + /* Disbale temperature sensor */ + ADC1->ADCFG&=~ADCFG_VSEN_Set; + + /* Disable the temperature sensor and Vrefint channel*/ + ADC1->ADCHS &= ADCHS_VSVREFE_Reset; + + } +} + +/** +* @brief Checks whether the specified ADC flag is set or not. +* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. +* @param ADC_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg ADC_FLAG_AWD: Analog watchdog flag +* @arg ADC_FLAG_EOC: End of conversion flag +* @arg ADC_FLAG_BUSY: AD conversion busy flag +* @retval : The new state of ADC_FLAG (SET or RESET). +*/ +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_GET_FLAG(ADC_FLAG)); + /* Check the status of the specified ADC flag */ + if ((ADCx->ADSTA & ADC_FLAG) != (uint8_t)RESET) + { + /* ADC_FLAG is set */ + bitstatus = SET; + } + else + { + /* ADC_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the ADC_FLAG status */ + return bitstatus; +} + +/** +* @brief Clears the ADCx's pending flags. +* @param ADCx: where x can be 1, 2 to select the ADC peripheral. +* @param ADC_FLAG: specifies the flag to clear. +* This parameter can be any combination of the following values: +* @arg ADC_FLAG_AWD: Analog watchdog flag +* @arg ADC_FLAG_EOC: End of conversion flag +* @retval : None +*/ +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG)); + /* Clear the selected ADC flags */ + ADCx->ADSTA |= ADC_FLAG; +} + +/** +* @brief Checks whether the specified ADC interrupt has occurred or not. +* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. +* @param ADC_IT: specifies the ADC interrupt source to check. +* This parameter can be one of the following values: +* @arg ADC_IT_EOC: End of conversion interrupt mask +* @arg ADC_IT_AWD: Analog watchdog interrupt mask +* @retval : The new state of ADC_IT (SET or RESET). +*/ +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_GET_IT(ADC_IT)); + + /* Check the status of the specified ADC interrupt */ + if (((ADCx->ADSTA & ADC_IT)) != (uint32_t)RESET) + { + /* ADC_IT is set */ + bitstatus = SET; + } + else + { + /* ADC_IT is reset */ + bitstatus = RESET; + } + /* Return the ADC_IT status */ + return bitstatus; +} + +/** +* @brief Clears the ADCx’s interrupt pending bits. +* @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral. +* @param ADC_IT: specifies the ADC interrupt pending bit to clear. +* This parameter can be any combination of the following values: +* @arg ADC_IT_EOC: End of conversion interrupt mask +* @arg ADC_IT_AWD: Analog watchdog interrupt mask +* @retval : None +*/ +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + /* Check the parameters */ + assert_param(IS_ADC_ALL_PERIPH(ADCx)); + assert_param(IS_ADC_IT(ADC_IT)); + /* Clear the selected ADC interrupt pending bits */ + ADCx->ADSTA = ADC_IT; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_bkp.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_bkp.c new file mode 100644 index 0000000000..4a08d77a85 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_bkp.c @@ -0,0 +1,60 @@ +/** +****************************************************************************** +* @file HAL_bkp.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the BKP firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_bkp.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup BKP +* @brief BKP driver modules +* @{ +*/ + +/** +* @brief Writes user data to the specified Data Backup Register. +* @param BKP_DR: specifies the Data Backup Register. +* This parameter can be BKP_DRx where x:[1, 42] +* @param Data: data to write +* @retval : None +*/ +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_BKP_DR(BKP_DR)); + *(__IO uint16_t *) (BKP_BASE + BKP_DR) = Data; +} + +/** +* @brief Reads data from the specified Data Backup Register. +* @param BKP_DR: specifies the Data Backup Register. +* This parameter can be BKP_DRx where x:[1, 42] +* @retval : The content of the specified Data Backup Register +*/ +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR) +{ + /* Check the parameters */ + assert_param(IS_BKP_DR(BKP_DR)); + return (*(__IO uint16_t *) (BKP_BASE + BKP_DR)); +} + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_can.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_can.c new file mode 100644 index 0000000000..01d3a6050a --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_can.c @@ -0,0 +1,968 @@ +/** +****************************************************************************** +* @file HAL_can.c +* @author AE Team +* @version V1.5.0 +* @date 02/08/2017 +* @brief This file provides all the CAN firmware functions. +****************************************************************************** +* @attention +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_can.h" +#include "HAL_rcc.h" + +/** +* @brief: Deinitialinzes the CAN registers to their default reset values +* @retval: None +*/ +void CAN_DeInit(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + switch (*(uint32_t*)&CANx) + { + case CAN1_BASE: + /* Enable CAN1 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE); + /* Release CAN1 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE); + break; + default: + break; + } + +} + +/** +* @brief Initializes the CAN peripheral according to the specified +* parameters in the CAN_InitStruct. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure that +* contains the configuration information for the CAN peripheral. +* @retval : Constant indicates initialization succeed which will be +* CANINITFAILED or CANINITOK. +*/ +uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_Basic_InitTypeDef* CAN_Basic_InitStruct) +{ + uint8_t InitStatus = CANINITFAILED; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(CAN_Basic_InitStruct->SJW)); + assert_param(IS_FUNCTIONAL_STATE(CAN_Basic_InitStruct->BRP)); + assert_param(IS_FUNCTIONAL_STATE(CAN_Basic_InitStruct->SAM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_Basic_InitStruct->TESG2)); + assert_param(IS_FUNCTIONAL_STATE(CAN_Basic_InitStruct->TESG1)); + + CANx->BTR0 = ((uint32_t)(CAN_Basic_InitStruct->SJW)<<6)|((uint32_t)(CAN_Basic_InitStruct->BRP)); + CANx->BTR1 = ((uint32_t)(CAN_Basic_InitStruct->SAM)<<7)|((uint32_t)(CAN_Basic_InitStruct->TESG2)<<4)|\ + ((uint32_t)(CAN_Basic_InitStruct->TESG1)); + if(CAN_Basic_InitStruct->GTS == ENABLE) + { + CANx->CMR |= (uint32_t)CAN_SleepMode; + } + else + { + CANx->CMR &= ~(uint32_t)CAN_SleepMode; + } + + CANx->CDR |= ((CAN_Basic_InitStruct->CBP)<<6) | ((CAN_Basic_InitStruct->RXINTEN)<<5) | \ + ((CAN_Basic_InitStruct->CLOSE_OPEN_CLK)<<3) | (CAN_Basic_InitStruct->CDCLK); + + InitStatus = CANINITOK; + return InitStatus; +} + +/** +* @brief Configures the CAN_Basic reception filter according to the specified +* parameters in the CAN_Basic_FilterInitStruct. +* @param CAN_Basic_FilterInitStruct: pointer to a CAN_Basic_FilterInitTypeDef structure that +* contains the configuration information. +* @retval None +*/ +void CAN_FilterInit(CAN_Basic_FilterInitTypeDef* CAN_Basic_FilterInitStruct) +{ + /* Filter Mode */ + CAN1->ACR = CAN_Basic_FilterInitStruct->CAN_FilterId; + CAN1->AMR = CAN_Basic_FilterInitStruct->CAN_FilterMaskId; +} + + +/** +* @brief Fills each CAN_Basic_InitStruct member with its default value. +* @param CAN_Basic_InitStruct : pointer to a CAN_Basic_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void CAN_StructInit(CAN_Basic_InitTypeDef* CAN_Basic_InitStruct) +{ + /*--------------- Reset CAN_Basic init structure parameters values -----------------*/ + + + /* initialize the BRP member(where can be set with (0..63))*/ + CAN_Basic_InitStruct->BRP = 0x0; + /* initialize the SJW member(where can be set with (0..3)) */ + CAN_Basic_InitStruct->SJW = 0x0; + /* Initialize the TESG1 member(where can be set with (0..15)) */ + CAN_Basic_InitStruct->TESG1 = 0x0; + /* Initialize the TESG2 member(where can be set with(0..7)) */ + CAN_Basic_InitStruct->TESG2 = 0x0; + /* Initialize the SAM member(where can be set (SET or RESET)) */ + CAN_Basic_InitStruct->SAM = RESET; + /* Initialize the GTS member to Sleep Mode(where can be set (ENABLE or DISABLE)) */ + CAN_Basic_InitStruct->GTS = DISABLE; + /* Initialize the external pin CLKOUT frequence */ + CAN_Basic_InitStruct->CDCLK = 0x0; + /* Initialize the external clk is open or close */ + CAN_Basic_InitStruct->CLOSE_OPEN_CLK = 0x0; + /* Initialize the TX1 pin work as rx interrupt output */ + CAN_Basic_InitStruct->RXINTEN = 0x0; + /* Initialize the CBP of CDR register */ + CAN_Basic_InitStruct->CBP = 0x0; +} + +/** +* @brief Enables or disables the specified CAN interrupts. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @param CAN_IT: specifies the CAN interrupt sources to be enabled or +* disabled. +* This parameter can be: CAN_IT_OIE, CAN_IT_EIE, CAN_IT_TIE, +* CAN_IT_RIE,. +* @param Newstate: new state of the CAN interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None. +*/ +void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState Newstate) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_ITConfig(CAN_IT)); + assert_param(IS_FUNCTIONAL_STATE(Newstate)); + if (Newstate != DISABLE) + { + /* Enable the selected CAN interrupt */ + CANx->CR |= CAN_IT; + } + else + { + /* Disable the selected CAN interrupt */ + CANx->CR &= ~CAN_IT; + } +} + + +/** +* @brief Initiates and transmits a CAN frame message. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @param TxMessage: pointer to a structure which contains CAN Id, CAN DLC and CAN data. +* @retval CANTXOK if the CAN driver transmits the message +*/ +uint8_t CAN_Transmit(CAN_TypeDef* CANx,CanBasicTxMsg* BasicTxMessage) +{ + /* TXOK and TME bits */ + uint8_t state = 0; + /* Check the parameters */ + assert_param(IS_CAN_RTR(BasicTxMessage->RTR)); + assert_param(IS_CAN_DLC(BasicTxMessage->DLC)); + + CANx->TXID0 = (BasicTxMessage->IDH); + CANx->TXID1 = (BasicTxMessage->IDL<<5)|(BasicTxMessage->RTR<<4)|(BasicTxMessage->DLC); + if((FunctionalState)(BasicTxMessage->RTR) != ENABLE) + { + CANx->TXDR0 = BasicTxMessage->Data[0]; + CANx->TXDR1 = BasicTxMessage->Data[1]; + CANx->TXDR2 = BasicTxMessage->Data[2]; + CANx->TXDR3 = BasicTxMessage->Data[3]; + CANx->TXDR4 = BasicTxMessage->Data[4]; + CANx->TXDR5 = BasicTxMessage->Data[5]; + CANx->TXDR6 = BasicTxMessage->Data[6]; + CANx->TXDR7 = BasicTxMessage->Data[7]; + } + + CANx->CMR = CAN_BASIC_CMR_TR; + + return state; +} + +/** +* @brief Cancels a transmit request. +* @param CANx: where x can be 1 to select the CAN peripheral. + +* @retval None +*/ +void CAN_CancelTransmit(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_TRANSMITMAILBOX(Mailbox)); + /* abort transmission */ + CANx->CMR = CAN_AT; + +} + +/** +* @brief Releases the specified receive FIFO. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @retval None +*/ +void CAN_FIFORelease(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Release FIFO */ + CANx->CMR |= (uint32_t)CAN_RRB; + +} + +/** +* @brief Receives a correct CAN frame. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @param RxMessage: pointer to a structure receive frame which contains CAN Id, +* CAN DLC, CAN data and FMI number. +* @retval None +*/ +void CAN_Receive(CAN_TypeDef* CANx,CanBasicRxMsg* BasicRxMessage) +{ + uint16_t tempid; + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_FIFO(FIFONumber)); + BasicRxMessage->RTR = (uint8_t)((CANx->RXID1)>>4)&0x1; + BasicRxMessage->DLC = (uint8_t)((CANx->RXID1)&0xf); + tempid = (uint16_t)(((CANx->RXID1)&0xe0)>>5); + tempid |= (uint16_t)(CANx->RXID0<<3); + BasicRxMessage->ID = tempid; + BasicRxMessage->Data[0] = CAN1->RXDR0; + BasicRxMessage->Data[1] = CAN1->RXDR1; + BasicRxMessage->Data[2] = CAN1->RXDR2; + BasicRxMessage->Data[3] = CAN1->RXDR3; + BasicRxMessage->Data[4] = CAN1->RXDR4; + BasicRxMessage->Data[5] = CAN1->RXDR5; + BasicRxMessage->Data[6] = CAN1->RXDR6; + BasicRxMessage->Data[7] = CAN1->RXDR7; + CAN_FIFORelease( CANx); +} + +/** +* @brief: Select the Sleep mode or not in Basic workmode +* @param: NewState to go into the Sleep mode or go out +* @retval: None +*/ +uint8_t CAN_Sleep(CAN_TypeDef* CANx) +{ + uint8_t sleepstatus = CANSLEEPFAILED; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + CANx->CMR |= CAN_SleepMode; + if((CANx->CMR&0x10)==CAN_SleepMode) + { + sleepstatus = CANSLEEPOK; + } + /* At this step, sleep mode status */ + return (uint8_t)sleepstatus; + +} + +/** +* @brief Wakes the CAN up. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @retval : CANWAKEUPOK if sleep mode left, CANWAKEUPFAILED in an other +* case. +*/ +uint8_t CAN_WakeUp(CAN_TypeDef* CANx) +{ + uint8_t wakeupstatus = CANWAKEUPFAILED; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Wake up request */ + CANx->CMR &= ~CAN_SleepMode; + + /* Sleep mode status */ + if((CANx->CMR&0x01)==0) + { + /* Sleep mode exited */ + wakeupstatus = CANWAKEUPOK; + } + /* At this step, sleep mode status */ + return (uint8_t)wakeupstatus; +} + + +/** +* @brief Checks whether the specified CAN flag is set or not. +* @param CANx: where x can be 1 or 2 to to select the CAN peripheral. +* @param CAN_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg CAN_STATUS_RBS: Receive buffer status +* @arg CAN_STATUS_DOS: Data overflow status +* @arg CAN_STATUS_TBS: Transmit buffer status +* @arg CAN_STATUS_TCS: Transmit complete status +* @arg CAN_STATUS_RS: Receiving status +* @arg CAN_STATUS_TS: Transmiting status +* @arg CAN_STATUS_ES: Error status +* @arg CAN_STATUS_BS: bus status, close or open +* @retval The new state of CAN_FLAG (SET or RESET). +*/ +FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx,uint32_t CAN_FLAG) +{ + FlagStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_GET_FLAG(CAN_FLAG)); + + + if((CANx->SR & CAN_FLAG) == CAN_FLAG) + { + /* CAN_FLAG is set */ + bitstatus = SET; + } + else + { + /* CAN_FLAG is reset */ + bitstatus = RESET; + } + /* Return the CAN_FLAG status */ + return bitstatus; +} + +/** +* @brief Checks whether the specified CAN interrupt has occurred or not. +* @param CANx: where x can be 1 to select the CAN peripheral. +* @param CAN_IT: specifies the CAN interrupt source to check. +* This parameter can be one of the following values: +* @arg CAN_IT_RI: Receive FIFO not empty Interrupt +* @arg CAN_IT_TI: Transmit Interrupt +* @arg CAN_IT_EI: ERROR Interrupt +* @arg CAN_IT_DOI: Data voerflow Interrupt +* @arg CAN_IT_WUI: Wakeup Interrupt +* @arg CAN_IT_ALL: use it can enble all Interrupt +* @retval The current state of CAN_IT (SET or RESET). +*/ +ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT) +{ + ITStatus itstatus = RESET; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + assert_param(IS_CAN_IT(CAN_IT)); + + /* check the interrupt enable bit */ + if((CANx->IR & CAN_IT) != CAN_IT) + { + itstatus = RESET; + } + else + { + itstatus = SET; + } + + return itstatus; +} + + +/** +* @brief: Select the can work as peli mode or basic mode +* @param CANx: where x can be 1 or 2 to to select the CAN peripheral. +* @param CAN_MODE: specifies the work mode:CAN_BASICMode,CAN_PELIMode +* @retval: None +*/ +void CAN_Mode_Cmd(CAN_TypeDef* CANx, uint32_t CAN_MODE) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + CANx->CDR |= CAN_MODE; +} + + +/** +* @brief: Select the Reset mode or not +* @param CANx: where x can be 1 or 2 to to select the CAN peripheral. +* @param: NewState to go into the Reset mode or go out +* @retval: None +*/ +void CAN_ResetMode_Cmd(CAN_TypeDef* CANx,FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + if(NewState == ENABLE) + { + CANx->CR |= CAN_ResetMode; + } + else + { + CANx->CR &= ~CAN_ResetMode; + } +} + +/** +* @brief Clear the data overflow. +* @param CANx: where x can be 1 or 2 to to select the CAN peripheral. +* @retval None +*/ +void CAN_ClearDataOverflow(CAN_TypeDef* CANx) +{ + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + CANx->CMR |= (uint32_t)CAN_CDO; + +} + +/** +* @brief Clears the CAN's IT pending. +* @param CANx: where x can be 1 or 2 to to select the CAN peripheral. +* @retval None +*/ +void CAN_ClearITPendingBit(CAN_TypeDef* CANx) +{ + uint32_t temp=0; + temp = temp; + temp = CANx->IR; //read this register clear all interrupt + +} + + + +/** +* @brief: Select the Sleep mode or not in Peli workmode +* @param: NewState to go into the Sleep mode or go out +* @retval: None +*/ +void CAN_Peli_SleepMode_Cmd(FunctionalState NewState) +{ + if(NewState == ENABLE) + CAN1_PELI->MOD |= CAN_SleepMode; + else + CAN1_PELI->MOD &= ~CAN_SleepMode; +} + + +/** +* @brief Fills each CAN1_PELI_InitStruct member with its default value. +* @param CAN_Peli_InitStruct : pointer to a CAN_Peli_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void CAN_Peli_StructInit(CAN_Peli_InitTypeDef* CAN_Peli_InitStruct) +{ + /*--------------- Reset CAN_Peli init structure parameters values -----------------*/ + + /* initialize the BRP member(where can be set with (0..63))*/ + CAN_Peli_InitStruct->BRP = 0x0; + /* initialize the SJW member(where can be set with (0..3)) */ + CAN_Peli_InitStruct->SJW = 0x0; + /* Initialize the TESG1 member(where can be set with (0..15)) */ + CAN_Peli_InitStruct->TESG1 = 0x0; + /* Initialize the TESG2 member(where can be set with(0..7)) */ + CAN_Peli_InitStruct->TESG2 = 0x0; + /* Initialize the SAM member(where can be set (SET or RESET)) */ + CAN_Peli_InitStruct->SAM = RESET; + /* Initialize the LOM member*/ + CAN_Peli_InitStruct->LOM = DISABLE; + /* Initialize the STM member*/ + CAN_Peli_InitStruct->STM = DISABLE; + /* Initialize the SM member*/ + CAN_Peli_InitStruct->SM = DISABLE; + CAN_Peli_InitStruct->SRR = DISABLE; + CAN_Peli_InitStruct->EWLR = 0x96; +} + +/** +* @brief Initializes the CAN_Peli peripheral according to the specified +* parameters in the CAN_Peli_InitStruct. +* @param CAN_Basic_InitStruct: pointer to a CAN_Peli_InitTypeDef structure that contains +* the configuration information for the CAN peripheral in the peli workmode. +* @retval None +*/ +void CAN_Peli_Init(CAN_Peli_InitTypeDef* CAN_Peli_InitStruct) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->SJW)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->BRP)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->SAM)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->TESG2)); + assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->TESG1)); + + CAN1_PELI->BTR0 = ((uint32_t)CAN_Peli_InitStruct->SJW<<6)|((uint32_t)CAN_Peli_InitStruct->BRP); + CAN1_PELI->BTR1 = ((uint32_t)CAN_Peli_InitStruct->SAM<<7)|((uint32_t)CAN_Peli_InitStruct->TESG2<<4)|\ + ((uint32_t)CAN_Peli_InitStruct->TESG1); + if(CAN_Peli_InitStruct->LOM == ENABLE) + CAN1_PELI->MOD |= (uint32_t)CAN_ListenOnlyMode; + else + CAN1_PELI->MOD &= ~(uint32_t)CAN_ListenOnlyMode; + if(CAN_Peli_InitStruct->STM == ENABLE) + CAN1_PELI->MOD |= (uint32_t)CAN_SeftTestMode; + else + CAN1_PELI->MOD &= ~(uint32_t)CAN_SeftTestMode; + if(CAN_Peli_InitStruct->SM == ENABLE) + CAN1_PELI->MOD |= (uint32_t)CAN_SleepMode; + else + CAN1_PELI->MOD &= ~(uint32_t)CAN_SleepMode; + CAN1_PELI->EWLR = (uint32_t)CAN_Peli_InitStruct->EWLR; +} + + + +/** +* @brief Configures the CAN_Peli reception filter according to the specified +* parameters in the CAN_Peli_FilterInitStruct. +* @param CAN_Peli_FilterInitStruct: pointer to a CAN_Peli_FilterInitTypeDef structure that +* contains the configuration information. +* @retval None +*/ +void CAN_Peli_FilterInit(CAN_Peli_FilterInitTypeDef* CAN_Peli_FilterInitStruct) +{ + if(CAN_Peli_FilterInitStruct->AFM == CAN_FilterMode_Singal) + CAN1_PELI->MOD |= (uint32_t)CAN_FilterMode_Singal; + else + CAN1_PELI->MOD &= (uint32_t)CAN_FilterMode_Double; + + CAN1_PELI->FF = CAN_Peli_FilterInitStruct->CAN_FilterId0; + CAN1_PELI->ID0 = CAN_Peli_FilterInitStruct->CAN_FilterId1; + CAN1_PELI->ID1 = CAN_Peli_FilterInitStruct->CAN_FilterId2; + CAN1_PELI->DATA0 = CAN_Peli_FilterInitStruct->CAN_FilterId3; + + CAN1_PELI->DATA1 = CAN_Peli_FilterInitStruct->CAN_FilterMaskId0; + CAN1_PELI->DATA2 = CAN_Peli_FilterInitStruct->CAN_FilterMaskId1; + CAN1_PELI->DATA3 = CAN_Peli_FilterInitStruct->CAN_FilterMaskId2; + CAN1_PELI->DATA4 = CAN_Peli_FilterInitStruct->CAN_FilterMaskId3; +} + +/** +* @brief Fills each CAN_Peli_FilterInitStruct member with its default value. +* @param CAN_Peli_FilterInitStruct: pointer to a CAN_InitTypeDef structure which ill be initialized. +* @retval None +*/ +void CAN_Peli_FilterStructInit(CAN_Peli_FilterInitTypeDef* CAN_Peli_FilterInitStruct) +{ + CAN_Peli_FilterInitStruct->CAN_FilterId0 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterId1 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterId2 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterId3 = 0; + + CAN_Peli_FilterInitStruct->CAN_FilterMaskId0 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterMaskId1 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterMaskId2 = 0; + CAN_Peli_FilterInitStruct->CAN_FilterMaskId3 = 0; +} + + +/** +* @brief Initiates and transmits a CAN frame message. +* @param TxMessage: pointer to a structure which contains CAN Id, CAN DLC and CAN data. +* @retval None +*/ +void CAN_Peli_Transmit(CanPeliTxMsg* PeliTxMessage) +{ + /* Check the parameters */ + assert_param(IS_CAN_RTR(PeliTxMessage->RTR)); + assert_param(IS_CAN_DLC(PeliTxMessage->DLC)); + + CAN1_PELI->FF = (PeliTxMessage->FF<<7)|(PeliTxMessage->RTR<<6)|(PeliTxMessage->DLC); + if(((FunctionalState)PeliTxMessage->FF) != ENABLE) + { + CAN1_PELI->ID0 = (PeliTxMessage->IDHH); +// CAN1_PELI->ID1 = ((PeliTxMessage->IDHL)<<5); + CAN1_PELI->ID1 = (PeliTxMessage->IDHL&0xE0); + if((FunctionalState)(PeliTxMessage->RTR) != ENABLE) + { + CAN1_PELI->DATA0 = PeliTxMessage->Data[0]; + CAN1_PELI->DATA1 = PeliTxMessage->Data[1]; + CAN1_PELI->DATA2 = PeliTxMessage->Data[2]; + CAN1_PELI->DATA3 = PeliTxMessage->Data[3]; + CAN1_PELI->DATA4 = PeliTxMessage->Data[4]; + CAN1_PELI->DATA5 = PeliTxMessage->Data[5]; + CAN1_PELI->DATA6 = PeliTxMessage->Data[6]; + CAN1_PELI->DATA7 = PeliTxMessage->Data[7]; + } + } + else + { + CAN1_PELI->ID0 = PeliTxMessage->IDHH; + CAN1_PELI->ID1 = PeliTxMessage->IDHL; + CAN1_PELI->DATA0 = PeliTxMessage->IDLH; + CAN1_PELI->DATA1 = PeliTxMessage->IDLL; + if((FunctionalState)(PeliTxMessage->RTR) != ENABLE) + { + CAN1_PELI->DATA2 = PeliTxMessage->Data[0]; + CAN1_PELI->DATA3 = PeliTxMessage->Data[1]; + CAN1_PELI->DATA4 = PeliTxMessage->Data[2]; + CAN1_PELI->DATA5 = PeliTxMessage->Data[3]; + CAN1_PELI->DATA6 = PeliTxMessage->Data[4]; + CAN1_PELI->DATA7 = PeliTxMessage->Data[5]; + CAN1_PELI->DATA8 = PeliTxMessage->Data[6]; + CAN1_PELI->DATA9 = PeliTxMessage->Data[7]; + } + } + if(CAN1_PELI->MOD&CAN_PELI_MOD_STM) + { + CAN1->CMR = CAN_PELI_CMR_SRR|CAN_PELI_CMR_AT; + } + else + { + CAN1->CMR = CAN_TR|CAN_AT; + } + +} + + + +/** +* @brief Initiates and transmits a CAN frame message. +* @param TxMessage: pointer to a structure which contains CAN Id, CAN DLC and CAN data. +* @retval None +*/ +void CAN_Peli_TransmitRepeat(CanPeliTxMsg* PeliTxMessage) +{ + /* Check the parameters */ + assert_param(IS_CAN_RTR(PeliTxMessage->RTR)); + assert_param(IS_CAN_DLC(PeliTxMessage->DLC)); + + CAN1_PELI->FF = (PeliTxMessage->FF<<7)|(PeliTxMessage->RTR<<6)|(PeliTxMessage->DLC); + if(((FunctionalState)PeliTxMessage->FF) != ENABLE) + { + CAN1_PELI->ID0 = (PeliTxMessage->IDHH); + CAN1_PELI->ID1 = ((PeliTxMessage->IDHL)<<5); + if((FunctionalState)(PeliTxMessage->RTR) != ENABLE) + { + CAN1_PELI->DATA0 = PeliTxMessage->Data[0]; + CAN1_PELI->DATA1 = PeliTxMessage->Data[1]; + CAN1_PELI->DATA2 = PeliTxMessage->Data[2]; + CAN1_PELI->DATA3 = PeliTxMessage->Data[3]; + CAN1_PELI->DATA4 = PeliTxMessage->Data[4]; + CAN1_PELI->DATA5 = PeliTxMessage->Data[5]; + CAN1_PELI->DATA6 = PeliTxMessage->Data[6]; + CAN1_PELI->DATA7 = PeliTxMessage->Data[7]; + } + } + else + { + CAN1_PELI->ID0 = PeliTxMessage->IDHH; + CAN1_PELI->ID1 = PeliTxMessage->IDHL; + CAN1_PELI->DATA0 = PeliTxMessage->IDLH; + CAN1_PELI->DATA1 = PeliTxMessage->IDLL; + if((FunctionalState)(PeliTxMessage->RTR) != ENABLE) + { + CAN1_PELI->DATA2 = PeliTxMessage->Data[0]; + CAN1_PELI->DATA3 = PeliTxMessage->Data[1]; + CAN1_PELI->DATA4 = PeliTxMessage->Data[2]; + CAN1_PELI->DATA5 = PeliTxMessage->Data[3]; + CAN1_PELI->DATA6 = PeliTxMessage->Data[4]; + CAN1_PELI->DATA7 = PeliTxMessage->Data[5]; + CAN1_PELI->DATA8 = PeliTxMessage->Data[6]; + CAN1_PELI->DATA9 = PeliTxMessage->Data[7]; + } + } + + if(CAN1_PELI->MOD&CAN_PELI_MOD_STM) + { + CAN1->CMR = CAN_PELI_CMR_SRR|CAN_PELI_CMR_AT; + } + else + { + CAN1->CMR = CAN_PELI_CMR_TR; + } +} + +/** @defgroup CAN_Group3 CAN Frames Reception functions +* @brief CAN Frames Reception functions +* +@verbatim +=============================================================================== +##### CAN Frames Reception functions ##### +=============================================================================== +[..] This section provides functions allowing to +(+) Receive a correct CAN frame. +(+) Release a specified receive FIFO +(+) Return the number of the pending received CAN frames. + +@endverbatim +* @{ +*/ + + +/** +* @brief Receives a correct CAN frame. +* @param RxMessage: pointer to a structure receive frame which contains CAN Id, +* CAN DLC, CAN data and FMI number. +* @retval None +*/ +void CAN_Peli_Receive(CanPeliRxMsg* PeliRxMessage) +{ + uint32_t tempid; + PeliRxMessage->FF = (CAN1_PELI->FF)>>7; + PeliRxMessage->RTR = ((CAN1_PELI->FF)>>6)&0x1; + PeliRxMessage->DLC = (CAN1_PELI->FF)&0xf; + + if(((FunctionalState)PeliRxMessage->FF) != ENABLE) + { + tempid = (uint32_t)(CAN1_PELI->ID1>>5); + tempid |= (uint32_t)(CAN1_PELI->ID0<<3); + PeliRxMessage->ID = tempid; + PeliRxMessage->Data[0] = CAN1_PELI->DATA0; + PeliRxMessage->Data[1] = CAN1_PELI->DATA1; + PeliRxMessage->Data[2] = CAN1_PELI->DATA2; + PeliRxMessage->Data[3] = CAN1_PELI->DATA3; + PeliRxMessage->Data[4] = CAN1_PELI->DATA4; + PeliRxMessage->Data[5] = CAN1_PELI->DATA5; + PeliRxMessage->Data[6] = CAN1_PELI->DATA6; + PeliRxMessage->Data[7] = CAN1_PELI->DATA7; + } + else + { + tempid = (uint32_t)((CAN1_PELI->DATA1&0xf8)>>3); + tempid |= (uint32_t)(CAN1_PELI->DATA0<<5); + tempid |= (uint32_t)(CAN1_PELI->ID1<<13); + tempid |= (uint32_t)(CAN1_PELI->ID0<<21); + PeliRxMessage->ID = tempid; + PeliRxMessage->Data[0] = CAN1_PELI->DATA2; + PeliRxMessage->Data[1] = CAN1_PELI->DATA3; + PeliRxMessage->Data[2] = CAN1_PELI->DATA4; + PeliRxMessage->Data[3] = CAN1_PELI->DATA5; + PeliRxMessage->Data[4] = CAN1_PELI->DATA6; + PeliRxMessage->Data[5] = CAN1_PELI->DATA7; + PeliRxMessage->Data[6] = CAN1_PELI->DATA8; + PeliRxMessage->Data[7] = CAN1_PELI->DATA9; + } + CAN_FIFORelease( CAN1); +} + + +/** +* @brief Get available current informatoin in receive FIFO only in Peli workmode. +* @retval The value in reg RMC +*/ +uint32_t CAN_Peli_GetRxFIFOInfo(void) +{ + return CAN1_PELI->RMC; +} + + +/** @defgroup CAN_Group5 CAN Bus Error management functions +* @brief CAN Bus Error management functions +* +@verbatim +=============================================================================== +##### CAN Bus Error management functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Returns the CAN's last error code (LEC). +* @retval Error code: +* - CAN_ERRORCODE_NoErr: No Error +* - CAN_ERRORCODE_StuffErr: Stuff Error +* - CAN_ERRORCODE_FormErr: Form Error +* - CAN_ERRORCODE_ACKErr : Acknowledgment Error +* - CAN_ERRORCODE_BitRecessiveErr: Bit Recessive Error +* - CAN_ERRORCODE_BitDominantErr: Bit Dominant Error +* - CAN_ERRORCODE_CRCErr: CRC Error +* - CAN_ERRORCODE_SoftwareSetErr: Software Set Error +*/ +uint8_t CAN_Peli_GetLastErrorCode(void) +{ + uint8_t errorcode=0; + + /* Get the error code*/ + errorcode = ((uint8_t)CAN1_PELI->ECC); + + /* Return the error code*/ + return errorcode; +} +/** +* @brief Returns the CAN Receive Error Counter (REC). +* @note In case of an error during reception, this counter is incremented +* by 1 or by 8 depending on the error condition as defined by the CAN +* standard. After every successful reception, the counter is +* decremented by 1 or reset to 120 if its value was higher than 128. +* When the counter value exceeds 127, the CAN controller enters the +* error passive state. +* @retval CAN Receive Error Counter. +*/ +uint8_t CAN_Peli_GetReceiveErrorCounter(void) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the Receive Error Counter*/ + counter = (uint8_t)(CAN1_PELI->RXERR); + + /* Return the Receive Error Counter*/ + return counter; +} + + +/** +* @brief Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC). +* @retval LSB of the 8-bit CAN Transmit Error Counter. +*/ +uint8_t CAN_Peli_GetLSBTransmitErrorCounter(void) +{ + uint8_t counter=0; + + /* Check the parameters */ + assert_param(IS_CAN_ALL_PERIPH(CANx)); + + /* Get the LSB of the 8-bit CAN Transmit Error Counter(TEC) */ + counter = (uint8_t)(CAN1_PELI->TXERR); + + /* Return the LSB of the 8-bit CAN Transmit Error Counter(TEC) */ + return counter; +} +/** @defgroup CAN_Group6 Interrupts and flags management functions +* @brief Interrupts and flags management functions +* +@verbatim +=============================================================================== +##### Interrupts and flags management functions ##### +=============================================================================== +[..] This section provides functions allowing to configure the CAN Interrupts +and to get the status and clear flags and Interrupts pending bits. +[..] The CAN provides 14 Interrupts sources and 15 Flags: + +*** Flags *** +============= +*/ +/** +* @brief Enables or disables the specified CAN interrupts in peli workmode. +* @param CAN_IT: specifies the CAN interrupt sources to be enabled or disabled. +* This parameter can be: +* @arg CAN_IT_RI: Receive FIFO not empty Interrupt +* @arg CAN_IT_TI: Transmit Interrupt +* @arg CAN_IT_EI: ERROR Interrupt +* @arg CAN_IT_DOI: Data voerflow Interrupt +* @arg CAN_IT_WUI: Wakeup Interrupt +* @arg CAN_IT_EPI(only Peli): passive error Interrupt +* @arg CAN_IT_ALI(only Peli): arbiter lose Interrupt +* @arg CAN_IT_BEI(only Peli): bus error Interrupt +@arg CAN_IT_ALL: use it can enble all Interrupt +* @param NewState: new state of the CAN interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void CAN_Peli_ITConfig(uint32_t CAN_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_CAN_IT(CAN_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected CAN interrupt */ + CAN1_PELI->IER |= CAN_IT; + } + else + { + /* Disable the selected CAN interrupt */ + CAN1_PELI->IER &= ~CAN_IT; + } +} + + +/** +* @brief Checks whether the specified CAN interrupt has occurred or not. +* @param CAN_IT: specifies the CAN interrupt source to check. +* This parameter can be one of the following values: +* @arg CAN_IT_RI: Receive FIFO not empty Interrupt +* @arg CAN_IT_TI: Transmit Interrupt +* @arg CAN_IT_EI: ERROR Interrupt +* @arg CAN_IT_DOI: Data voerflow Interrupt +* @arg CAN_IT_WUI: Wakeup Interrupt +* @arg CAN_IT_EPI(only Peli): passive error Interrupt +* @arg CAN_IT_ALI(only Peli): arbiter lose Interrupt +* @arg CAN_IT_BEI(only Peli): bus error Interrupt +@arg CAN_IT_ALL: use it can enble all Interrupt +* @retval The current state of CAN_IT (SET or RESET). +*/ +ITStatus CAN_Peli_GetITStatus(uint32_t CAN_IT) +{ + ITStatus itstatus = RESET; + /* Check the parameters */ + assert_param(IS_CAN_IT(CAN_IT)); + + /* check the interrupt enable bit */ + if((CAN1_PELI->IR & CAN_IT) != CAN_IT) + { + itstatus = RESET; + } + else + { + itstatus = SET; + } + + return itstatus; +} + +/** +* @brief Config CAN_Peli_InitTypeDef baud parameter. +* @param CAN_Peli_InitTypeDef: CAN struct. +* @param SrcClk: CAN module clock. +* @param baud: specified baud. +* @retval The current state of CAN_IT (SET or RESET). +*/ +void CAN_AutoCfg_BaudParam(CAN_Peli_InitTypeDef *CAN_Peli_InitStruct,unsigned int SrcClk,unsigned int baud ) +{ + unsigned int i,value = baud,record = 1; + unsigned int remain = 0,sumPrescaler = 0; + while(( baud == 0 )||( SrcClk == 0 ));//·ÀÖ¹²¨ÌØÂʼ°Ê±ÖÓΪ0 + sumPrescaler = SrcClk/baud;//×Ü·ÖÆµ + sumPrescaler = sumPrescaler/2;// + for( i = 25;i > 3;i -- ) + { + remain = sumPrescaler - ((sumPrescaler / i)*i); + if( remain == 0 ) //Õû³ý + { + record = i; + break; + } + else + { + if(remain < value) + { + value = remain; + record = i; + } + } + } + CAN_Peli_InitStruct->SJW = 0; + CAN_Peli_InitStruct->BRP = (sumPrescaler/record) - 1; + CAN_Peli_InitStruct->TESG2 = (record-3)/3; + CAN_Peli_InitStruct->TESG1 = (record-3) - CAN_Peli_InitStruct->TESG2; +} +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ + diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_comp.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_comp.c new file mode 100644 index 0000000000..be1e26c5fc --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_comp.c @@ -0,0 +1,420 @@ +/** +****************************************************************************** +* @file HAL_comp.c +* @author AE Team +* @version V1.0.0 +* @date 02/08/2017 +* @brief This file provides firmware functions to manage the following +* functionalities of the 2 analog comparators (COMP1, COMP2) peripheral: +* + Comparators configuration +* + Window mode control +* +@verbatim + +============================================================================== +##### COMP Peripheral features ##### +============================================================================== +[..] +The device integrates 2 analog comparators COMP1, COMP2: +(#) The non inverting input and inverting input can be set to GPIO pins +as shown in table1. COMP Inputs below. + +(#) The COMP output can be redirected to embedded timers (TIM1, TIM2, TIM3...) +Refer to table 2. COMP Outputs redirection to embedded timers below. + +(#) The seven comparators have interrupt capability with wake-up +from Sleep and Stop modes (through the EXTI controller): +(++) COMP1 is internally connected to EXTI Line 21 +(++) COMP2 is internally connected to EXTI Line 22 + +[..] Table 1. COMP Inputs ++--------------------------------------------------+ +| | | COMP1 | COMP2 | +|-----------------|----------------|---------------| +| | 1/4 VREFINT | OK | OK | +| | 1/2 VREFINT | OK | OK | +| | 3/4 VREFINT | OK | OK | +| Inverting Input | VREFINT | OK | OK | +| | DAC1 OUT (PA4) | OK | OK | +| | DAC2 OUT (PA5) | OK | OK | +| | IO1 | PA0 | PA2 | +| | IO2 | PA6 | PA6 | +|-----------------|----------------|-------|-------| +| Non Inverting | IO1 | PA0 | PA0 | +| Input | IO2 | PA1 | PA1 | +| | IO3 | PA2 | PA2 | +| | IO4 | PA3 | PA3 | +| | IO5 | PA4 | PA4 | +| | IO6 | PA5 | PA5 | +| | IO7 | PA6 | PA6 | +| | IO8 | PA7 | PA7 | ++--------------------------------------------------+ + + +[..] Table 2. COMP Outputs redirection to embedded timers ++---------------------------------+ +| COMP1 | COMP2 | +|----------------|----------------| +| TIM1 BKIN | TIM1 BKIN | +| | | +| TIM1 OCREFCLR | TIM1 OCREFCLR | +| | | +| TIM1 IC1 | TIM1 IC1 | +| | | +| TIM2 IC4 | TIM2 IC4 | +| | | +| TIM2 OCREFCLR | TIM2 OCREFCLR | +| | | +| TIM3 IC1 | TIM3 IC1 | +| | | +| TIM3 OCREFCLR | TIM3 OCREFCLR | ++---------------------------------+ + + +##### How to use this driver ##### +============================================================================== +[..] +This driver provides functions to configure and program the Comparators +of all microcontroller devices. + +To use the comparator, perform the following steps: + +(#) Enable the SYSCFG APB clock to get write access to comparator +register using RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + +(#) Configure the comparator input in analog mode using GPIO_Init() + +(#) Configure the comparator output in alternate function mode +using GPIO_Init() and use GPIO_PinAFConfig() function to map the +comparator output to the GPIO pin + +(#) Configure the comparator using COMP_Init() function: +(++) Select the inverting input +(++) Select the non-inverting input +(++) Select the output polarity +(++) Select the output redirection +(++) Select the hysteresis level +(++) Select the power mode + +(#) Enable the comparator using COMP_Cmd() function + +(#) If required enable the COMP interrupt by configuring and enabling +EXTI line in Interrupt mode and selecting the desired sensitivity +level using EXTI_Init() function. After that enable the comparator +interrupt vector using NVIC_Init() function. + +@endverbatim +* +****************************************************************************** +* @attention +* +*

© COPYRIGHT 2015 MindMotion

+* +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_comp.h" + +/** @addtogroup +* @{ +*/ + +/** @defgroup COMP +* @brief COMP driver modules +* @{ +*/ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* CSR register Mask */ +#define COMP_CSR_CLEAR_MASK ((uint32_t)0x00000003) + +/*!< COMPx output level */ +#define COMP_CSR_COMPxOUT ((uint32_t)0x40000000) + +/*!< COMPx lock */ +#define COMP_CSR_COMPxLOCK ((uint32_t)0x80000000) + + +/********************** Bit definition for COMP_CSR register ****************/ +#define COMP_CSR_COMPxEN ((uint32_t)0x00000001) /*!< COMPx enable */ +#define COMP_CSR_COMP1SW1 ((uint32_t)0x00000002) /*!< COMP1 SW1 switch control */ +#define COMP_CSR_COMPxMODE ((uint32_t)0x0000000C) /*!< COMPx power mode */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup COMP_Private_Functions +* @{ +*/ + +/** @defgroup COMP_Group1 Initialization and Configuration functions +* @brief Initialization and Configuration functions +* +@verbatim +=============================================================================== +##### Initialization and Configuration functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Deinitializes COMP peripheral registers to their default reset values. +* @note Deinitialization can't be performed if the COMP configuration is locked. +* To unlock the configuration, perform a system reset. +* @param COMP_Selection: the selected comparator. +* This parameter can be COMP_Selection_COMPx where x can be 1 to 7 +* to select the COMP peripheral. +* @param None +* @retval None +*/ +void COMP_DeInit(uint32_t COMP_Selection) +{ + /*!< Set COMP_CSR register to reset value */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) = ((uint32_t)0x00000000); +} + +/** +* @brief Initializes the COMP peripheral according to the specified parameters +* in COMP_InitStruct +* @note If the selected comparator is locked, initialization can't be performed. +* To unlock the configuration, perform a system reset. +* @note By default, PA1 is selected as COMP1 non inverting input. +* To use PA4 as COMP1 non inverting input call COMP_SwitchCmd() after COMP_Init() +* @param COMP_Selection: the selected comparator. +* This parameter can be COMP_Selection_COMPx where x can be 1 to 2 +* to select the COMP peripheral. +* @param COMP_InitStruct: pointer to an COMP_InitTypeDef structure that contains +* the configuration information for the specified COMP peripheral. +* - COMP_InvertingInput specifies the inverting input of COMP +* - COMP_NonInvertingInput specifies the non inverting input of COMP +* - COMP_Output connect COMP output to selected timer +* input (Input capture / Output Compare Reference Clear / Break Input) +* - COMP_BlankingSrce specifies the blanking source of COMP +* - COMP_OutputPol select output polarity +* - COMP_Hysteresis configures COMP hysteresis value +* - COMP_Mode configures COMP power mode +* @retval None +*/ +void COMP_Init(uint32_t COMP_Selection, COMP_InitTypeDef* COMP_InitStruct) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); + assert_param(IS_COMP_INVERTING_INPUT(COMP_InitStruct->COMP_InvertingInput)); + assert_param(IS_COMP_NONINVERTING_INPUT(COMP_InitStruct->COMP_NonInvertingInput)); + assert_param(IS_COMP_OUTPUT(COMP_InitStruct->COMP_Output)); + assert_param(IS_COMP_BLANKING_SOURCE(COMP_InitStruct->COMP_BlankingSrce)); + assert_param(IS_COMP_OUTPUT_POL(COMP_InitStruct->COMP_OutputPol)); + assert_param(IS_COMP_HYSTERESIS(COMP_InitStruct->COMP_Hysteresis)); + assert_param(IS_COMP_MODE(COMP_InitStruct->COMP_Mode)); + + /*!< Get the COMPx_CSR register value */ + tmpreg = *(__IO uint32_t *) (COMP_BASE + COMP_Selection); + + /*!< Clear the COMP1SW1, COMPxINSEL, COMPxOUTSEL, COMPxPOL, COMPxHYST and COMPxMODE bits */ + tmpreg &= (uint32_t) (COMP_CSR_CLEAR_MASK); + + /*!< Configure COMP: inverting input, output redirection, hysteresis value and power mode */ + /*!< Set COMPxINSEL bits according to COMP_InitStruct->COMP_InvertingInput value */ + /*!< Set COMPxNONINSEL bits according to COMP_InitStruct->COMP_NonInvertingInput value */ + /*!< Set COMPxBLANKING bits according to COMP_InitStruct->COMP_BlankingSrce value */ + /*!< Set COMPxOUTSEL bits according to COMP_InitStruct->COMP_Output value */ + /*!< Set COMPxPOL bit according to COMP_InitStruct->COMP_OutputPol value */ + /*!< Set COMPxHYST bits according to COMP_InitStruct->COMP_Hysteresis value */ + /*!< Set COMPxMODE bits according to COMP_InitStruct->COMP_Mode value */ + tmpreg |= (uint32_t)(COMP_InitStruct->COMP_InvertingInput | COMP_InitStruct->COMP_NonInvertingInput | + COMP_InitStruct->COMP_Output | COMP_InitStruct->COMP_OutputPol | COMP_InitStruct->COMP_BlankingSrce | + COMP_InitStruct->COMP_Hysteresis | COMP_InitStruct->COMP_Mode); + + /*!< Write to COMPx_CSR register */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) = tmpreg; +} + +/** +* @brief Fills each COMP_InitStruct member with its default value. +* @param COMP_InitStruct: pointer to an COMP_InitTypeDef structure which will +* be initialized. +* @retval None +*/ +void COMP_StructInit(COMP_InitTypeDef* COMP_InitStruct) +{ + COMP_InitStruct->COMP_InvertingInput = COMP_InvertingInput_1_4VREFINT; + COMP_InitStruct->COMP_NonInvertingInput = COMP_NonInvertingInput_IO1; + COMP_InitStruct->COMP_Output = COMP_Output_None; + COMP_InitStruct->COMP_BlankingSrce = COMP_BlankingSrce_None; + COMP_InitStruct->COMP_OutputPol = COMP_OutputPol_NonInverted; + COMP_InitStruct->COMP_Hysteresis = COMP_Hysteresis_No; + COMP_InitStruct->COMP_Mode = COMP_Mode_UltraLowPower; +} + +/** +* @brief Enable or disable the COMP peripheral. +* @note If the selected comparator is locked, enable/disable can't be performed. +* To unlock the configuration, perform a system reset. +* @param COMP_Selection: the selected comparator. +* This parameter can be COMP_Selection_COMPx where x can be 1 to 2 +* to select the COMP peripheral. +* @param NewState: new state of the COMP peripheral. +* This parameter can be: ENABLE or DISABLE. +* When enabled, the comparator compares the non inverting input with +* the inverting input and the comparison result is available +* on comparator output. +* When disabled, the comparator doesn't perform comparison and the +* output level is low. +* @retval None +*/ +void COMP_Cmd(uint32_t COMP_Selection, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected COMPx peripheral */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) |= (uint32_t) (COMP_CSR_COMPxEN); + } + else + { + /* Disable the selected COMP peripheral */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) &= (uint32_t)(~COMP_CSR_COMPxEN); + } +} + +/** +* @brief Close or Open the SW1 switch. +* @note If the COMP1 is locked, Close/Open the SW1 switch can't be performed. +* To unlock the configuration, perform a system reset. +* @note This switch is solely intended to redirect signals onto high +* impedance input, such as COMP1 non-inverting input (highly resistive switch) +* @param NewState: New state of the analog switch. +* This parameter can be +* ENABLE so the SW1 is closed; PA1 is connected to PA4 +* or DISABLE so the SW1 switch is open; PA1 is disconnected from PA4 +* @retval None +*/ +void COMP_SwitchCmd(uint32_t COMP_Selection, FunctionalState NewState) +{ + /* Check the parameter */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Close SW1 switch */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) |= (uint32_t) (COMP_CSR_COMP1SW1); + } + else + { + /* Open SW1 switch */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) &= (uint32_t)(~COMP_CSR_COMP1SW1); + } +} + +/** +* @brief Return the output level (high or low) of the selected comparator. +* The output level depends on the selected polarity. +* If the polarity is not inverted: +* - Comparator output is low when the non-inverting input is at a lower +* voltage than the inverting input +* - Comparator output is high when the non-inverting input is at a higher +* voltage than the inverting input +* If the polarity is inverted: +* - Comparator output is high when the non-inverting input is at a lower +* voltage than the inverting input +* - Comparator output is low when the non-inverting input is at a higher +* voltage than the inverting input +* @param COMP_Selection: the selected comparator. +* This parameter can be COMP_Selection_COMPx where x can be 1 to 2 +* to select the COMP peripheral. +* @retval Returns the selected comparator output level: low or high. +* +*/ +uint32_t COMP_GetOutputLevel(uint32_t COMP_Selection) +{ + uint32_t compout = 0x0; + + /* Check the parameters */ + assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); + + /* Check if selected comparator output is high */ + if ((*(__IO uint32_t *) (COMP_BASE + COMP_Selection) & (COMP_CSR_COMPxOUT)) != 0) + { + compout = COMP_OutputLevel_High; + } + else + { + compout = COMP_OutputLevel_Low; + } + + /* Return the comparator output level */ + return (uint32_t)(compout); +} + +/** +* @} +*/ + + +/** @defgroup COMP_Group3 COMP configuration locking function +* @brief COMP1, COMP2 configuration locking function +* COMP1, COMP2 configuration can be locked each separately. +* Unlocking is performed by system reset. +* +@verbatim +=============================================================================== +##### Configuration Lock function ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Lock the selected comparator (COMP1/COMP2) configuration. +* @note Locking the configuration means that all control bits are read-only. +* To unlock the comparator configuration, perform a system reset. +* @param COMP_Selection: the selected comparator. +* This parameter can be COMP_Selection_COMPx where x can be 1 to 7 +* to select the COMP peripheral. +* @retval None +*/ +void COMP_LockConfig(uint32_t COMP_Selection) +{ + /* Check the parameter */ + assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); + + /* Set the lock bit corresponding to selected comparator */ + *(__IO uint32_t *) (COMP_BASE + COMP_Selection) |= (uint32_t) (COMP_CSR_COMPxLOCK); +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_dma.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_dma.c new file mode 100644 index 0000000000..593b61ee6e --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_dma.c @@ -0,0 +1,535 @@ +/** +****************************************************************************** +* @file HAL_dma.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the DMA firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_dma.h" + + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup DMA +* @brief DMA driver modules +* @{ +*/ + +/** @defgroup DMA_Private_TypesDefinitions +* @{ +*/ +/** +* @} +*/ + +/** @defgroup DMA_Private_Defines +* @{ +*/ + +/* DMA ENABLE mask */ +#define CCR_ENABLE_Set ((uint32_t)0x00000001) +#define CCR_ENABLE_Reset ((uint32_t)0xFFFFFFFE) + +/* DMA1 Channelx interrupt pending bit masks */ +#define DMA1_Channel1_IT_Mask ((uint32_t)0x0000000F) +#define DMA1_Channel2_IT_Mask ((uint32_t)0x000000F0) +#define DMA1_Channel3_IT_Mask ((uint32_t)0x00000F00) +#define DMA1_Channel4_IT_Mask ((uint32_t)0x0000F000) +#define DMA1_Channel5_IT_Mask ((uint32_t)0x000F0000) + + + + + +/* DMA registers Masks */ +#define CCR_CLEAR_Mask ((uint32_t)0xFFFF800F) + +/** +* @} +*/ + +/** @defgroup DMA_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup DMA_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup DMA_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup DMA_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the DMAy Channelx registers to their default reset +* values. +* @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and +* x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* @retval : None +*/ +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + /* Disable the selected DMAy Channelx */ + DMAy_Channelx->CCR &= CCR_ENABLE_Reset; + /* Reset DMAy Channelx control register */ + DMAy_Channelx->CCR = 0; + + /* Reset DMAy Channelx remaining bytes register */ + DMAy_Channelx->CNDTR = 0; + + /* Reset DMAy Channelx peripheral address register */ + DMAy_Channelx->CPAR = 0; + + /* Reset DMAy Channelx memory address register */ + DMAy_Channelx->CMAR = 0; + switch (*(uint32_t*)&DMAy_Channelx) + { + case DMA1_Channel1_BASE: + /* Reset interrupt pending bits for DMA1 Channel1 */ + DMA1->IFCR |= DMA1_Channel1_IT_Mask; + break; + case DMA1_Channel2_BASE: + /* Reset interrupt pending bits for DMA1 Channel2 */ + DMA1->IFCR |= DMA1_Channel2_IT_Mask; + break; + case DMA1_Channel3_BASE: + /* Reset interrupt pending bits for DMA1 Channel3 */ + DMA1->IFCR |= DMA1_Channel3_IT_Mask; + break; + case DMA1_Channel4_BASE: + /* Reset interrupt pending bits for DMA1 Channel4 */ + DMA1->IFCR |= DMA1_Channel4_IT_Mask; + break; + case DMA1_Channel5_BASE: + /* Reset interrupt pending bits for DMA1 Channel5 */ + DMA1->IFCR |= DMA1_Channel5_IT_Mask; + break; + + + default: + break; + } +} + +/** +* @brief Initializes the DMAy Channelx according to the specified +* parameters in the DMA_InitStruct. +* @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and +* x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* @param DMA_InitStruct: pointer to a DMA_InitTypeDef structure that +* contains the configuration information for the specified +* DMA Channel. +* @retval : None +*/ +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_DMA_DIR(DMA_InitStruct->DMA_DIR)); + assert_param(IS_DMA_BUFFER_SIZE(DMA_InitStruct->DMA_BufferSize)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(DMA_InitStruct->DMA_PeripheralInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(DMA_InitStruct->DMA_MemoryInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(DMA_InitStruct->DMA_PeripheralDataSize)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(DMA_InitStruct->DMA_MemoryDataSize)); + assert_param(IS_DMA_MODE(DMA_InitStruct->DMA_Mode)); + assert_param(IS_DMA_PRIORITY(DMA_InitStruct->DMA_Priority)); + assert_param(IS_DMA_M2M_STATE(DMA_InitStruct->DMA_M2M)); + /*--------------------------- DMAy Channelx CCR Configuration -----------------*/ + /* Get the DMAy_Channelx CCR value */ + tmpreg = DMAy_Channelx->CCR; + /* Clear MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */ + tmpreg &= CCR_CLEAR_Mask; + /* Configure DMAy Channelx: data transfer, data size, priority level and mode */ + /* Set DIR bit according to DMA_DIR value */ + /* Set CIRC bit according to DMA_Mode value */ + /* Set PINC bit according to DMA_PeripheralInc value */ + /* Set MINC bit according to DMA_MemoryInc value */ + /* Set PSIZE bits according to DMA_PeripheralDataSize value */ + /* Set MSIZE bits according to DMA_MemoryDataSize value */ + /* Set PL bits according to DMA_Priority value */ + /* Set the MEM2MEM bit according to DMA_M2M value */ + tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode | + DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | + DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | + DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M; + /* Write to DMAy Channelx CCR */ + DMAy_Channelx->CCR = tmpreg; + /*--------------------------- DMAy Channelx CNDTR Configuration ---------------*/ + /* Write to DMAy Channelx CNDTR */ + DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize; + /*--------------------------- DMAy Channelx CPAR Configuration ----------------*/ + /* Write to DMAy Channelx CPAR */ + DMAy_Channelx->CPAR = DMA_InitStruct->DMA_PeripheralBaseAddr; + /*--------------------------- DMAy Channelx CMAR Configuration ----------------*/ + /* Write to DMAy Channelx CMAR */ + DMAy_Channelx->CMAR = DMA_InitStruct->DMA_MemoryBaseAddr; +} + +/** +* @brief Fills each DMA_InitStruct member with its default value. +* @param DMA_InitStruct : pointer to a DMA_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct) +{ + /*-------------- Reset DMA init structure parameters values ------------------*/ + /* Initialize the DMA_PeripheralBaseAddr member */ + DMA_InitStruct->DMA_PeripheralBaseAddr = 0; + /* Initialize the DMA_MemoryBaseAddr member */ + DMA_InitStruct->DMA_MemoryBaseAddr = 0; + /* Initialize the DMA_DIR member */ + DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC; + /* Initialize the DMA_BufferSize member */ + DMA_InitStruct->DMA_BufferSize = 0; + /* Initialize the DMA_PeripheralInc member */ + DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; + /* Initialize the DMA_MemoryInc member */ + DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; + /* Initialize the DMA_PeripheralDataSize member */ + DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + /* Initialize the DMA_MemoryDataSize member */ + DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + /* Initialize the DMA_Mode member */ + DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; + /* Initialize the DMA_Priority member */ + DMA_InitStruct->DMA_Priority = DMA_Priority_Low; + /* Initialize the DMA_M2M member */ + DMA_InitStruct->DMA_M2M = DMA_M2M_Disable; +} + +/** +* @brief Enables or disables the specified DMAy Channelx. +* @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and +* x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* @param NewState: new state of the DMAy Channelx. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected DMAy Channelx */ + DMAy_Channelx->CCR |= CCR_ENABLE_Set; + } + else + { + /* Disable the selected DMAy Channelx */ + DMAy_Channelx->CCR &= CCR_ENABLE_Reset; + } +} + +/** +* @brief Enables or disables the specified DMAy Channelx interrupts. +* @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and +* x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* @param DMA_IT: specifies the DMA interrupts sources to be enabled +* or disabled. +* This parameter can be any combination of the following values: +* @arg DMA_IT_TC: Transfer complete interrupt mask +* @arg DMA_IT_HT: Half transfer interrupt mask +* @arg DMA_IT_TE: Transfer error interrupt mask +* @param NewState: new state of the specified DMA interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + assert_param(IS_DMA_CONFIG_IT(DMA_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected DMA interrupts */ + DMAy_Channelx->CCR |= DMA_IT; + } + else + { + /* Disable the selected DMA interrupts */ + DMAy_Channelx->CCR &= ~DMA_IT; + } +} + +/** +* @brief Returns the number of remaining data units in the current +* DMAy Channelx transfer. +* @param DMAy_Channelx: where y can be 1 or 2 to select the DMA and +* x can be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* @retval : The number of remaining data units in the current DMAy Channelx +* transfer. +*/ +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx)); + /* Return the number of remaining data units for DMAy Channelx */ + return ((uint16_t)(DMAy_Channelx->CNDTR)); +} + +/** +* @brief Checks whether the specified DMAy Channelx flag is set or not. +* @param DMA_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg DMA1_FLAG_GL1: DMA1 Channel1 global flag. +* @arg DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. +* @arg DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. +* @arg DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. +* @arg DMA1_FLAG_GL2: DMA1 Channel2 global flag. +* @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. +* @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. +* @arg DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. +* @arg DMA1_FLAG_GL3: DMA1 Channel3 global flag. +* @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. +* @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. +* @arg DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. +* @arg DMA1_FLAG_GL4: DMA1 Channel4 global flag. +* @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. +* @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. +* @arg DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. +* @arg DMA1_FLAG_GL5: DMA1 Channel5 global flag. +* @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. +* @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. +* @arg DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. +* @arg DMA1_FLAG_GL6: DMA1 Channel6 global flag. +* @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. +* @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. +* @arg DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. +* @arg DMA1_FLAG_GL7: DMA1 Channel7 global flag. +* @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. +* @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. +* @arg DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. +* @retval : The new state of DMA_FLAG (SET or RESET). +*/ +FlagStatus DMA_GetFlagStatus(uint32_t DMA_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_DMA_GET_FLAG(DMA_FLAG)); + + /* Get DMA1 ISR register value */ + tmpreg = DMA1->ISR ; + + /* Check the status of the specified DMA flag */ + if ((tmpreg & DMA_FLAG) != (uint32_t)RESET) + { + /* DMA_FLAG is set */ + bitstatus = SET; + } + else + { + /* DMA_FLAG is reset */ + bitstatus = RESET; + } + + /* Return the DMA_FLAG status */ + return bitstatus; +} + +/** +* @brief Clears the DMAy Channelx's pending flags. +* @param DMA_FLAG: specifies the flag to clear. +* This parameter can be any combination (for the same DMA) of +* the following values: +* @arg DMA1_FLAG_GL1: DMA1 Channel1 global flag. +* @arg DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. +* @arg DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. +* @arg DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. +* @arg DMA1_FLAG_GL2: DMA1 Channel2 global flag. +* @arg DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. +* @arg DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. +* @arg DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. +* @arg DMA1_FLAG_GL3: DMA1 Channel3 global flag. +* @arg DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. +* @arg DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. +* @arg DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. +* @arg DMA1_FLAG_GL4: DMA1 Channel4 global flag. +* @arg DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. +* @arg DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. +* @arg DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. +* @arg DMA1_FLAG_GL5: DMA1 Channel5 global flag. +* @arg DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. +* @arg DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. +* @arg DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. +* @arg DMA1_FLAG_GL6: DMA1 Channel6 global flag. +* @arg DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. +* @arg DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. +* @arg DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. +* @arg DMA1_FLAG_GL7: DMA1 Channel7 global flag. +* @arg DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. +* @arg DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. +* @arg DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. +* @retval : None +*/ +void DMA_ClearFlag(uint32_t DMA_FLAG) +{ + /* Check the parameters */ + assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG)); + + /* Clear the selected DMA flags */ + DMA1->IFCR = DMA_FLAG; +} + +/** +* @brief Checks whether the specified DMAy Channelx interrupt has +* occurred or not. +* @param DMA_IT: specifies the DMA interrupt source to check. +* This parameter can be one of the following values: +* @arg DMA1_IT_GL1: DMA1 Channel1 global interrupt. +* @arg DMA1_IT_TC1: DMA1 Channel1 transfer complete interrupt. +* @arg DMA1_IT_HT1: DMA1 Channel1 half transfer interrupt. +* @arg DMA1_IT_TE1: DMA1 Channel1 transfer error interrupt. +* @arg DMA1_IT_GL2: DMA1 Channel2 global interrupt. +* @arg DMA1_IT_TC2: DMA1 Channel2 transfer complete interrupt. +* @arg DMA1_IT_HT2: DMA1 Channel2 half transfer interrupt. +* @arg DMA1_IT_TE2: DMA1 Channel2 transfer error interrupt. +* @arg DMA1_IT_GL3: DMA1 Channel3 global interrupt. +* @arg DMA1_IT_TC3: DMA1 Channel3 transfer complete interrupt. +* @arg DMA1_IT_HT3: DMA1 Channel3 half transfer interrupt. +* @arg DMA1_IT_TE3: DMA1 Channel3 transfer error interrupt. +* @arg DMA1_IT_GL4: DMA1 Channel4 global interrupt. +* @arg DMA1_IT_TC4: DMA1 Channel4 transfer complete interrupt. +* @arg DMA1_IT_HT4: DMA1 Channel4 half transfer interrupt. +* @arg DMA1_IT_TE4: DMA1 Channel4 transfer error interrupt. +* @arg DMA1_IT_GL5: DMA1 Channel5 global interrupt. +* @arg DMA1_IT_TC5: DMA1 Channel5 transfer complete interrupt. +* @arg DMA1_IT_HT5: DMA1 Channel5 half transfer interrupt. +* @arg DMA1_IT_TE5: DMA1 Channel5 transfer error interrupt. +* @arg DMA1_IT_GL6: DMA1 Channel6 global interrupt. +* @arg DMA1_IT_TC6: DMA1 Channel6 transfer complete interrupt. +* @arg DMA1_IT_HT6: DMA1 Channel6 half transfer interrupt. +* @arg DMA1_IT_TE6: DMA1 Channel6 transfer error interrupt. +* @arg DMA1_IT_GL7: DMA1 Channel7 global interrupt. +* @arg DMA1_IT_TC7: DMA1 Channel7 transfer complete interrupt. +* @arg DMA1_IT_HT7: DMA1 Channel7 half transfer interrupt. +* @arg DMA1_IT_TE7: DMA1 Channel7 transfer error interrupt. +* @retval : The new state of DMA_IT (SET or RESET). +*/ +ITStatus DMA_GetITStatus(uint32_t DMA_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_DMA_GET_IT(DMA_IT)); + + /* Get DMA1 ISR register value */ + tmpreg = DMA1->ISR ; + + /* Check the status of the specified DMA interrupt */ + if ((tmpreg & DMA_IT) != (uint32_t)RESET) + { + /* DMA_IT is set */ + bitstatus = SET; + } + else + { + /* DMA_IT is reset */ + bitstatus = RESET; + } + /* Return the DMA_IT status */ + return bitstatus; +} + +/** +* @brief Clears the DMAy Channelx’s interrupt pending bits. +* @param DMA_IT: specifies the DMA interrupt pending bit to clear. +* This parameter can be any combination (for the same DMA) of +* the following values: +* @arg DMA1_IT_GL1: DMA1 Channel1 global interrupt. +* @arg DMA1_IT_TC1: DMA1 Channel1 transfer complete interrupt. +* @arg DMA1_IT_HT1: DMA1 Channel1 half transfer interrupt. +* @arg DMA1_IT_TE1: DMA1 Channel1 transfer error interrupt. +* @arg DMA1_IT_GL2: DMA1 Channel2 global interrupt. +* @arg DMA1_IT_TC2: DMA1 Channel2 transfer complete interrupt. +* @arg DMA1_IT_HT2: DMA1 Channel2 half transfer interrupt. +* @arg DMA1_IT_TE2: DMA1 Channel2 transfer error interrupt. +* @arg DMA1_IT_GL3: DMA1 Channel3 global interrupt. +* @arg DMA1_IT_TC3: DMA1 Channel3 transfer complete interrupt. +* @arg DMA1_IT_HT3: DMA1 Channel3 half transfer interrupt. +* @arg DMA1_IT_TE3: DMA1 Channel3 transfer error interrupt. +* @arg DMA1_IT_GL4: DMA1 Channel4 global interrupt. +* @arg DMA1_IT_TC4: DMA1 Channel4 transfer complete interrupt. +* @arg DMA1_IT_HT4: DMA1 Channel4 half transfer interrupt. +* @arg DMA1_IT_TE4: DMA1 Channel4 transfer error interrupt. +* @arg DMA1_IT_GL5: DMA1 Channel5 global interrupt. +* @arg DMA1_IT_TC5: DMA1 Channel5 transfer complete interrupt. +* @arg DMA1_IT_HT5: DMA1 Channel5 half transfer interrupt. +* @arg DMA1_IT_TE5: DMA1 Channel5 transfer error interrupt. +* @arg DMA1_IT_GL6: DMA1 Channel6 global interrupt. +* @arg DMA1_IT_TC6: DMA1 Channel6 transfer complete interrupt. +* @arg DMA1_IT_HT6: DMA1 Channel6 half transfer interrupt. +* @arg DMA1_IT_TE6: DMA1 Channel6 transfer error interrupt. +* @arg DMA1_IT_GL7: DMA1 Channel7 global interrupt. +* @arg DMA1_IT_TC7: DMA1 Channel7 transfer complete interrupt. +* @arg DMA1_IT_HT7: DMA1 Channel7 half transfer interrupt. +* @arg DMA1_IT_TE7: DMA1 Channel7 transfer error interrupt. +* @retval : None +*/ +void DMA_ClearITPendingBit(uint32_t DMA_IT) +{ + /* Check the parameters */ + assert_param(IS_DMA_CLEAR_IT(DMA_IT)); + + /* Clear the selected DMA interrupt pending bits */ + DMA1->IFCR = DMA_IT; + +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_exti.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_exti.c new file mode 100644 index 0000000000..fc3898f749 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_exti.c @@ -0,0 +1,272 @@ +/** +****************************************************************************** +* @file HAL_exti.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the EXTI firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_exti.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup EXTI +* @brief EXTI driver modules +* @{ +*/ + +/** @defgroup EXTI_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Private_Defines +* @{ +*/ + +#define EXTI_LineNone ((uint32_t)0x00000) /* No interrupt selected */ + +/** +* @} +*/ + +/** @defgroup EXTI_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup EXTI_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the EXTI peripheral registers to their default +* reset values. +* @param None +* @retval : None +*/ +void EXTI_DeInit(void) +{ + EXTI->IMR = 0x00000000; + EXTI->EMR = 0x00000000; + EXTI->RTSR = 0x00000000; + EXTI->FTSR = 0x00000000; + EXTI->PR = 0x001FFFFF; +} + +/** +* @brief Initializes the EXTI peripheral according to the specified +* parameters in the EXTI_InitStruct. +* @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure +* that contains the configuration information for the EXTI +* peripheral. +* @retval : None +*/ +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) +{ + uint32_t tmp = 0; + /* Check the parameters */ + assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode)); + assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger)); + assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line)); + assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd)); + + tmp = (uint32_t)EXTI_BASE; + + if (EXTI_InitStruct->EXTI_LineCmd != DISABLE) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line; + + tmp += EXTI_InitStruct->EXTI_Mode; + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + + /* Clear Rising Falling edge configuration */ + EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line; + + /* Select the trigger for the selected external interrupts */ + if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) + { + /* Rising Falling edge */ + EXTI->RTSR |= EXTI_InitStruct->EXTI_Line; + EXTI->FTSR |= EXTI_InitStruct->EXTI_Line; + } + else + { + tmp = (uint32_t)EXTI_BASE; + tmp += EXTI_InitStruct->EXTI_Trigger; + + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + } + } + else + { + tmp = (uint32_t)EXTI_BASE; + tmp += EXTI_InitStruct->EXTI_Mode; + /* Disable the selected external lines */ + *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line; + } +} + +/** +* @brief Fills each EXTI_InitStruct member with its reset value. +* @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) +{ + EXTI_InitStruct->EXTI_Line = EXTI_LineNone; + EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStruct->EXTI_LineCmd = DISABLE; +} + +/** +* @brief Generates a Software interrupt. +* @param EXTI_Line: specifies the EXTI lines to be enabled or +* disabled. +* This parameter can be any combination of EXTI_Linex where +* x can be (0..18). +* @retval : None +*/ +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->SWIER |= EXTI_Line; +} + +/** +* @brief Checks whether the specified EXTI line flag is set or not. +* @param EXTI_Line: specifies the EXTI line flag to check. +* This parameter can be: +* @arg EXTI_Linex: External interrupt line x where x(0..18) +* @retval : The new state of EXTI_Line (SET or RESET). +*/ +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_GET_EXTI_LINE(EXTI_Line)); + + if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the EXTI’s line pending flags. +* @param EXTI_Line: specifies the EXTI lines flags to clear. +* This parameter can be any combination of EXTI_Linex where +* x can be (0..18). +* @retval : None +*/ +void EXTI_ClearFlag(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->PR = EXTI_Line; +} + +/** +* @brief Checks whether the specified EXTI line is asserted or not. +* @param EXTI_Line: specifies the EXTI line to check. +* This parameter can be: +* @arg EXTI_Linex: External interrupt line x where x(0..18) +* @retval : The new state of EXTI_Line (SET or RESET). +*/ +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + /* Check the parameters */ + assert_param(IS_GET_EXTI_LINE(EXTI_Line)); + + enablestatus = EXTI->IMR & EXTI_Line; + if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the EXTI’s line pending bits. +* @param EXTI_Line: specifies the EXTI lines to clear. +* This parameter can be any combination of EXTI_Linex where +* x can be (0..18). +* @retval : None +*/ +void EXTI_ClearITPendingBit(uint32_t EXTI_Line) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(EXTI_Line)); + + EXTI->PR = EXTI_Line; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_flash.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_flash.c new file mode 100644 index 0000000000..c8790a5fa9 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_flash.c @@ -0,0 +1,893 @@ +/** +****************************************************************************** +* @file HAL_flash.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the FLASH firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_flash.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup FLASH +* @brief FLASH driver modules +* @{ +*/ + +/** @defgroup FLASH_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup FLASH_Private_Defines +* @{ +*/ + +/* Flash Access Control Register bits */ +#define ACR_LATENCY_Mask ((uint32_t)0x00000038) +#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7) +#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF) + +/* Flash Access Control Register bits */ +#define ACR_PRFTBS_Mask ((uint32_t)0x00000020) + +/* Flash Control Register bits */ +#define CR_PG_Set ((uint32_t)0x00000001) +#define CR_PG_Reset ((uint32_t)0x00001FFE) +#define CR_PER_Set ((uint32_t)0x00000002) +#define CR_PER_Reset ((uint32_t)0x00001FFD) +#define CR_MER_Set ((uint32_t)0x00000004) +#define CR_MER_Reset ((uint32_t)0x00001FFB) +#define CR_OPTPG_Set ((uint32_t)0x00000010) +#define CR_OPTPG_Reset ((uint32_t)0x00001FEF) +#define CR_OPTER_Set ((uint32_t)0x00000020) +#define CR_OPTER_Reset ((uint32_t)0x00001FDF) +#define CR_STRT_Set ((uint32_t)0x00000040) +#define CR_LOCK_Set ((uint32_t)0x00000080) + +/* FLASH Mask */ +#define RDPRT_Mask ((uint32_t)0x00000002) +#define WRP0_Mask ((uint32_t)0x000000FF) +#define WRP1_Mask ((uint32_t)0x0000FF00) +#define WRP2_Mask ((uint32_t)0x00FF0000) +#define WRP3_Mask ((uint32_t)0xFF000000) + +/* FLASH Keys */ +#define RDP_Key ((uint16_t)0x00A5) +#define FLASH_KEY1 ((uint32_t)0x45670123) +#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) + +/* Delay definition */ +#define EraseTimeout ((uint32_t)0x00000FFF) +#define ProgramTimeout ((uint32_t)0x0000000F) + +/** +* @} +*/ + +/** @defgroup FLASH_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup FLASH_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup FLASH_Private_FunctionPrototypes +* @{ +*/ + +static void delay(void); +/** +* @} +*/ + +/** @defgroup FLASH_Private_Functions +* @{ +*/ + +/** +* @brief Sets the code latency value. +* @param FLASH_Latency: specifies the FLASH Latency value. +* This parameter can be one of the following values: +* @arg FLASH_Latency_0: FLASH Zero Latency cycle +* @arg FLASH_Latency_1: FLASH One Latency cycle +* @arg FLASH_Latency_2: FLASH Two Latency cycles +* @arg FLASH_Latency_3: FLASH Three Latency cycles +* @retval : None +*/ +void FLASH_SetLatency(uint32_t FLASH_Latency) +{ + uint32_t tmpreg = 0; + + /* Check the parameters */ + assert_param(IS_FLASH_LATENCY(FLASH_Latency)); + + /* Read the ACR register */ + tmpreg = FLASH->ACR; + + /* Sets the Latency value */ + tmpreg &= ACR_LATENCY_Mask; + tmpreg |= FLASH_Latency; + + /* Write the ACR register */ + FLASH->ACR = tmpreg; +} + +/** +* @brief Enables or disables the Half cycle flash access. +* @param FLASH_HalfCycleAccess: specifies the FLASH Half cycle Access mode. +* This parameter can be one of the following values: +* @arg FLASH_HalfCycleAccess_Enable: FLASH Half Cycle Enable +* @arg FLASH_HalfCycleAccess_Disable: FLASH Half Cycle Disable +* @retval : None +*/ +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess) +{ + /* Check the parameters */ + assert_param(IS_FLASH_HALFCYCLEACCESS_STATE(FLASH_HalfCycleAccess)); + + /* Enable or disable the Half cycle access */ + FLASH->ACR &= ACR_HLFCYA_Mask; + FLASH->ACR |= FLASH_HalfCycleAccess; +} + +/** +* @brief Enables or disables the Prefetch Buffer. +* @param FLASH_PrefetchBuffer: specifies the Prefetch buffer status. +* This parameter can be one of the following values: +* @arg FLASH_PrefetchBuffer_Enable: FLASH Prefetch Buffer Enable +* @arg FLASH_PrefetchBuffer_Disable: FLASH Prefetch Buffer Disable +* @retval : None +*/ +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer) +{ + /* Check the parameters */ + assert_param(IS_FLASH_PREFETCHBUFFER_STATE(FLASH_PrefetchBuffer)); + + /* Enable or disable the Prefetch Buffer */ + FLASH->ACR &= ACR_PRFTBE_Mask; + FLASH->ACR |= FLASH_PrefetchBuffer; +} + +/** +* @brief Unlocks the FLASH Program Erase Controller. +* @param None +* @retval : None +*/ +void FLASH_Unlock(void) +{ + /* Authorize the FPEC Access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; +} + +/** +* @brief Locks the FLASH Program Erase Controller. +* @param None +* @retval : None +*/ +void FLASH_Lock(void) +{ + /* Set the Lock Bit to lock the FPEC and the FCR */ + FLASH->CR |= CR_LOCK_Set; +} + +/** +* @brief Erases a specified FLASH page. +* @param Page_Address: The page address to be erased. +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_ErasePage(uint32_t Page_Address) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Page_Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase the page */ + FLASH->CR|= CR_PER_Set; + FLASH->AR = Page_Address; + FLASH->CR|= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status != FLASH_BUSY) + { + /* if the erase operation is completed, disable the PER Bit */ + FLASH->CR &= CR_PER_Reset; + } + } + + /* Return the Erase Status */ + return status; +} + +/** +* @brief Erases all FLASH pages. +* @param None +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_EraseAllPages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to erase all pages */ + FLASH->CR |= CR_MER_Set; + FLASH->CR |= CR_STRT_Set; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status != FLASH_BUSY) + { + /* if the erase operation is completed, disable the MER Bit */ + FLASH->CR &= CR_MER_Reset; + } + } + + + /* Return the Erase Status */ + return status; +} + +/** +* @brief Erases the FLASH option bytes. +* @param None +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_EraseOptionBytes(void) +{ + FLASH_Status status = FLASH_COMPLETE; + + FLASH->AR = 0x1ffff800; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + + /* if the previous operation is completed, proceed to erase the option bytes */ + FLASH->CR |= CR_OPTER_Set; + FLASH->CR |= CR_STRT_Set; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the erase operation is completed, disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + + /* Enable the readout access */ + OB->RDP= RDP_Key; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + else + { + if (status != FLASH_BUSY) + { + /* Disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + } + + /* Return the erase status */ + return status; +} + + +/** +* @brief Programs a word at a specified address. +* @param Address: specifies the address to be programmed. +* @param Data: specifies the data to be programmed. +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new first + half word */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new second + half word */ + *(__IO uint16_t*)(Address + 2) = Data >> 16; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status != FLASH_BUSY) + { + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } + else + { + if (status != FLASH_BUSY) + { + /* Disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } + } + + + /* Return the Program Status */ + return status; +} + +/** +* @brief Programs a half word at a specified address. +* @param Address: specifies the address to be programmed. +* @param Data: specifies the data to be programmed. +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* if the previous operation is completed, proceed to program the new data */ + FLASH->CR |= CR_PG_Set; + + *(__IO uint16_t*)Address = Data; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the PG Bit */ + FLASH->CR &= CR_PG_Reset; + } + } + + /* Return the Program Status */ + return status; +} + +/** +* @brief Programs a half word at a specified Option Byte Data address. +* @param Address: specifies the address to be programmed. +* This parameter can be 0x1FFFF804 or 0x1FFFF806. +* @param Data: specifies the data to be programmed. +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_OB_DATA_ADDRESS(Address)); + + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status == FLASH_COMPLETE) + { + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + /* Enables the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + *(__IO uint16_t*)Address = Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + /* Return the Option Byte Data Program Status */ + return status; +} + +/** +* @brief Write protects the desired pages +* @param FLASH_Pages: specifies the address of the pages to be +* write protected. This parameter can be: +* @arg For microcontroller Medium-density devices (FLASH page size equal to 1 KB) +* A value between FLASH_WRProt_Pages0to3 and FLASH_WRProt_Pages124to127 +* @arg For microcontroller High-density devices (FLASH page size equal to 2 KB) +* A value between FLASH_WRProt_Pages0to1 and FLASH_WRProt_Pages60to61 +* or FLASH_WRProt_Pages62to255 +* @arg FLASH_WRProt_AllPages +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages) +{ + uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; + + FLASH_Status status = FLASH_COMPLETE; + + /* Check the parameters */ + assert_param(IS_FLASH_WRPROT_PAGE(FLASH_Pages)); + + FLASH_Pages = (uint32_t)(~FLASH_Pages); + WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask); + WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8); + WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16); + WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Authorizes the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + FLASH->CR |= CR_OPTPG_Set; + if(WRP0_Data != 0xFF) + { + OB->WRP0 = WRP0_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF)) + { + OB->WRP1 = WRP1_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF)) + { + OB->WRP2 = WRP2_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if((status == FLASH_COMPLETE)&& (WRP3_Data != 0xFF)) + { + OB->WRP3 = WRP3_Data; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + + /* Return the write protection operation Status */ + return status; +} + +/** +* @brief Enables or disables the read out protection. +* If the user has already programmed the other option bytes before +* calling this function, he must re-program them since this +* function erases all option bytes. +* @param Newstate: new state of the ReadOut Protection. +* This parameter can be: ENABLE or DISABLE. +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + FLASH->AR = 0x1ffff800; + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* Authorizes the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + FLASH->CR |= CR_OPTER_Set; + FLASH->CR |= CR_STRT_Set; + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + /* if the erase operation is completed, disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + if(NewState != DISABLE) + { + OB->RDP = 0x00; + } + else + { + OB->RDP = RDP_Key; + } + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + else + { + if(status != FLASH_BUSY) + { + /* Disable the OPTER Bit */ + FLASH->CR &= CR_OPTER_Reset; + } + } + } + + /* Return the protection operation Status */ + return status; +} + +/** +* @brief Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / +* RST_STDBY. +* @param OB_IWDG: Selects the IWDG mode +* This parameter can be one of the following values: +* @arg OB_IWDG_SW: Software IWDG selected +* @arg OB_IWDG_HW: Hardware IWDG selected +* @param OB_STOP: Reset event when entering STOP mode. +* This parameter can be one of the following values: +* @arg OB_STOP_NoRST: No reset generated when entering in STOP +* @arg OB_STOP_RST: Reset generated when entering in STOP +* @param OB_STDBY: Reset event when entering Standby mode. +* This parameter can be one of the following values: +* @arg OB_STDBY_NoRST: No reset generated when entering in STANDBY +* @arg OB_STDBY_RST: Reset generated when entering in STANDBY +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY) +{ + FLASH_Status status = FLASH_COMPLETE; + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE(OB_IWDG)); + assert_param(IS_OB_STOP_SOURCE(OB_STOP)); + assert_param(IS_OB_STDBY_SOURCE(OB_STDBY)); + + /* Authorize the small information block programming */ + FLASH->OPTKEYR = FLASH_KEY1; + FLASH->OPTKEYR = FLASH_KEY2; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + /* Enable the Option Bytes Programming operation */ + FLASH->CR |= CR_OPTPG_Set; + + OB->USER = ( OB_IWDG | OB_STOP |OB_STDBY) | (uint16_t)0xF8; + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_BUSY) + { + /* if the program operation is completed, disable the OPTPG Bit */ + FLASH->CR &= CR_OPTPG_Reset; + } + } + + /* Return the Option Byte program Status */ + return status; +} + +/** +* @brief Returns the FLASH User Option Bytes values. +* @param None +* @retval : The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1) +* and RST_STDBY(Bit2). +*/ +uint32_t FLASH_GetUserOptionByte(void) +{ + /* Return the User Option Byte */ + return (uint32_t)(FLASH->OBR >> 2); +} + +/** +* @brief Returns the FLASH Write Protection Option Bytes Register value. +* @param None +* @retval : The FLASH Write Protection Option Bytes Register value +*/ +uint32_t FLASH_GetWriteProtectionOptionByte(void) +{ + /* Return the Falsh write protection Register value */ + return (uint32_t)(FLASH->WRPR); +} + +/** +* @brief Checks whether the FLASH Read Out Protection Status is set +* or not. +* @param None +* @retval : FLASH ReadOut Protection Status(SET or RESET) +*/ +FlagStatus FLASH_GetReadOutProtectionStatus(void) +{ + FlagStatus readoutstatus = RESET; + if ((FLASH->OBR & RDPRT_Mask) != (uint32_t)RESET) + { + readoutstatus = SET; + } + else + { + readoutstatus = RESET; + } + return readoutstatus; +} + +/** +* @brief Checks whether the FLASH Prefetch Buffer status is set or not. +* @param None +* @retval : FLASH Prefetch Buffer Status (SET or RESET). +*/ +FlagStatus FLASH_GetPrefetchBufferStatus(void) +{ + FlagStatus bitstatus = RESET; + + if ((FLASH->ACR & ACR_PRFTBS_Mask) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the new state of FLASH Prefetch Buffer Status (SET or RESET) */ + return bitstatus; +} + +/** +* @brief Enables or disables the specified FLASH interrupts. +* @param FLASH_IT: specifies the FLASH interrupt sources to be +* enabled or disabled. +* This parameter can be any combination of the following values: +* @arg FLASH_IT_ERROR: FLASH Error Interrupt +* @arg FLASH_IT_EOP: FLASH end of operation Interrupt +* @param NewState: new state of the specified Flash interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void FLASH_ITConfig(uint16_t FLASH_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FLASH_IT(FLASH_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if(NewState != DISABLE) + { + /* Enable the interrupt sources */ + FLASH->CR |= FLASH_IT; + } + else + { + /* Disable the interrupt sources */ + FLASH->CR &= ~(uint32_t)FLASH_IT; + } +} + +/** +* @brief Checks whether the specified FLASH flag is set or not. +* @param FLASH_FLAG: specifies the FLASH flag to check. +* This parameter can be one of the following values: +* @arg FLASH_FLAG_BSY: FLASH Busy flag +* @arg FLASH_FLAG_PGERR: FLASH Program error flag +* @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag +* @arg FLASH_FLAG_EOP: FLASH End of Operation flag +* @arg FLASH_FLAG_OPTERR: FLASH Option Byte error flag +* @retval : The new state of FLASH_FLAG (SET or RESET). +*/ +FlagStatus FLASH_GetFlagStatus(uint16_t FLASH_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_FLASH_GET_FLAG(FLASH_FLAG)) ; + if(FLASH_FLAG == FLASH_FLAG_OPTERR) + { + if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((FLASH->SR & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + /* Return the new state of FLASH_FLAG (SET or RESET) */ + return bitstatus; +} + +/** +* @brief Clears the FLASH’s pending flags. +* @param FLASH_FLAG: specifies the FLASH flags to clear. +* This parameter can be any combination of the following values: +* @arg FLASH_FLAG_BSY: FLASH Busy flag +* @arg FLASH_FLAG_PGERR: FLASH Program error flag +* @arg FLASH_FLAG_WRPRTERR: FLASH Write protected error flag +* @arg FLASH_FLAG_EOP: FLASH End of Operation flag +* @retval : None +*/ +void FLASH_ClearFlag(uint16_t FLASH_FLAG) +{ + /* Check the parameters */ + assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)) ; + + /* Clear the flags */ + FLASH->SR = FLASH_FLAG; +} + +/** +* @brief Returns the FLASH Status. +* @param None +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP or FLASH_COMPLETE +*/ +FLASH_Status FLASH_GetStatus(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if(FLASH->SR & FLASH_FLAG_PGERR) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if(FLASH->SR & FLASH_FLAG_WRPRTERR) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + /* Return the Flash Status */ + return flashstatus; +} + +/** +* @brief Waits for a Flash operation to complete or a TIMEOUT to occur. +* @param Timeout: FLASH progamming Timeout +* @retval : FLASH Status: The returned value can be: FLASH_BUSY, +* FLASH_ERROR_PG, FLASH_ERROR_WRP, FLASH_COMPLETE or +* FLASH_TIMEOUT. +*/ +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + /* Check for the Flash Status */ + status = FLASH_GetStatus(); + /* Wait for a Flash operation to complete or a TIMEOUT to occur */ + while((status == FLASH_BUSY) && (Timeout != 0x00)) + { + delay(); + status = FLASH_GetStatus(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + + /* Return the operation status */ + return status; +} + +/** +* @brief Inserts a time delay. +* @param None +* @retval : None +*/ +static void delay(void) +{ + __IO uint32_t i = 0; + for(i = 0xFF; i != 0; i--) + { + } +} + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_gpio.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_gpio.c new file mode 100644 index 0000000000..fa12ae620e --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_gpio.c @@ -0,0 +1,488 @@ +/** +****************************************************************************** +* @file HAL_gpio.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the GPIO firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_gpio.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup GPIO +* @brief GPIO driver modules +* @{ +*/ + +/** @defgroup GPIO_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup GPIO_Private_Defines +* @{ +*/ + +/* ------------ RCC registers bit address in the alias region ----------------*/ +#define AFIO_OFFSET (AFIO_BASE - PERIPH_BASE) + +/* --- EVENTCR Register -----*/ + +/* Alias word address of EVOE bit */ +#define EVCR_OFFSET (AFIO_OFFSET + 0x00) +#define EVOE_BitNumber ((uint8_t)0x07) +#define EVCR_EVOE_BB (PERIPH_BB_BASE + (EVCR_OFFSET * 32) + (EVOE_BitNumber * 4)) +#define EVCR_PORTPINCONFIG_MASK ((uint16_t)0xFF80) +#define LSB_MASK ((uint16_t)0xFFFF) +#define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000) +#define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF) +#define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000) +#define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000) + +/** +* @} +*/ + +/** @defgroup GPIO_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup GPIO_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup GPIO_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup GPIO_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the GPIOx peripheral registers to their default +* reset values. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @retval : None +*/ +void GPIO_DeInit(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + switch (*(uint32_t*)&GPIOx) + { + case GPIOA_BASE: + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, DISABLE); + break; + case GPIOB_BASE: + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, DISABLE); + break; + case GPIOC_BASE: + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, DISABLE); + break; + case GPIOD_BASE: + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, DISABLE); + break; + + default: + break; + } +} + + +/** +* @brief Initializes the GPIOx peripheral according to the specified +* parameters in the GPIO_InitStruct. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that +* contains the configuration information for the specified GPIO +* peripheral. +* @retval : None +*/ +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) +{ + uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; + uint32_t tmpreg = 0x00, pinmask = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); + assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); + + /*---------------------------- GPIO Mode Configuration -----------------------*/ + currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F); + if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00) + { + /* Check the parameters */ + assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); + /* Output mode */ + currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed; + } + /*---------------------------- GPIO CRL Configuration ------------------------*/ + /* Configure the eight low port pins */ + if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00) + { + tmpreg = GPIOx->CRL; + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = ((uint32_t)0x01) << pinpos; + /* Get the port pins position */ + currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; + if (currentpin == pos) + { + pos = pinpos << 2; + /* Clear the corresponding low control register bits */ + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + /* Write the mode configuration in the corresponding bits */ + tmpreg |= (currentmode << pos); + /* Reset the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BRR = (((uint32_t)0x01) << pinpos); + } + else + { + /* Set the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSRR = (((uint32_t)0x01) << pinpos); + } + } + } + } + GPIOx->CRL = tmpreg; + } + /*---------------------------- GPIO CRH Configuration ------------------------*/ + /* Configure the eight high port pins */ + if (GPIO_InitStruct->GPIO_Pin > 0x00FF) + { + tmpreg = GPIOx->CRH; + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = (((uint32_t)0x01) << (pinpos + 0x08)); + /* Get the port pins position */ + currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos); + if (currentpin == pos) + { + pos = pinpos << 2; + /* Clear the corresponding high control register bits */ + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + /* Write the mode configuration in the corresponding bits */ + tmpreg |= (currentmode << pos); + /* Reset the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + /* Set the corresponding ODR bit */ + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + } + } + GPIOx->CRH = tmpreg; + } +} + +/** +* @brief Fills each GPIO_InitStruct member with its default value. +* @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) +{ + /* Reset GPIO init structure parameters values */ + GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; + GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING; +} + +/** +* @brief Reads the specified input port pin. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bit to read. +* This parameter can be GPIO_Pin_x where x can be (0..15). +* @retval : The input port pin value. +*/ +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** +* @brief Reads the specified GPIO input data port. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @retval : GPIO input data port value. +*/ +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->IDR); +} + +/** +* @brief Reads the specified output data port bit. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bit to read. +* This parameter can be GPIO_Pin_x where x can be (0..15). +* @retval : The output port pin value. +*/ +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + + if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + return bitstatus; +} + +/** +* @brief Reads the specified GPIO output data port. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @retval : GPIO output data port value. +*/ +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + return ((uint16_t)GPIOx->ODR); +} + +/** +* @brief Sets the selected data port bits. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bits to be written. +* This parameter can be any combination of GPIO_Pin_x where +* x can be (0..15). +* @retval : None +*/ +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BSRR = GPIO_Pin; +} + +/** +* @brief Clears the selected data port bits. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bits to be written. +* This parameter can be any combination of GPIO_Pin_x where +* x can be (0..15). +* @retval : None +*/ +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + GPIOx->BRR = GPIO_Pin; +} + +/** +* @brief Sets or clears the selected data port bit. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bit to be written. +* This parameter can be one of GPIO_Pin_x where x can be (0..15). +* @param BitVal: specifies the value to be written to the selected bit. +* This parameter can be one of the BitAction enum values: +* @arg Bit_RESET: to clear the port pin +* @arg Bit_SET: to set the port pin +* @retval : None +*/ +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_BIT_ACTION(BitVal)); + + if (BitVal != Bit_RESET) + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BRR = GPIO_Pin; + } +} + +/** +* @brief Writes data to the specified GPIO data port. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param PortVal: specifies the value to be written to the port output +* data register. +* @retval : None +*/ +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) +{ + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + + GPIOx->ODR = PortVal; +} + +/** +* @brief Locks GPIO Pins configuration registers. +* @param GPIOx: where x can be (A..G) to select the GPIO peripheral. +* @param GPIO_Pin: specifies the port bit to be written. +* This parameter can be any combination of GPIO_Pin_x where +* x can be (0..15). +* @retval : None +*/ +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t tmp = 0x00010000; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + tmp |= GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Reset LCKK bit */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKK bit */ + GPIOx->LCKR = tmp; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; + /* Read LCKK bit*/ + tmp = GPIOx->LCKR; +} + + +/** +* @brief Writes data to the specified GPIO data port. +* @param GPIOx: where x can be (A, B, C, D ) to select the GPIO peripheral. +* @param GPIO_PinSource: specifies the pin for the Alternate function. +* This parameter can be GPIO_PinSourcex where x can be (0..15) for GPIOA, GPIOB, GPIOD +* and (0..12) for GPIOC . +* @param GPIO_AF: selects the pin to used as Alternate function. +* This parameter can be one of the following value: +* @arg GPIO_AF_0: SPI1, MC0, TIM17_BKIN, SWDIO,SWCLK, +UART1 +* @arg GPIO_AF_1: UART1, TIM3_CH1, TIM3_CH2, TIM3_CH3, +TIM3_CH4, I2C1 +* @arg GPIO_AF_2: TIM2_CH1_ETR, TIM2_CH2, TIM2_CH3, +TIM2_CH3, TIM2_CH4, TIM1_BKIN, +TIM1_CH1N, TIM1_CH1, TIM1_CH2, +TIM1_CH3, TIM1_CH4, TIM1_ETR, +TIM1_CH2N, TIM1_CH3N, TIM2_CH2, +TIM1 6_BKIN, TIM16_CH1N, TIM17_CH1N, +TIM1 6_CH1, TIM17_CH1 +* @arg GPIO_AF_4: TIM14_CH1, I2C1 +* @note The pin should already been configured in Alternate Function mode(AF) +* using GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF +* @note Refer to the Alternate function mapping table in the device datasheet +* for the detailed mapping of the system and peripherals'alternate +* function I/O pins. +* @retval None +*/ +void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) +{ + uint32_t temp = 0x00; + uint32_t temp_2 = 0x00; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); + assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource)); + assert_param(IS_GPIO_AF(GPIO_AF)); + + temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); + if((GPIO_PinSource >> 0x03) ==0) + { + GPIOx->AFRL &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); + temp_2 = GPIOx->AFRL | temp; + GPIOx->AFRL = temp_2; + } + else + { + GPIOx->AFRH &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); + temp_2 = GPIOx->AFRH | temp; + GPIOx->AFRH = temp_2; + } +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_i2c.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_i2c.c new file mode 100644 index 0000000000..33c9d38202 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_i2c.c @@ -0,0 +1,839 @@ +/** +****************************************************************************** +* @file HAL_i2c.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the I2C firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_i2c.h" +#include "HAL_rcc.h" + + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup I2C +* @brief I2C driver modules +* @{ +*/ + +/** @defgroup I2C_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Private_Defines +* @{ +*/ + +/*I2c Enable disable*/ +#define IC_ENABLE_Reset ((uint16_t)0xFFFE) +#define IC_ENABLE_Set ((uint16_t)0x0001) +#define IC_CON_RESET ((uint16_t)0xFE8A) +#define INTR_MASK ((uint16_t)0xC000) + +/*I2c DMA reset*/ +#define DMA_CR_TDMAE_RDMAE_Reset ((uint16_t)0xFFFC) + +/* I2C START mask */ +#define IC_CON_START_Set ((uint16_t)0x0020) +#define IC_CON_START_Reset ((uint16_t)0xFFDF) + +/* I2C STOP mask */ +#define IC_DATA_CMD_STOP_Set ((uint16_t)0x0200) +#define IC_DATA_CMD_STOP_Reset ((uint16_t)0xFDFF) + +/* I2C ADD2 mask */ +#define IC_TAR_Reset ((uint16_t)0xFF00) + +/* I2C IC_10BITADDR_MASTER bit mask */ +#define IC_TAR_ENDUAL_Set ((uint16_t)0x1000) +#define IC_TAR_ENDUAL_Reset ((uint16_t)0xEFFF) + +/* I2C SPECIAL¡¢GC_OR_START bits mask */ +#define IC_TAR_GC_Set ((uint16_t)0x0800) +#define IC_TAR_GC_Reset ((uint16_t)0xF7FF) + +/* I2C FLAG mask */ +#define FLAG_Mask ((uint32_t)0x00793FFF) + + +static uint8_t I2C_CMD_DIR = 0; + +/*ÐÂÔö¼ÓµÄÓû§±äÁ¿£¬Íⲿµ÷ÓÃʱÐèÒª¸üиñäÁ¿Öµ*/ +uint16_t I2C_DMA_DIR = 0; + +/** +* @} +*/ + +/** @defgroup I2C_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup I2C_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the I2Cx peripheral registers to their default +* reset values. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @retval : None +*/ +void I2C_DeInit(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + switch (*(uint32_t*)&I2Cx) + { + case I2C1_BASE: + /* Enable I2C1 reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); + /* Release I2C1 from reset state */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); + break; + + default: + break; + } +} + +/** +* @brief Initializes the I2Cx peripheral according to the specified +* parameters in the I2C_InitStruct. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_InitStruct: pointer to a I2C_InitTypeDef structure that +* contains the configuration information for the specified +* I2C peripheral. +* @retval : None +*/ +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct) +{ + + uint16_t tmpreg = 0; + uint32_t pclk1 = 8000000; + //uint32_t minSclLowTime = 0; + uint32_t i2cPeriod = 0; + uint32_t pclk1Period = 0; + RCC_ClocksTypeDef rcc_clocks; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_MODE(I2C_InitStruct->I2C_Mode)); + assert_param(IS_I2C_CLOCK_SPEED(I2C_InitStruct->I2C_ClockSpeed)); + /*---------------------------- I2Cx IC_ENABLE Configuration ------------------------*/ + /* Disable the selected I2C peripheral */ + I2Cx->IC_ENABLE &= IC_ENABLE_Reset; + + /* Get pclk1 frequency value */ + RCC_GetClocksFreq(&rcc_clocks); + pclk1 = rcc_clocks.PCLK1_Frequency; + + /* Set pclk1 period value */ + pclk1Period = 1000000000/pclk1; + + i2cPeriod = 1000000000/I2C_InitStruct->I2C_ClockSpeed; //ns unit + tmpreg = 0; + /* Configure speed in standard mode */ + if (I2C_InitStruct->I2C_ClockSpeed <= 100000) + { + tmpreg = (i2cPeriod/pclk1Period)/2; + I2Cx->IC_SS_SCL_LCNT = tmpreg; + tmpreg = (i2cPeriod - pclk1Period*I2Cx->IC_SS_SCL_LCNT)/pclk1Period; + /* Write to I2Cx IC_SS_SCL_HCNT */ + I2Cx->IC_SS_SCL_HCNT = tmpreg; + + + } + else /*(I2C_InitStruct->I2C_ClockSpeed <= 400000)*/ + { + tmpreg = (i2cPeriod/pclk1Period)/2; + I2Cx->IC_FS_SCL_LCNT = tmpreg; + tmpreg = (i2cPeriod - pclk1Period*I2Cx->IC_FS_SCL_LCNT)/pclk1Period; + /* Write to I2Cx IC_FS_SCL_HCNT */ + I2Cx->IC_FS_SCL_HCNT = tmpreg; + } + + /*Get the I2Cx IC_CON value */ + tmpreg = I2Cx->IC_CON; + /*Clear TX_EMPTY_CTRL,IC_SLAVE_DISABLE,IC_RESTART_EN,IC_10BITADDR_SLAVE,SPEED,MASTER_MODE bits*/ + tmpreg &= IC_CON_RESET; + /*Set TX_EMPTY_CTRL,IC_SLAVE_DISABLE,IC_RESTART_EN,IC_10BITADDR_SLAVE,SPEED,MASTER_MODE bits*/ + tmpreg = TX_EMPTY_CTRL | IC_SLAVE_DISABLE | IC_RESTART_EN |IC_7BITADDR_MASTER | I2C_InitStruct->I2C_Speed | I2C_InitStruct->I2C_Mode; + /* Write to I2Cx IC_CON */ + I2Cx->IC_CON = tmpreg; + + /*---------------------------- I2Cx IC_INTR_MASK Configuration ------------------------*/ + /* Get the I2Cx IC_INTR_MASK value */ + tmpreg = I2Cx->IC_INTR_MASK; + /* clear the I2Cx IC_INTR_MASK value */ + tmpreg &= INTR_MASK; + /* Write to IC_INTR_MASK */ + I2Cx->IC_INTR_MASK = tmpreg; + + /* Write to IC_RX_TL */ + I2Cx->IC_RX_TL = 0x0; //rxfifo depth is 1 + /* Write to IC_TX_TL */ + I2Cx->IC_TX_TL = 0x1; //tcfifo depth is 1 + +} + +/** +* @brief Fills each I2C_InitStruct member with its default value. +* @param I2C_InitStruct: pointer to an I2C_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct) +{ + /*---------------- Reset I2C init structure parameters values ----------------*/ + /* Initialize the I2C_Mode member */ + I2C_InitStruct->I2C_Mode = I2C_Mode_MASTER; + /* Initialize the I2C_OwnAddress member */ + I2C_InitStruct->I2C_OwnAddress = 0xA8; + /* Initialize the I2C_Speed member */ + I2C_InitStruct->I2C_Speed = I2C_Speed_STANDARD; + /* initialize the I2C_ClockSpeed member */ + I2C_InitStruct->I2C_ClockSpeed = 100000; +} + +/** +* @brief Enables or disables the specified I2C peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param NewState: new state of the I2Cx peripheral. This parameter +* can be: ENABLE or DISABLE. +* @retval : None +*/ +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C peripheral */ + I2Cx->IC_ENABLE |= IC_ENABLE_Set; + } + else + { + /* Disable the selected I2C peripheral */ + I2Cx->IC_ENABLE &= IC_ENABLE_Reset; + } +} + +/** +* @brief Enables or disables the specified I2C DMA requests. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param DMA_Direcction : TDMAE_SET,RDMAE_SET +* This parameter can be any combination of the following values: +* @arg TDMAE_SET :DMA TX set +* @arg RDMAE_SET :DMA RX set +* @param NewState: new state of the I2C DMA transfer. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected I2C DMA requests */ + if(I2C_DMA_DIR==TDMAE_SET) + { + /* Enable the selected I2C TX DMA requests */ + I2Cx->IC_DMA_CR |= TDMAE_SET; + } + else if(I2C_DMA_DIR==RDMAE_SET) + { + /* Enable the selected I2C TX DMA requests */ + I2Cx->IC_DMA_CR |= RDMAE_SET; + } + } + else + { + /* Disable the selected I2C DMA requests */ + I2Cx->IC_DMA_CR &= DMA_CR_TDMAE_RDMAE_Reset; + } +} + + +/** +* @brief Generates I2Cx communication START condition. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param NewState: new state of the I2C START condition generation. +* This parameter can be: ENABLE or DISABLE. +* @retval : None. +*/ +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Generate a START condition */ + I2Cx->IC_CON |= IC_CON_START_Set; + } + else + { + /* Disable the START condition generation */ + I2Cx->IC_CON &= IC_CON_START_Reset; + } +} + +/** +* @brief Generates I2Cx communication STOP condition. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param NewState: new state of the I2C STOP condition generation. +* This parameter can be: ENABLE or DISABLE. +* @retval : None. +*/ +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + u8 tempReg=0; + tempReg=tempReg; + I2Cx->IC_ENABLE |= 0x02; + while(I2Cx->IC_ENABLE&0x02); + tempReg = I2Cx->IC_CLR_TX_ABRT; +} + +/** +* @brief Configures the specified I2C own address2. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param Address: specifies the 7bit I2C own address2. +* @retval : None. +*/ +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address) +//void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint16_t Address) +{ + uint16_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Get the old register value */ + tmpreg = I2Cx->IC_TAR; + /* Reset I2Cx Own address2 bit [7:0] */ + tmpreg &= IC_TAR_Reset; + /* Set I2Cx Own address2 */ + tmpreg |= Address>>1; + /* Store the new register value */ + I2Cx->IC_TAR = tmpreg; +} + +/** +* @brief Enables or disables the specified I2C dual addressing mode. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param NewState: new state of the I2C dual addressing mode. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable dual addressing mode */ + I2Cx->IC_TAR |= IC_TAR_ENDUAL_Set; + } + else + { + /* Disable dual addressing mode */ + I2Cx->IC_TAR &= IC_TAR_ENDUAL_Reset; + } +} + +/** +* @brief Enables or disables the specified I2C general call feature. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param NewState: new state of the I2C General call. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable generall call */ + I2Cx->IC_TAR |= IC_TAR_GC_Set; + } + else + { + /* Disable generall call */ + I2Cx->IC_TAR &= IC_TAR_GC_Reset; + } +} + +/** +* @brief Enables or disables the specified I2C interrupts. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_IT: specifies the I2C interrupts sources to be enabled +* or disabled. +* This parameter can be any combination of the following values: +* @arg I2C_IT_RX_UNDER: Rx Buffer is empty interrupt mask +* @arg I2C_IT_RX_OVER : RX Buffer Overrun interrupt mask +* @arg I2C_IT_RX_FULL : Rx buffer full interrupt mask +* @arg I2C_IT_TX_OVER : TX Buffer Overrun interrupt mask +* @arg I2C_IT_TX_EMPTY : TX_FIFO empty interrupt mask +* @arg I2C_IT_RD_REQ : I2C work as slave or master interrupt mask +* @arg I2C_IT_TX_ABRT : TX error interrupt mask(Master mode) +* @arg I2C_IT_RX_DONE : Master not ack interrupt mask(slave mode) +* @arg I2C_IT_ACTIVITY : I2C activity interrupt mask +* @arg I2C_IT_STOP_DET : stop condition interrupt mask +* @arg I2C_IT_START_DET : start condition interrupt mask +* @arg I2C_IT_GEN_CALL : a general call address and ack interrupt mask +* @param NewState: new state of the specified I2C interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_I2C_CONFIG_IT(I2C_IT)); + + if(I2C_IT == I2C_IT_RX_FULL) + { + I2Cx->IC_DATA_CMD = CMD_READ; + } + + if (NewState != DISABLE) + { + /* Enable the selected I2C interrupts */ + I2Cx->IC_INTR_MASK |= I2C_IT; + } + else + { + /* Disable the selected I2C interrupts */ + I2Cx->IC_INTR_MASK &= (uint16_t)~I2C_IT; + } +} + +/** +* @brief Sends a data byte through the I2Cx peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param Data: Byte to be transmitted.. +* @retval : None +*/ +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Write in the IC_DATA_CMD register the data to be sent */ + I2Cx->IC_DATA_CMD = CMD_WRITE | Data; +} + +/** +* @brief Sends last data byte through the I2Cx peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param Data: Byte to be transmitted.. +* @retval : None +*/ +void I2C_SendLastDataOrStop(I2C_TypeDef* I2Cx, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Write in the IC_DATA_CMD register the data to be sent */ + I2Cx->IC_DATA_CMD = 0x200 | Data; +} + +/** +* @brief Read last data byte through the I2Cx peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param Data: Byte to be Recieved.. +* @retval : None +*/ +uint8_t I2C_ReadLastDataOrStop(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Write in the IC_DATA_CMD register the data to be sent */ + I2Cx->IC_DATA_CMD = 0x300 ; + return 0; +} +/** +* @brief Returns the most recent received data by the I2Cx peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @retval : The value of the received data. + +*/ +void I2C_ReadCmd(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + + I2Cx->IC_DATA_CMD = CMD_READ; +} + +/** +* @brief Returns the most recent received data by the I2Cx peripheral. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @retval : The value of the received data. +*/ +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + I2C_CMD_DIR= 0; + /* Return the data in the IC_DATA_CMD register */ + return (uint8_t)I2Cx->IC_DATA_CMD; +} + +/** +* @brief Transmits the address byte to select the slave device. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param Address: specifies the slave address which will be transmitted +* @param I2C_Direction: specifies whether the I2C device will be a +* Transmitter or a Receiver. +* This parameter can be one of the following values +* @arg I2C_Direction_Transmitter: Transmitter mode +* @arg I2C_Direction_Receiver: Receiver mode +* @retval : None. +*/ +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction) +{ + /* Store the new register value */ + I2Cx->IC_TAR = Address>>1; +} + +/** +* @brief Reads the specified I2C register and returns its value. +* @param I2C_Register: specifies the register to read. +* This parameter can be one of the following values: +* @retval : The value of the read register. +*/ +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_REGISTER(I2C_Register)); + /* Return the selected register value */ + return (*(__IO uint16_t *)(*((__IO uint32_t *)&I2Cx) + I2C_Register)); +} + +/** +* @brief Returns the last I2Cx Event. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @retval : The last event +*/ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + /* Read the I2Cx status register */ + flag1 = I2Cx->IC_RAW_INTR_STAT; + + /* Get the last event value from I2C status register */ + lastevent = (flag1 ) & FLAG_Mask; + /* Return status */ + return lastevent; +} + + + +/** +* @brief Checks whether the last I2Cx Event is equal to the one passed +* as parameter. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_EVENT: specifies the event to be checked. +* This parameter can be one of the following values: +* @arg I2C_EVENT_RX_UNDER: Rx Buffer is empty event +* @arg I2C_EVENT_RX_OVER : RX Buffer Overrun event +* @arg I2C_EVENTT_RX_FULL : Rx buffer full event +* @arg I2C_EVENT_TX_OVER : TX Buffer Overrun event +* @arg I2C_EVENT_TX_EMPTY : TX_FIFO empty event +* @arg I2C_EVENT_RD_REQ : I2C work as slave or master event +* @arg I2C_EVENT_TX_ABRT : TX error event(Master mode) +* @arg I2C_EVENT_RX_DONE : Master not ack event(slave mode) +* @arg I2C_EVENT_ACTIVITY : I2C activity event +* @arg I2C_EVENT_STOP_DET : stop condition event +* @arg I2C_EVENT_START_DET : start condition event +* @arg I2C_EVENT_GEN_CALL : a general call address and ack event +* - SUCCESS: Last event is equal to the I2C_EVENT +* - ERROR: Last event is different from the I2C_EVENT +*/ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0; + ErrorStatus status = ERROR; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_EVENT(I2C_EVENT)); + + if((I2C_EVENT == I2C_EVENT_RX_FULL)&&(I2C_CMD_DIR==0)) + { + I2Cx->IC_DATA_CMD = CMD_READ; + I2C_CMD_DIR = 1; + } + /* Read the I2Cx status register */ + flag1 = I2Cx->IC_RAW_INTR_STAT; + //flag1 = I2Cx->IC_INTR_STAT; + /* Get the last event value from I2C status register */ + lastevent = (flag1 ) & I2C_EVENT; + + /* Check whether the last event is equal to I2C_EVENT */ + if (lastevent == I2C_EVENT ) + //if((I2Cx->IC_RAW_INTR_STAT & I2C_EVENT) != (uint32_t)RESET) + { + /* SUCCESS: last event is equal to I2C_EVENT */ + status = SUCCESS; + } + else + { + /* ERROR: last event is different from I2C_EVENT */ + status = ERROR; + } + /* Return status */ + return status; + +} + +/** +* @brief Checks whether the specified I2C flag is set or not. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg I2C_FLAG_RX_UNDER: Rx Buffer is empty flag +* @arg I2C_FLAG_RX_OVER : RX Buffer Overrun flag +* @arg I2C_FLAG_RX_FULL : Rx buffer full flag +* @arg I2C_FLAG_TX_OVER : TX Buffer Overrun flag +* @arg I2C_FLAG_TX_EMPTY: TX_FIFO empty flag +* @arg I2C_FLAG_RD_REQ : I2C work as slave or master flag +* @arg I2C_FLAG_TX_ABRT : TX error flag(Master mode) +* @arg I2C_FLAG_RX_DONE : Master not ack flag(slave mode) +* @arg I2C_FLAG_ACTIVITY: I2C activity flag +* @arg I2C_FLAG_STOP_DET: stop condition flag +* @arg I2C_FLAG_START_DET: start condition flag +* @arg I2C_FLAG_GEN_CALL : a general call address and ack flag +* @arg I2C_STATUS_FLAG_ACTIVITY +* @arg I2C_STATUS_FLAG_TFNF +* @arg I2C_STATUS_FLAG_TFE +* @arg I2C_STATUS_FLAG_RFNE +* @arg I2C_STATUS_FLAG_RFF +* @arg I2C_STATUS_FLAG_M_ACTIVITY +* @arg I2C_STATUS_FLAG_S_ACTIVITY +* @retval : The new state of I2C_FLAG (SET or RESET). +*/ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + FlagStatus bitstatus = RESET; + __IO uint32_t i2creg = 0, i2cxbase = 0; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_FLAG(I2C_FLAG)); + + if(I2C_FLAG & 0x8000) + { + if((I2Cx->IC_STATUS & I2C_FLAG) != (uint32_t)RESET) + { + /* I2C_FLAG is set */ + bitstatus = SET; + } + else + { + /* I2C_FLAG is reset */ + bitstatus = RESET; + } + } + else + { + if((I2C_FLAG == I2C_FLAG_RX_FULL)&&(I2C_CMD_DIR==0)) + { + I2Cx->IC_DATA_CMD = CMD_READ; + I2C_CMD_DIR = 1; + } + /* Check the status of the specified I2C flag */ + if((I2Cx->IC_RAW_INTR_STAT & I2C_FLAG) != (uint32_t)RESET) + { + /* I2C_FLAG is set */ + bitstatus = SET; + } + else + { + /* I2C_FLAG is reset */ + bitstatus = RESET; + } + } + /* Return the I2C_FLAG status */ + return bitstatus; +} + +/** +* @brief Clears the I2Cx's pending flags. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_FLAG: specifies the flag to clear. +* This parameter can be any combination of the following values: +* @arg I2C_FLAG_RX_UNDER: Rx Buffer is empty flag +* @arg I2C_FLAG_RX_OVER : RX Buffer Overrun flag +* @arg I2C_FLAG_RX_FULL : Rx buffer full flag +* @arg I2C_FLAG_TX_OVER : TX Buffer Overrun flag +* @arg I2C_FLAG_TX_EMPTY: TX_FIFO empty flag +* @arg I2C_FLAG_RD_REQ : I2C work as slave or master flag +* @arg I2C_FLAG_TX_ABRT : TX error flag(Master mode) +* @arg I2C_FLAG_RX_DONE : Master not ack flag(slave mode) +* @arg I2C_FLAG_ACTIVITY: I2C activity flag +* @arg I2C_FLAG_STOP_DET: stop condition flag +* @arg I2C_FLAG_START_DET: start condition flag +* @arg I2C_FLAG_GEN_CALL : a general call address and ack flag +* @retval : None +*/ +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_FLAG(I2C_FLAG)); + + if((I2C_FLAG & I2C_FLAG_RX_UNDER) == I2C_FLAG_RX_UNDER) {I2Cx->IC_CLR_RX_UNDER;} + if((I2C_FLAG & I2C_FLAG_RX_OVER) == I2C_FLAG_RX_OVER) {I2Cx->IC_CLR_RX_OVER;} + if((I2C_FLAG & I2C_FLAG_TX_OVER) == I2C_FLAG_TX_OVER) {I2Cx->IC_CLR_TX_OVER;} + if((I2C_FLAG & I2C_FLAG_RD_REQ) == I2C_FLAG_RD_REQ) {I2Cx->IC_CLR_RD_REQ;} + if((I2C_FLAG & I2C_FLAG_TX_ABRT) == I2C_FLAG_TX_ABRT) {I2Cx->IC_CLR_TX_ABRT;} + if((I2C_FLAG & I2C_FLAG_RX_DONE) == I2C_FLAG_RX_DONE) {I2Cx->IC_CLR_RX_DONE;} + if((I2C_FLAG & I2C_FLAG_ACTIVITY) == I2C_FLAG_ACTIVITY) {I2Cx->IC_CLR_ACTIVITY;} + if((I2C_FLAG & I2C_FLAG_STOP_DET) == I2C_FLAG_STOP_DET) {I2Cx->IC_CLR_STOP_DET;} + if((I2C_FLAG & I2C_FLAG_START_DET) == I2C_FLAG_START_DET){I2Cx->IC_CLR_START_DET;} + if((I2C_FLAG & I2C_FLAG_GEN_CALL) == I2C_FLAG_GEN_CALL) {I2Cx->IC_CLR_GEN_CALL;} +} + +/** +* @brief Checks whether the specified I2C interrupt has occurred or not. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_IT: specifies the interrupt source to check. +* This parameter can be one of the following values: +* @arg I2C_IT_RX_UNDER: Rx Buffer is empty interrupt +* @arg I2C_IT_RX_OVER : RX Buffer Overrun interrupt +* @arg I2C_IT_RX_FULL : Rx buffer full interrupt +* @arg I2C_IT_TX_OVER : TX Buffer Overrun interrupt +* @arg I2C_IT_TX_EMPTY : TX_FIFO empty interrupt +* @arg I2C_IT_RD_REQ : I2C work as slave or master interrupt +* @arg I2C_IT_TX_ABRT : TX error interrupt (Master mode) +* @arg I2C_IT_RX_DONE : Master not ack interrupt (slave mode) +* @arg I2C_IT_ACTIVITY : I2C activity interrupt +* @arg I2C_IT_STOP_DET : stop condition interrupt +* @arg I2C_IT_START_DET : start condition interrupt +* @arg I2C_IT_GEN_CALL : a general call address and ack interrupt +* @retval : The new state of I2C_IT (SET or RESET). +*/ +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_GET_IT(I2C_IT)); + + /* Check the status of the specified I2C flag */ + if((I2Cx->IC_RAW_INTR_STAT & I2C_IT) != (uint32_t)RESET) + { + /* I2C_IT is set */ + bitstatus = SET; + } + else + { + /* I2C_IT is reset */ + bitstatus = RESET; + } + + /* Return the I2C_IT status */ + return bitstatus; +} + +/** +* @brief Clears the I2Cx interrupt pending bits. +* @param I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* @param I2C_IT: specifies the interrupt pending bit to clear. +* This parameter can be any combination of the following values: +* @arg I2C_IT_RX_UNDER: Rx Buffer is empty interrupt +* @arg I2C_IT_RX_OVER : RX Buffer Overrun interrupt +* @arg I2C_IT_RX_FULL : Rx buffer full interrupt +* @arg I2C_IT_TX_OVER : TX Buffer Overrun interrupt +* @arg I2C_IT_TX_EMPTY : TX_FIFO empty interrupt +* @arg I2C_IT_RD_REQ : I2C work as slave or master interrupt +* @arg I2C_IT_TX_ABRT : TX error interrupt (Master mode) +* @arg I2C_IT_RX_DONE : Master not ack interrupt (slave mode) +* @arg I2C_IT_ACTIVITY : I2C activity interrupt +* @arg I2C_IT_STOP_DET : stop condition interrupt +* @arg I2C_IT_START_DET : start condition interrupt +* @arg I2C_IT_GEN_CALL : a general call address and ack interrupt +* @retval : None +*/ +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + /* Check the parameters */ + assert_param(IS_I2C_ALL_PERIPH(I2Cx)); + assert_param(IS_I2C_CLEAR_IT(I2C_IT)); + + /* Clear the selected I2C flag */ + + if((I2C_IT & I2C_IT_RX_UNDER) == I2C_FLAG_RX_UNDER) {I2Cx->IC_CLR_RX_UNDER;} + if((I2C_IT & I2C_IT_RX_OVER) == I2C_FLAG_RX_OVER) {I2Cx->IC_CLR_RX_OVER;} + if((I2C_IT & I2C_IT_TX_OVER) == I2C_FLAG_TX_OVER) {I2Cx->IC_CLR_TX_OVER;} + if((I2C_IT & I2C_IT_RD_REQ) == I2C_FLAG_RD_REQ) {I2Cx->IC_CLR_RD_REQ;} + if((I2C_IT & I2C_IT_TX_ABRT) == I2C_FLAG_TX_ABRT) {I2Cx->IC_CLR_TX_ABRT;} + if((I2C_IT & I2C_IT_RX_DONE) == I2C_FLAG_RX_DONE) {I2Cx->IC_CLR_RX_DONE;} + if((I2C_IT & I2C_IT_ACTIVITY) == I2C_FLAG_ACTIVITY) {I2Cx->IC_CLR_ACTIVITY;} + if((I2C_IT & I2C_IT_STOP_DET) == I2C_FLAG_STOP_DET) {I2Cx->IC_CLR_STOP_DET;} + if((I2C_IT & I2C_IT_START_DET) == I2C_FLAG_START_DET){I2Cx->IC_CLR_START_DET;} + if((I2C_IT & I2C_IT_GEN_CALL) == I2C_FLAG_GEN_CALL) {I2Cx->IC_CLR_GEN_CALL;} + +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_iwdg.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_iwdg.c new file mode 100644 index 0000000000..dcfb34710b --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_iwdg.c @@ -0,0 +1,194 @@ +/** +****************************************************************************** +* @file HAL_iwdg.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the IWDG firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_iwdg.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup IWDG +* @brief IWDG driver modules +* @{ +*/ + +/** @defgroup IWDG_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Private_Defines +* @{ +*/ + +/* ---------------------- IWDG registers bit mask ----------------------------*/ + +/* KR register bit mask */ +#define KR_KEY_Reload ((uint16_t)0xAAAA) +#define KR_KEY_Enable ((uint16_t)0xCCCC) + +/** +* @} +*/ + +/** @defgroup IWDG_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup IWDG_Private_Functions +* @{ +*/ + +/** +* @brief Enables or disables write access to IWDG_PR and IWDG_RLR +* registers. +* @param IWDG_WriteAccess: new state of write access to IWDG_PR and +* IWDG_RLR registers. +* This parameter can be one of the following values: +* @arg IWDG_WriteAccess_Enable: Enable write access to +* IWDG_PR and IWDG_RLR registers +* @arg IWDG_WriteAccess_Disable: Disable write access to +* IWDG_PR and IWDG_RLR registers +* @retval : None +*/ +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) +{ + /* Check the parameters */ + assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); + IWDG->KR = IWDG_WriteAccess; +} + +/** +* @brief Sets IWDG Prescaler value. +* @param IWDG_Prescaler: specifies the IWDG Prescaler value. +* This parameter can be one of the following values: +* @arg IWDG_Prescaler_4: IWDG prescaler set to 4 +* @arg IWDG_Prescaler_8: IWDG prescaler set to 8 +* @arg IWDG_Prescaler_16: IWDG prescaler set to 16 +* @arg IWDG_Prescaler_32: IWDG prescaler set to 32 +* @arg IWDG_Prescaler_64: IWDG prescaler set to 64 +* @arg IWDG_Prescaler_128: IWDG prescaler set to 128 +* @arg IWDG_Prescaler_256: IWDG prescaler set to 256 +* @retval : None +*/ +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) +{ + /* Check the parameters */ + assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler)); + IWDG->PR = IWDG_Prescaler; +} + +/** +* @brief Sets IWDG Reload value. +* @param Reload: specifies the IWDG Reload value. +* This parameter must be a number between 0 and 0x0FFF. +* @retval : None +*/ +void IWDG_SetReload(uint16_t Reload) +{ + /* Check the parameters */ + assert_param(IS_IWDG_RELOAD(Reload)); + IWDG->RLR = Reload; +} + +/** +* @brief Reloads IWDG counter with value defined in the reload register +* (write access to IWDG_PR and IWDG_RLR registers disabled). +* @param None +* @retval : None +*/ +void IWDG_ReloadCounter(void) +{ + IWDG->KR = KR_KEY_Reload; +} + +/** +* @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers +* disabled). +* @param None +* @retval : None +*/ +void IWDG_Enable(void) +{ + IWDG->KR = KR_KEY_Enable; +} + +/** +* @brief Checks whether the specified IWDG flag is set or not. +* @param IWDG_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg IWDG_FLAG_PVU: Prescaler Value Update on going +* @arg IWDG_FLAG_RVU: Reload Value Update on going +* @retval : The new state of IWDG_FLAG (SET or RESET). +*/ +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_IWDG_FLAG(IWDG_FLAG)); + if ((IWDG->SR & IWDG_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_misc.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_misc.c new file mode 100644 index 0000000000..1c0b2636ae --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_misc.c @@ -0,0 +1,163 @@ +/** +****************************************************************************** +* @file HAL_misc.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the miscellaneous firmware functions (add-on +* to CMSIS functions). +****************************************************************************** +* @attention +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_misc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup MISC +* @brief MISC driver modules +* @{ +*/ + +/** @defgroup MISC_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup MISC_Private_Defines +* @{ +*/ + +#define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) +/** +* @} +*/ + + +/** +* @brief Initializes the NVIC peripheral according to the specified +* parameters in the NVIC_InitStruct. +* @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains +* the configuration information for the specified NVIC peripheral. +* @retval None +*/ +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) +{ + uint32_t tmppriority = 0x00; + + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd)); + assert_param(IS_NVIC_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPriority)); + + if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) + { + /* Compute the Corresponding IRQ Priority --------------------------------*/ + tmppriority = NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel >> 0x02]; + tmppriority &= (uint32_t)(~(((uint32_t)0xFF) << ((NVIC_InitStruct->NVIC_IRQChannel & 0x03) * 8))); + tmppriority |= (uint32_t)((((uint32_t)NVIC_InitStruct->NVIC_IRQChannelPriority << 6) & 0xFF) << ((NVIC_InitStruct->NVIC_IRQChannel & 0x03) * 8)); + + NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel >> 0x02] = tmppriority; + + /* Enable the Selected IRQ Channels --------------------------------------*/ + NVIC->ISER[0] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } + else + { + /* Disable the Selected IRQ Channels -------------------------------------*/ + NVIC->ICER[0] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); + } +} + +/** +* @brief Sets the vector table location and Offset. +* @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory. +* This parameter can be one of the following values: +* @arg NVIC_VectTab_RAM +* @arg NVIC_VectTab_FLASH +* @param Offset: Vector Table base offset field. This value must be a multiple +* of 0x200. +* @retval None +*/ +void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) +{ +// SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); +} + +/** +* @brief Selects the condition for the system to enter low power mode. +* @param LowPowerMode: Specifies the new mode for the system to enter low power mode. +* This parameter can be one of the following values: +* @arg NVIC_LP_SEVONPEND +* @arg NVIC_LP_SLEEPDEEP +* @arg NVIC_LP_SLEEPONEXIT +* @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_NVIC_LP(LowPowerMode)); + + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + SCB->SCR |= LowPowerMode; + } + else + { + SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); + } +} + +/** +* @brief Configures the SysTick clock source. +* @param SysTick_CLKSource: specifies the SysTick clock source. +* This parameter can be one of the following values: +* @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. +* @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. +* @retval None +*/ +void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) +{ + /* Check the parameters */ +assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); + + if (SysTick_CLKSource == SysTick_CLKSource_HCLK) + { + SysTick->CTRL |= SysTick_CLKSource_HCLK; + } + else + { + SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; + } +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_pwr.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_pwr.c new file mode 100644 index 0000000000..1b76e057bc --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_pwr.c @@ -0,0 +1,344 @@ +/** +****************************************************************************** +* @file HAL_pwr.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the PWR firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_pwr.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup PWR +* @brief PWR driver modules +* @{ +*/ + +/** @defgroup PWR_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Private_Defines +* @{ +*/ + +/* --------- PWR registers bit address in the alias region ---------- */ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) + +/* --- CR Register ---*/ + +/* Alias word address of DBP bit */ +#define CR_OFFSET (PWR_OFFSET + 0x00) +#define DBP_BitNumber 0x08 +#define CR_DBP_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4)) + +/* Alias word address of PVDE bit */ +#define PVDE_BitNumber 0x04 +#define CR_PVDE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of EWUP bit */ +#define CSR_OFFSET (PWR_OFFSET + 0x04) +#define EWUP_BitNumber 0x08 +#define CSR_EWUP_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4)) + +/* ------------------ PWR registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_PDDS_Set ((uint32_t)0x00000002) +#define CR_DS_Mask ((uint32_t)0xFFFFFFFC) +#define CR_CWUF_Set ((uint32_t)0x00000004) +#define CR_PLS_Mask ((uint32_t)0xFFFFE1FF) + +/* --------- Cortex System Control register bit mask ---------------- */ + +/* Cortex System Control register address */ +#define SCB_SysCtrl ((uint32_t)0xE000ED10) + +/* SLEEPDEEP bit mask */ +#define SysCtrl_SLEEPDEEP_Set ((uint32_t)0x00000004) +/** +* @} +*/ + +/** @defgroup PWR_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup PWR_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the PWR peripheral registers to their default +* reset values. +* @param None +* @retval : None +*/ +void PWR_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE); +} + + +/** +* @brief Enables or disables access to the RTC and backup registers. +* @param NewState: new state of the access to the RTC and backup +* registers. This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void PWR_BackupAccessCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + //*(__IO uint32_t *) CR_DBP_BB = (uint32_t)NewState; + if(NewState!=DISABLE) + { + PWR->CR |= 0x00000100; + } + else + { + PWR->CR &= 0xfffffeff; + } + +} + +/** +* @brief Enables or disables the Power Voltage Detector(PVD). +* @param NewState: new state of the PVD. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void PWR_PVDCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState==ENABLE) + { + PWR->CR |= 0x00000010; + } + else + { + PWR->CR &= 0xffffffef; + } +} + +/** +* @brief Configures the voltage threshold detected by the Power Voltage +* Detector(PVD). +* @param PWR_PVDLevel: specifies the PVD detection level +* This parameter can be one of the following values: +* @arg PWR_PVDLevel_1V8: PVD detection level set to 1.8V +* @arg PWR_PVDLevel_2V1: PVD detection level set to 2.1V +* @arg PWR_PVDLevel_2V4: PVD detection level set to 2.4V +* @arg PWR_PVDLevel_2V7: PVD detection level set to 2.7V +* @arg PWR_PVDLevel_3V0: PVD detection level set to 3.0V +* @arg PWR_PVDLevel_3V3: PVD detection level set to 3.3V +* @arg PWR_PVDLevel_3V6: PVD detection level set to 3.6V +* @arg PWR_PVDLevel_3V9: PVD detection level set to 3.9V +* @arg PWR_PVDLevel_4V2: PVD detection level set to 4.2V +* @arg PWR_PVDLevel_4V5: PVD detection level set to 4.5V +* @arg PWR_PVDLevel_4V8: PVD detection level set to 4.8V +* @retval : None +*/ +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(PWR_PVDLevel)); + tmpreg = PWR->CR; + /* Clear PLS[12:9] bits */ + tmpreg &= CR_PLS_Mask; + /* Set PLS[12:9] bits according to PWR_PVDLevel value */ + tmpreg |= PWR_PVDLevel; + /* Store the new value */ + PWR->CR = tmpreg; +} + +/** +* @brief Enables or disables the WakeUp Pin functionality. +* @param NewState: new state of the WakeUp Pin functionality. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void PWR_WakeUpPinCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState!=DISABLE) + { + PWR->CSR |= 0x00000100; + } + else + { + PWR->CSR &= 0xfffffeff; + } +} + +/** +* @brief Enters STOP mode. +* @param PWR_Regulator: specifies the regulator state in STOP mode. +* This parameter can be one of the following values: +* @arg PWR_Regulator_ON: STOP mode with regulator ON +* @arg PWR_Regulator_LowPower: STOP mode with +* regulator in low power mode +* @param PWR_STOPEntry: specifies if STOP mode in entered with WFI or +* WFE instruction. +* This parameter can be one of the following values: +* @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction +* @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction +* @retval : None +*/ +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(PWR_Regulator)); + assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry)); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg = PWR->CR; + /* Clear PDDS and LPDS bits */ + tmpreg &= CR_DS_Mask; + /* Set LPDS bit according to PWR_Regulator value */ + tmpreg |= PWR_Regulator; + /* Store the new value */ + PWR->CR = tmpreg; + /* Set SLEEPDEEP bit of Cortex System Control Register */ + + SCB->SCR |= SysCtrl_SLEEPDEEP_Set; + /* Select STOP mode entry --------------------------------------------------*/ + if(PWR_STOPEntry == PWR_STOPEntry_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __WFE(); + } +} + +/** +* @brief Enters STANDBY mode. +* @param None +* @retval : None +*/ +void PWR_EnterSTANDBYMode(void) +{ + /* Clear Wake-up flag */ + PWR->CR |= CR_CWUF_Set; + /* Select STANDBY mode */ + PWR->CR |= CR_PDDS_Set; + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SysCtrl_SLEEPDEEP_Set; + /* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM ) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** +* @brief Checks whether the specified PWR flag is set or not. +* @param PWR_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg PWR_FLAG_WU: Wake Up flag +* @arg PWR_FLAG_SB: StandBy flag +* @arg PWR_FLAG_PVDO: PVD Output +* @retval : The new state of PWR_FLAG (SET or RESET). +*/ +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_PWR_GET_FLAG(PWR_FLAG)); + + if ((PWR->CSR & PWR_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** +* @brief Clears the PWR's pending flags. +* @param PWR_FLAG: specifies the flag to clear. +* This parameter can be one of the following values: +* @arg PWR_FLAG_WU: Wake Up flag +* @arg PWR_FLAG_SB: StandBy flag +* @retval : None +*/ +void PWR_ClearFlag(uint32_t PWR_FLAG) +{ + /* Check the parameters */ + assert_param(IS_PWR_CLEAR_FLAG(PWR_FLAG)); + + PWR->CR |= PWR_FLAG << 2; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_rcc.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_rcc.c new file mode 100644 index 0000000000..9e3efaeee4 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_rcc.c @@ -0,0 +1,1051 @@ +/** +****************************************************************************** +* @file HAL_rcc.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the RCC firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ +//SJH&TM change +/* Includes ------------------------------------------------------------------*/ +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup RCC +* @brief RCC driver modules +* @{ +*/ + +/** @defgroup RCC_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup RCC_Private_Defines +* @{ +*/ + +/* ------------ RCC registers bit address in the alias region ----------- */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) + +/* --- CR Register ---*/ + +/* Alias word address of HSION bit */ +#define CR_OFFSET (RCC_OFFSET + 0x00) +#define HSION_BitNumber 0x00 +#define CR_HSION_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (HSION_BitNumber * 4)) + +/* Alias word address of PLLON bit */ +#define PLLON_BitNumber 0x18 +#define CR_PLLON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PLLON_BitNumber * 4)) + +/* Alias word address of CSSON bit */ +#define CSSON_BitNumber 0x13 +#define CR_CSSON_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (CSSON_BitNumber * 4)) + +/* --- CFGR Register ---*/ + +/* Alias word address of USBPRE bit */ +#define CFGR_OFFSET (RCC_OFFSET + 0x04) +#define USBPRE_BitNumber 0x16 +#define CFGR_USBPRE_BB (PERIPH_BB_BASE + (CFGR_OFFSET * 32) + (USBPRE_BitNumber * 4)) + +/* --- BDCR Register ---*/ + +/* Alias word address of RTCEN bit */ +#define BDCR_OFFSET (RCC_OFFSET + 0x20) +#define RTCEN_BitNumber 0x0F +#define BDCR_RTCEN_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (RTCEN_BitNumber * 4)) + +/* Alias word address of BDRST bit */ +#define BDRST_BitNumber 0x10 +#define BDCR_BDRST_BB (PERIPH_BB_BASE + (BDCR_OFFSET * 32) + (BDRST_BitNumber * 4)) + +/* --- CSR Register ---*/ + +/* Alias word address of LSION bit */ +#define CSR_OFFSET (RCC_OFFSET + 0x24) +#define LSION_BitNumber 0x00 +#define CSR_LSION_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (LSION_BitNumber * 4)) + +/* ---------------------- RCC registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_HSION_Reset ((uint32_t)0xFFFFFFFE) +#define CR_HSION_Set ((uint32_t)0x00000001) +#define CR_HSEBYP_Reset ((uint32_t)0xFFFBFFFF) +#define CR_HSEBYP_Set ((uint32_t)0x00040000) +#define CR_HSEON_Reset ((uint32_t)0xFFFEFFFF) +#define CR_HSEON_Set ((uint32_t)0x00010000) +#define CR_HSITRIM_Mask ((uint32_t)0xFFFFC0FF) +#define CR_PLLON_Reset ((uint32_t)0xFEFFFFFF) +#define CR_PLLON_Set ((uint32_t)0x01000000) + +/* CFGR register bit mask */ +#define CFGR_PLL_Mask ((uint32_t)0xFFC0FFFF) +#define CFGR_PLLMull_Mask ((uint32_t)0x003C0000) +#define CFGR_PLLSRC_Mask ((uint32_t)0x00010000) +#define CFGR_PLLXTPRE_Mask ((uint32_t)0x00020000) +#define CFGR_SWS_Mask ((uint32_t)0x0000000C) +#define CFGR_SW_Mask ((uint32_t)0xFFFFFFFC) +#define CFGR_HPRE_Reset_Mask ((uint32_t)0xFFFFFF0F) +#define CFGR_HPRE_Set_Mask ((uint32_t)0x000000F0) +#define CFGR_PPRE1_Reset_Mask ((uint32_t)0xFFFFF8FF) +#define CFGR_PPRE1_Set_Mask ((uint32_t)0x00000700) +#define CFGR_PPRE2_Reset_Mask ((uint32_t)0xFFFFC7FF) +#define CFGR_PPRE2_Set_Mask ((uint32_t)0x00003800) +#define CFGR_ADCPRE_Reset_Mask ((uint32_t)0xFFFF3FFF) +#define CFGR_ADCPRE_Set_Mask ((uint32_t)0x0000C000) + +/* CSR register bit mask */ +#define CSR_LSION_Set ((uint32_t)0x00000001) +#define CSR_LSION_Reset ((uint32_t)0xFFFFFFFE) +#define CSR_RMVF_Set ((uint32_t)0x01000000) + +/* RCC Flag Mask */ +#define FLAG_Mask ((uint8_t)0x1F) + +/* Typical Value of the HSI in Hz */ +#define HSI_Value ((uint32_t)8000000) + +/* CIR register byte 2 (Bits[15:8]) base address */ +#define CIR_BYTE2_ADDRESS ((uint32_t)0x40021009) + +/* CIR register byte 3 (Bits[23:16]) base address */ +#define CIR_BYTE3_ADDRESS ((uint32_t)0x4002100A) + +/* CFGR register byte 4 (Bits[31:24]) base address */ +#define CFGR_BYTE4_ADDRESS ((uint32_t)0x40021007) + +/* BDCR register base address */ +#define BDCR_ADDRESS (PERIPH_BASE + BDCR_OFFSET) + +#ifndef HSEStartUp_TimeOut +/* Time out for HSE start up */ +#define HSEStartUp_TimeOut ((uint16_t)0x0500) +#endif + +/** +* @} +*/ + +/** @defgroup RCC_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup RCC_Private_Variables +* @{ +*/ + +static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** +* @} +*/ + +/** @defgroup RCC_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup RCC_Private_Functions +* @{ +*/ + +/** +* @brief Resets the RCC clock configuration to the default reset state. +* @param None +* @retval : None +*/ +void RCC_DeInit(void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x1; + + /* Reset SW, HPRE, PPRE1, PPRE2 and MCO bits */ + RCC->CFGR &= (uint32_t)0xF8FFC00C; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE bits */ + RCC->CFGR &= (uint32_t)0xFF3CFFFF; + RCC->CR &= (uint32_t)0x008FFFFF; + + /* Disable all interrupts */ + RCC->CIR &= 0xFF62E262; +} + +/** +* @brief Configures the External High Speed oscillator (HSE). +* HSE can not be stopped if it is used directly or through the +* PLL as system clock. +* @param RCC_HSE: specifies the new state of the HSE. +* This parameter can be one of the following values: +* @arg RCC_HSE_OFF: HSE oscillator OFF +* @arg RCC_HSE_ON: HSE oscillator ON +* @arg RCC_HSE_Bypass: HSE oscillator bypassed with external +* clock +* @retval : None +*/ +void RCC_HSEConfig(uint32_t RCC_HSE) +{ + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_HSE)); + /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/ + /* Reset HSEON bit */ + RCC->CR &= CR_HSEON_Reset; + /* Reset HSEBYP bit */ + RCC->CR &= CR_HSEBYP_Reset; + /* Configure HSE (RCC_HSE_OFF is already covered by the code section above) */ + switch(RCC_HSE) + { + case RCC_HSE_OFF: + /* Reset HSEBYP and HSEON bits */ + RCC->CR &= ~(CR_HSEBYP_Set | CR_HSEON_Set); + break; + + case RCC_HSE_ON: + /* Set HSEON bit */ + RCC->CR |= CR_HSEON_Set; + break; + + case RCC_HSE_Bypass: + /* Set HSEBYP and HSEON bits */ + RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set; + break; + + default: + break; + } +} + +/** +* @brief Waits for HSE start-up. +* @param None +* @retval : An ErrorStatus enumuration value: +* - SUCCESS: HSE oscillator is stable and ready to use +* - ERROR: HSE oscillator not yet ready +*/ +ErrorStatus RCC_WaitForHSEStartUp(void) +{ + __IO uint32_t StartUpCounter = 0; + ErrorStatus status = ERROR; + FlagStatus HSEStatus = RESET; + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY); + StartUpCounter++; + } while((HSEStatus == RESET) && (StartUpCounter != HSEStartUp_TimeOut)); + if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + return (status); +} + +/** +* @brief Adjusts the Internal High Speed oscillator (HSI) calibration +* value. +* @param HSICalibrationValue: specifies the calibration trimming value. +* This parameter must be a number between 0 and 0x1F. +* @retval : None +*/ +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue)); + tmpreg = RCC->CR; + /* Clear HSICAL[5:0] bits */ + tmpreg &= CR_HSITRIM_Mask; + /* Set the HSICAL[5:0] bits according to HSICalibrationValue value */ + tmpreg |= (uint32_t)((HSICalibrationValue&0x3f)<< 8); + /* Store the new value */ + RCC->CR = tmpreg; +} + +/** +* @brief Enables or disables the Internal High Speed oscillator (HSI). +* HSI can not be stopped if it is used directly or through the +* PLL as system clock. +* @param NewState: new state of the HSI. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_HSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState==ENABLE) + { + RCC->CR |= CR_HSION_Set; + } + else + { + RCC->CR &= CR_HSION_Set; + } +} +/** +* @brief Configures the PLL clock source and DM DN factor. +* This function must be used only when the PLL is disabled. +* @param RCC_PLLSource: specifies the PLL entry clock source. +* This parameter can be one of the following values: +* @arg RCC_PLLSource_HSI_Div2: HSI oscillator clock divided +* by 2 selected as PLL clock entry +* @arg RCC_PLLSource_HSE_Div1: HSE oscillator clock selected +* as PLL clock entry +* @arg RCC_PLLSource_HSE_Div2: HSE oscillator clock divided +* by 2 selected as PLL clock entry +* @param RCC_PLLDN: specifies the PLL multiplication factor. +* This parameter can be RCC_PLLMul_x where x:[31:26] +* @param RCC_PLLDM: specifies the PLL Divsior factor. +* This parameter can be RCC_Divsior_x where x:[22:20] +* @retval : None +*/ +void RCC_PLLDMDNConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLDN, uint32_t RCC_PLLDM) +{ + uint32_t tmpreg0 = 0; + + /* Check the parameters */ + assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_PLLMul)); + tmpreg0 = RCC->CR; + + /* Clear PLLDN, PLLDM bits */ + /* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */ + tmpreg0 &= 0x038fffff; + + /* Set the PLL configuration bits */ + tmpreg0 |= (RCC_PLLDN<<26)|(RCC_PLLDM<<20); + + RCC->CR = tmpreg0; +} + + +/** +* @brief Configures the PLL clock source and multiplication factor. +* This function must be used only when the PLL is disabled. +* @param RCC_PLLSource: specifies the PLL entry clock source. +* This parameter can be one of the following values: +* @arg RCC_PLLSource_HSI_Div2: HSI oscillator clock divided +* by 2 selected as PLL clock entry +* @arg RCC_PLLSource_HSE_Div1: HSE oscillator clock selected +* as PLL clock entry +* @arg RCC_PLLSource_HSE_Div2: HSE oscillator clock divided +* by 2 selected as PLL clock entry +* @param RCC_PLLMul: specifies the PLL multiplication factor. +* This parameter can be RCC_PLLMul_x where x:[31:26][22:20] +* @retval : None +*/ +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource)); + assert_param(IS_RCC_PLL_MUL(RCC_PLLMul)); + tmpreg = RCC->CFGR; + /* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */ + tmpreg &= CFGR_PLL_Mask; + /* Set the PLL configuration bits */ + tmpreg |= RCC_PLLSource; + /* Store the new value */ + RCC->CFGR = tmpreg; + + if(RCC_PLLMul==RCC_PLLMul_2) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000007, 0x00000003); //Frclk*8/4 + } + if(RCC_PLLMul==RCC_PLLMul_3) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000005, 0x00000001);//Frclk*6/2 + } + if(RCC_PLLMul==RCC_PLLMul_4) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000007, 0x00000001);//Frclk*8/2 + } + if(RCC_PLLMul==RCC_PLLMul_5) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000009, 0x00000001);//Frclk*10/2 + } + if(RCC_PLLMul==RCC_PLLMul_6) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000000B, 0x00000001);//Frclk*12/2 + } + if(RCC_PLLMul==RCC_PLLMul_7) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000000D, 0x00000001);//Frclk*14/2 + } + if(RCC_PLLMul==RCC_PLLMul_8) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000000F, 0x00000001);//Frclk*16/2 + } + if(RCC_PLLMul==RCC_PLLMul_9) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000011, 0x00000001);//Frclk*18/2 + } + if(RCC_PLLMul==RCC_PLLMul_10) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000013, 0x00000001);//Frclk*20/2 + } + if(RCC_PLLMul==RCC_PLLMul_11) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000015, 0x00000001);//Frclk*22/2 + } + if(RCC_PLLMul==RCC_PLLMul_12) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000017, 0x00000001);//Frclk*24/2 + } + if(RCC_PLLMul==RCC_PLLMul_13) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x00000019, 0x00000001);//Frclk*26/2 + } + if(RCC_PLLMul==RCC_PLLMul_14) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000001B, 0x00000001);//Frclk*28/2 + } + if(RCC_PLLMul==RCC_PLLMul_15) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000001D, 0x00000001);//Frclk*30/2 + } + if(RCC_PLLMul==RCC_PLLMul_16) + { + RCC_PLLDMDNConfig(RCC_PLLSource, 0x0000001F, 0x00000001);//Frclk*32/2 + } + +} + + +/** +* @brief Enables or disables the PLL. +* The PLL can not be disabled if it is used as system clock. +* @param NewState: new state of the PLL. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_PLLCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->CR |= CR_PLLON_Set; + } + else + { + RCC->CR &= CR_PLLON_Reset; + } +} + +/** +* @brief Configures the system clock (SYSCLK). +* @param RCC_SYSCLKSource: specifies the clock source used as system +* clock. This parameter can be one of the following values: +* @arg RCC_SYSCLKSource_HSI: HSI selected as system clock +* @arg RCC_SYSCLKSource_HSE: HSE selected as system clock +* @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock +* @arg RCC_SYSCLKSource_LSI: LSI selected as system clock +* @retval : None +*/ +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource)); + tmpreg = RCC->CFGR; + /* Clear SW[1:0] bits */ + tmpreg &= CFGR_SW_Mask; + /* Set SW[1:0] bits according to RCC_SYSCLKSource value */ + tmpreg |= RCC_SYSCLKSource; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** +* @brief Returns the clock source used as system clock. +* @param None +* @retval : The clock source used as system clock. The returned value can +* be one of the following: +* - 0x00: HSI/6 used as system clock +* - 0x04: HSE used as system clock +* - 0x08: PLL used as system clock +* - 0x0C: LSI used as system clock +*/ +uint8_t RCC_GetSYSCLKSource(void) +{ + return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask)); +} + +/** +* @brief Configures the AHB clock (HCLK). +* @param RCC_SYSCLK: defines the AHB clock divider. This clock is derived from +* the system clock (SYSCLK). +* This parameter can be one of the following values: +* @arg RCC_SYSCLK_Div1: AHB clock = SYSCLK +* @arg RCC_SYSCLK_Div2: AHB clock = SYSCLK/2 +* @arg RCC_SYSCLK_Div4: AHB clock = SYSCLK/4 +* @arg RCC_SYSCLK_Div8: AHB clock = SYSCLK/8 +* @arg RCC_SYSCLK_Div16: AHB clock = SYSCLK/16 +* @arg RCC_SYSCLK_Div64: AHB clock = SYSCLK/64 +* @arg RCC_SYSCLK_Div128: AHB clock = SYSCLK/128 +* @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256 +* @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512 +* @retval : None +*/ +void RCC_HCLKConfig(uint32_t RCC_SYSCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_HCLK(RCC_SYSCLK)); + tmpreg = RCC->CFGR; + /* Clear HPRE[3:0] bits */ + tmpreg &= CFGR_HPRE_Reset_Mask; + /* Set HPRE[3:0] bits according to RCC_SYSCLK value */ + tmpreg |= RCC_SYSCLK; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** +* @brief Configures the Low Speed APB clock (PCLK1). +* @param RCC_HCLK: defines the APB1 clock divider. This clock is derived from +* the AHB clock (HCLK). +* This parameter can be one of the following values: +* @arg RCC_HCLK_Div1: APB1 clock = HCLK +* @arg RCC_HCLK_Div2: APB1 clock = HCLK/2 +* @arg RCC_HCLK_Div4: APB1 clock = HCLK/4 +* @arg RCC_HCLK_Div8: APB1 clock = HCLK/8 +* @arg RCC_HCLK_Div16: APB1 clock = HCLK/16 +* @retval : None +*/ +void RCC_PCLK1Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + tmpreg = RCC->CFGR; + /* Clear PPRE1[2:0] bits */ + tmpreg &= CFGR_PPRE1_Reset_Mask; + /* Set PPRE1[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** +* @brief Configures the High Speed APB clock (PCLK2). +* @param RCC_HCLK: defines the APB2 clock divider. This clock is derived from +* the AHB clock (HCLK). +* This parameter can be one of the following values: +* @arg RCC_HCLK_Div1: APB2 clock = HCLK +* @arg RCC_HCLK_Div2: APB2 clock = HCLK/2 +* @arg RCC_HCLK_Div4: APB2 clock = HCLK/4 +* @arg RCC_HCLK_Div8: APB2 clock = HCLK/8 +* @arg RCC_HCLK_Div16: APB2 clock = HCLK/16 +* @retval : None +*/ +void RCC_PCLK2Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_RCC_PCLK(RCC_HCLK)); + tmpreg = RCC->CFGR; + /* Clear PPRE2[2:0] bits */ + tmpreg &= CFGR_PPRE2_Reset_Mask; + /* Set PPRE2[2:0] bits according to RCC_HCLK value */ + tmpreg |= RCC_HCLK << 3; + /* Store the new value */ + RCC->CFGR = tmpreg; +} + +/** +* @brief Enables or disables the specified RCC interrupts. +* @param RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. +* This parameter can be any combination of the following values: +* @arg RCC_IT_LSIRDY: LSI ready interrupt +* @arg RCC_IT_LSERDY: LSE ready interrupt +* @arg RCC_IT_HSIRDY: HSI ready interrupt +* @arg RCC_IT_HSERDY: HSE ready interrupt +* @arg RCC_IT_PLLRDY: PLL ready interrupt +* @param NewState: new state of the specified RCC interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_IT(RCC_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Perform Byte access to RCC_CIR[12:8] bits to enable the selected interrupts */ + + RCC->CIR |= ((uint32_t)RCC_IT)<<8; + } + else + { + /* Perform Byte access to RCC_CIR[12:8] bits to disable the selected interrupts */ + + RCC->CIR &= ~((uint32_t)RCC_IT<<8); + } +} + +/** +* @brief Configures the USB clock (USBCLK). +* @param RCC_USBCLKSource: specifies the USB clock source. This clock is +* derived from the PLL output. +* This parameter can be one of the following values: + +* @arg RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source +* @arg RCC_USBCLKSource_PLLCLK_Div2: PLL clock Div2 selected as USB clock source +* @arg RCC_USBCLKSource_PLLCLK_Div3: PLL clock Div3 selected as USB clock source +* @arg RCC_USBCLKSource_PLLCLK_Div4: PLL clock Div4 selected as USB clock source +* @retval : None +*/ +void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource) +{ + /* Check the parameters */ + assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource)); + RCC->CFGR &= 0xff3fffff; + RCC->CFGR |= RCC_USBCLKSource; +} + +/** +* @brief Enables or disables the Internal Low Speed oscillator (LSI). +* LSI can not be disabled if the IWDG is running. +* @param NewState: new state of the LSI. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_LSICmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + RCC->CSR |= CSR_LSION_Set; + } + else + { + RCC->CSR &= CSR_LSION_Reset; + } +} + + +/** +* @brief Returns the frequencies of different on chip clocks. +* @param RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which +* will hold the clocks frequencies. +* @retval : None +*/ +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) +{ + uint32_t tmp = 0, pllmull1 = 0,pllmull2 = 0, pllsource = 0, presc = 0; + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & CFGR_SWS_Mask; + switch (tmp) + { + case 0x00: /* HSI used as system clock */ + RCC_Clocks->SYSCLK_Frequency = HSI_Value_Pll_OFF; + break; + case 0x04: /* HSE used as system clock */ + RCC_Clocks->SYSCLK_Frequency = HSE_Value; + break; + case 0x08: /* PLL used as system clock */ + /* Get PLL clock source and multiplication factor ----------------------*/ + pllmull1 = ((RCC->CR&0xfc000000)>>26)+1; + pllmull2 = ((RCC->CR&0x00700000)>>20)+1; + pllsource = RCC->CFGR & CFGR_PLLSRC_Mask; + if (pllsource == 0x00) + {/* HSI oscillator clock divided by 2 selected as PLL clock entry */ + RCC_Clocks->SYSCLK_Frequency = 2*(HSI_Value_Pll_ON >> 1) * pllmull1/pllmull2; + } + else + {/* HSE selected as PLL clock entry */ + if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET) + {/* HSE oscillator clock divided by 2 */ + RCC_Clocks->SYSCLK_Frequency = (HSE_Value >> 1) * pllmull1/pllmull2; + } + else + { + RCC_Clocks->SYSCLK_Frequency = HSE_Value * pllmull1/pllmull2; + } + } + break; + default: + RCC_Clocks->SYSCLK_Frequency = HSI_Value_Pll_OFF; + break; + } + /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/ + /* Get HCLK prescaler */ + tmp = RCC->CFGR & CFGR_HPRE_Set_Mask; + tmp = tmp >> 4; + presc = APBAHBPrescTable[tmp]; + /* HCLK clock frequency */ + RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; + /* Get PCLK1 prescaler */ + tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask; + tmp = tmp >> 8; + presc = APBAHBPrescTable[tmp]; + /* PCLK1 clock frequency */ + RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + /* Get PCLK2 prescaler */ + tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask; + tmp = tmp >> 11; + presc = APBAHBPrescTable[tmp]; + /* PCLK2 clock frequency */ + RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; +} + +/** +* @brief Enables or disables the AHB peripheral clock. +* @param RCC_AHBPeriph: specifies the AHB peripheral to gates its clock. +* This parameter can be any combination of the following values: +* @arg RCC_AHBPeriph_DMA1 +* @arg RCC_AHBPeriph_SRAM +* @arg RCC_AHBPeriph_FLITF +* @arg RCC_AHBPeriph_AES +* @arg RCC_AHBPeriph_GPIOA +* @arg RCC_AHBPeriph_GPIOB +* @arg RCC_AHBPeriph_GPIOC +* @arg RCC_AHBPeriph_GPIOD +* SRAM and FLITF clock can be disabled only during sleep mode. +* @param NewState: new state of the specified peripheral clock. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->AHBENR |= RCC_AHBPeriph; + } + else + { + RCC->AHBENR &= ~RCC_AHBPeriph; + } +} + +/** +* @brief Enables or disables the High Speed APB (APB2) peripheral clock. +* @param RCC_APB2Periph: specifies the APB2 peripheral to gates its +* clock. +* This parameter can be any combination of the following values: +* @arg RCC_APB2Periph_SYSCFG, RCC_APB2Periph_ADC1, +* RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1, +* RCC_APB2Periph_UART1, RCC_APB2Periph_COMP, +* RCC_APB2Periph_TIM14, RCC_APB2Periph_TIM16, +* RCC_APB2Periph_TIM17, RCC_APB2Periph_DBGMCU +* RCC_APB2Periph_ALL +* @param NewState: new state of the specified peripheral clock. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2ENR |= RCC_APB2Periph; + } + else + { + RCC->APB2ENR &= ~RCC_APB2Periph; + } +} + +/** +* @brief Enables or disables the Low Speed APB (APB1) peripheral clock. +* @param RCC_APB1Periph: specifies the APB1 peripheral to gates its +* clock. +* This parameter can be any combination of the following values: +* @arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, +* RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, +* RCC_APB1Periph_UART2, RCC_APB1Periph_I2C1, +* RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, +* RCC_APB1Periph_PWR, RCC_APB1Periph_CRS, +* RCC_APB1Periph_ALL +* @param NewState: new state of the specified peripheral clock. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1ENR |= RCC_APB1Periph; + } + else + { + RCC->APB1ENR &= ~RCC_APB1Periph; + } +} + +/** +* @brief Forces or releases High Speed APB (APB2) peripheral reset. +* @param RCC_APB2Periph: specifies the APB2 peripheral to reset. +* This parameter can be any combination of the following values: +* @arg RCC_APB2Periph_SYSCFG, RCC_APB2Periph_ADC1, +* RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1, +* RCC_APB2Periph_UART1, RCC_APB2Periph_COMP, +* RCC_APB2Periph_TIM14, RCC_APB2Periph_TIM16, +* RCC_APB2Periph_TIM17, RCC_APB2Periph_DBGMCU +* RCC_APB2Periph_ALL +* @param NewState: new state of the specified peripheral reset. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB2RSTR |= RCC_APB2Periph; + } + else + { + RCC->APB2RSTR &= ~RCC_APB2Periph; + } +} + +/** +* @brief Forces or releases Low Speed APB (APB1) peripheral reset. +* @param RCC_APB1Periph: specifies the APB1 peripheral to reset. +* This parameter can be any combination of the following values: +* @arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, +* RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, +* RCC_APB1Periph_UART2, RCC_APB1Periph_I2C1, +* RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, +* RCC_APB1Periph_PWR, RCC_APB1Periph_CRS, +* RCC_APB1Periph_ALL +* @param NewState: new state of the specified peripheral clock. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + RCC->APB1RSTR |= RCC_APB1Periph; + } + else + { + RCC->APB1RSTR &= ~RCC_APB1Periph; + } +} + + +/** +* @brief Enables or disables the Clock Security System. +* @param NewState: new state of the Clock Security System.. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void RCC_ClockSecuritySystemCmd(FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if(NewState==ENABLE) + { + RCC->CR |= (uint32_t)0x00080000; + } + else + { + RCC->CR &= (uint32_t)0xfff7ffff; + } +} + +/** +* @brief Selects the clock source to output on MCO pin. +* @param RCC_MCO: specifies the clock source to output. +* This parameter can be one of the following values: +* @arg RCC_MCO_NoClock: No clock selected +* @arg RCC_MCO_SYSCLK: System clock selected +* @arg RCC_MCO_HSI: HSI oscillator clock selected +* @arg RCC_MCO_HSE: HSE oscillator clock selected +* @arg RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected +* @arg RCC_MCO_LSI: LSI clock selected +* @retval : None +*/ +void RCC_MCOConfig(uint8_t RCC_MCO) +{ + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCO)); + /* Perform Byte access to MCO[2:0] bits to select the MCO source */ + RCC->CFGR &= 0xF8FFFFFF; + RCC->CFGR |= (RCC_MCO<<24); +} + +/** +* @brief Checks whether the specified RCC flag is set or not. +* @param RCC_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg RCC_FLAG_HSIRDY: HSI oscillator clock ready +* @arg RCC_FLAG_HSERDY: HSE oscillator clock ready +* @arg RCC_FLAG_PLLRDY: PLL clock ready +* @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready +* @arg RCC_FLAG_PINRST: Pin reset +* @arg RCC_FLAG_PORRST: POR/PDR reset +* @arg RCC_FLAG_SFTRST: Software reset +* @arg RCC_FLAG_IWDGRST: Independent Watchdog reset +* @arg RCC_FLAG_WWDGRST: Window Watchdog reset +* @retval : The new state of RCC_FLAG (SET or RESET). +*/ +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) +{ + uint32_t tmp = 0; + uint32_t statusreg = 0; + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RCC_FLAG(RCC_FLAG)); + /* Get the RCC register index */ + tmp = RCC_FLAG >> 5; + if (tmp == 1) /* The flag to check is in CR register */ + { + statusreg = RCC->CR; + } + else /* The flag to check is in CSR register */ + { + statusreg = RCC->CSR; + } + /* Get the flag position */ + tmp = RCC_FLAG & FLAG_Mask; + if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the flag status */ + return bitstatus; +} + +/** +* @brief Clears the RCC reset flags. +* The reset flags are: RCC_FLAG_PINRST, RCC_FLAG_PORRST, +* RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST +* @param None +* @retval : None +*/ +void RCC_ClearFlag(void) +{ + /* Set RMVF bit to clear the reset flags */ + RCC->CSR |= CSR_RMVF_Set; +} + +/** +* @brief Checks whether the specified RCC interrupt has occurred or not. +* @param RCC_IT: specifies the RCC interrupt source to check. +* This parameter can be one of the following values: +* @arg RCC_IT_LSIRDY: LSI ready interrupt +* @arg RCC_IT_HSIRDY: HSI ready interrupt +* @arg RCC_IT_HSERDY: HSE ready interrupt +* @arg RCC_IT_PLLRDY: PLL ready interrupt +* @arg RCC_IT_CSS: Clock Security System interrupt +* @retval : The new state of RCC_IT (SET or RESET). +*/ +ITStatus RCC_GetITStatus(uint8_t RCC_IT) +{ + ITStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_RCC_GET_IT(RCC_IT)); + /* Check the status of the specified RCC interrupt */ + if ((RCC->CIR & RCC_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + /* Return the RCC_IT status */ + return bitstatus; +} + +/** +* @brief Clears the RCC interrupt pending bits. +* @param RCC_IT: specifies the interrupt pending bit to clear. +* This parameter can be any combination of the following values: +* @arg RCC_IT_LSIRDY: LSI ready interrupt +* @arg RCC_IT_HSIRDY: HSI ready interrupt +* @arg RCC_IT_HSERDY: HSE ready interrupt +* @arg RCC_IT_PLLRDY: PLL ready interrupt +* @arg RCC_IT_CSS: Clock Security System interrupt +* @retval : None +*/ +void RCC_ClearITPendingBit(uint8_t RCC_IT) +{ + /* Check the parameters */ + assert_param(IS_RCC_CLEAR_IT(RCC_IT)); + /* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt + pending bits */ + + RCC->CIR |= (uint32_t)RCC_IT<<16; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_spi.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_spi.c new file mode 100644 index 0000000000..188606dc31 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_spi.c @@ -0,0 +1,688 @@ +/** +****************************************************************************** +* @file HAL_spi.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the SPI firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_spi.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup SPI +* @brief SPI driver modules +* @{ +*/ + +/** @defgroup SPI_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + + +/** @defgroup SPI_Private_Defines +* @{ +*/ + + + +/* SPI SPIENE mask */ +#define GCTL_SPIEN_Set ((uint16_t)0x0001) +#define GCTL_SPIEN_Reset ((uint16_t)0xFFFE) +/* SPI registers Masks */ +#define GCTL_CLEAR_Mask ((uint16_t)0xF000) +#define CCTL_CLEAR_Mask ((uint16_t)0xFFC0) +#define SPBRG_CLEAR_Mask ((uint16_t)0x0000) +#define SPI_DataSize_Mask ((uint16_t)0xFCFF) +/** +* @} +*/ + +/** @defgroup SPI_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup SPI_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup SPI_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup SPI_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the SPIx peripheral registers to their default +* reset values . +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @retval : None +*/ +void SPI_DeInit(SPI_TypeDef* SPIx) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + switch (*(uint32_t*)&SPIx) + { + case SPI1_BASE: + /* Enable SPI1 reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); + /* Release SPI1 from reset state */ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); + break; + case SPI2_BASE: + RCC_APB2PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE); + break; + default: + break; + } +} + +/** +* @brief Initializes the SPIx peripheral according to the specified +* parameters in the SPI_InitStruct. +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @param SPI_InitStruct: pointer to a SPI_InitTypeDef structure that +* contains the configuration information for the specified +* SPI peripheral. +* @retval : None +*/ +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct) +{ + uint32_t tmpreg = 0; + + /* check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Check the SPI parameters */ + assert_param(IS_SPI_DIRECTION_MODE(SPI_InitStruct->SPI_Direction)); + assert_param(IS_SPI_MODE(SPI_InitStruct->SPI_Mode)); + assert_param(IS_SPI_DATASIZE(SPI_InitStruct->SPI_DataSize)); + assert_param(IS_SPI_CPOL(SPI_InitStruct->SPI_CPOL)); + assert_param(IS_SPI_CPHA(SPI_InitStruct->SPI_CPHA)); + assert_param(IS_SPI_NSS(SPI_InitStruct->SPI_NSS)); + assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->SPI_BaudRatePrescaler)); + assert_param(IS_SPI_FIRST_BIT(SPI_InitStruct->SPI_FirstBit)); + assert_param(IS_SPI_DATAWIDRH(SPI_InitStruct->SPI_DataWidth)); + assert_param(IS_SPI_CRC_POLYNOMIAL(SPI_InitStruct->SPI_CRCPolynomial)); + /*---------------------------- SPIx GCTL Configuration ------------------------*/ + /* Get the SPIx GCTL value */ + tmpreg = SPIx->GCTL; + /* Clear csn_sel, dmamode, txtlf, rxtlf,data_sel, rxen, txen, mm, int_en, spien bits */ + tmpreg &= GCTL_CLEAR_Mask; + /* Configure SPIx: direction, NSS management, first transmitted bit, BaudRate prescaler + master/salve mode, CPOL and CPHA */ + /* Set dat_sel bits according to SPI_DataSize value */ + /* Set csn and csn_sel bits according to SPI_NSS value */ + /* Set mm bit according to SPI_Mode value */ + tmpreg |= (uint32_t)((uint32_t) SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_NSS | + SPI_InitStruct->SPI_Mode ); + /* Write to SPIx GCTL */ + SPIx->GCTL = tmpreg; + /*---------------------------- SPIx CCTL Configuration ------------------------*/ + tmpreg = SPIx->CCTL; + /* Clear spilen, lsbfe, CPOL, CPHA bits */ + tmpreg &= CCTL_CLEAR_Mask; + /* Set Spilen bit according to SPI_DataWidth value */ + /* Set LSBFirst bit according to SPI_FirstBit value */ + /* Set CPOL bit according to SPI_CPOL value */ + /* Set CPHA bit according to SPI_CPHA value */ + tmpreg |= (uint16_t)( SPI_InitStruct->SPI_FirstBit | SPI_InitStruct->SPI_CPOL | + SPI_InitStruct->SPI_CPHA ); + + /* Write to SPIx CCTL */ + SPIx->CCTL = tmpreg|0x18; + + /*---------------------------- SPIx SPBRG Configuration ------------------------*/ + tmpreg = SPIx->SPBRG; + /* Clear spbrg bits */ + tmpreg &= (uint16_t)SPBRG_CLEAR_Mask; + /* Set BR bits according to SPI_BaudRatePrescaler value */ + tmpreg |= (uint16_t) SPI_InitStruct->SPI_BaudRatePrescaler; + /* Write to SPIx SPBRG */ + SPIx->SPBRG = tmpreg; + + if((SPI_InitStruct->SPI_DataWidth)!=SPI_DataWidth_8b) + { + SPIx->CCTL|=1<<2;//lsbfe + SPIx->CCTL|=1<<3;//spilen + } + SPIx->EXTCTL=SPI_InitStruct->SPI_DataWidth; +} + +/** +* @brief Fills each SPI_InitStruct member with its default value. +* @param SPI_InitStruct : pointer to a SPI_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct) +{ + /*--------------- Reset SPI init structure parameters values -----------------*/ + + /* initialize the SPI_Mode member */ + SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; + /* initialize the SPI_DataSize member */ + SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; + /* Initialize the SPILEN member */ + SPI_InitStruct->SPI_DataWidth = SPI_DataWidth_8b; + /* Initialize the SPI_CPOL member */ + SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; + /* Initialize the SPI_CPHA member */ + SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; + /* Initialize the SPI_NSS member */ + SPI_InitStruct->SPI_NSS = SPI_NSS_Soft; + /* Initialize the SPI_BaudRatePrescaler member */ + SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + /* Initialize the SPI_FirstBit member */ + SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; + +} + + +/** +* @brief Enables or disables the specified SPI peripheral. +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @param NewState: new state of the SPIx peripheral. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the selected SPI peripheral */ + SPIx->GCTL |= GCTL_SPIEN_Set; + } + else + { + /* Disable the selected SPI peripheral */ + SPIx->GCTL &= GCTL_SPIEN_Reset; + } +} + + +/** +* @brief Enables or disables the specified SPIinterrupts. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_IT: specifies the SPI interrupt source to be +* enabled or disabled. +* This parameter can be one of the following values: +* @arg SPI_IT_TX: Tx buffer empty interrupt mask +* @arg SPI_IT_RX: Rx buffer interrupt mask +* @arg SPI_IT_UNDERRUN: under Error interrupt mask in slave mode +* @arg SPI_IT_RXOVER: RX OVER Error interrupt mask +* @arg SPI_IT_RXMATCH: spectials rx data numbers interrupt mask +* @arg SPI_IT_RXFULL: Rx buffer full interrupt mask +* @arg SPI_IT_TXEPT: Tx buffer empty interrupt mask +* @param NewState: new state of the specified SPI interrupt. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void SPI_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_CONFIG_IT(SPI_IT)); + + if (NewState != DISABLE) + { + /* Enable the selected SPI Global interrupt */ + SPIx->GCTL |= SPI_INT_EN; + /* Enable the selected SPI interrupt */ + SPIx->INTEN |= SPI_IT; + } + else + { + /* Disable the selected SPI interrupt */ + SPIx->INTEN &= (uint16_t)~SPI_IT; + /* Disable the selected SPI Global interrupt */ + SPIx->GCTL &= (uint16_t)~SPI_INT_EN; + } + +} + +/** +* @brief Enables or disables the SPIx DMA interface. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_DMAReq: specifies the SPI DMA transfer request +* to be enabled or disabled. +* This parameter can be any combination of the following values: +* @arg SPI_DMAReq_EN: DMA transfer request enable +* @param NewState: new state of the selected SPI DMA transfer +* request. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void SPI_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_DMAREQ(SPI_DMAReq)); + if (NewState != DISABLE) + { + /* Enable the selected SPI DMA requests */ + SPIx->GCTL |= SPI_DMAReq; + } + else + { + /* Disable the selected SPI DMA requests */ + SPIx->GCTL &= (uint32_t)~SPI_DMAReq; + } +} + +/** +* @brief configure tn Fifo trigger level bit. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_FifoTriggerValue: specifies the Fifo trigger level +* This parameter can be any combination of the following values: +* SPI_TXTLF : SPI TX FIFO Trigger value set +* SPI_RXTLF : SPI RX FIFO Trigger value set +* @param NewState: new state of the selected SPI DMA transfer +* request. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void SPI_FifoTrigger(SPI_TypeDef* SPIx, uint16_t SPI_FifoTriggerValue, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + assert_param(IS_SPI_FIFOTRIGGER(SPI_FifoTriggerValue)); + + if (NewState != DISABLE) + { + /* Enable the selected SPI DMA requests */ + SPIx->GCTL |= SPI_FifoTriggerValue; + } + else + { + /* Disable the selected SPI DMA requests */ + SPIx->GCTL &= (uint32_t)~SPI_FifoTriggerValue; + } +} + +/** +* @brief Transmits a Data through the SPIx peripheral. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param Data : Data to be transmitted.. +* @retval : None +*/ +void SPI_SendData(SPI_TypeDef* SPIx, uint32_t Data) +{ + u8 temp=0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + /* Write in the TXREG register the data to be sent */ + temp=SPIx->EXTCTL; + SPIx->TXREG = Data; + if(temp>0x8||temp==0) SPIx->TXREG = Data>>8; + if(temp>0x10||temp==0) SPIx->TXREG = Data>>16; + if(temp>0x18||temp==0) SPIx->TXREG = Data>>24; +} + +/** +* @brief Returns the most recent received data by the SPIx peripheral. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @retval : The value of the received data. +*/ +uint32_t SPI_ReceiveData(SPI_TypeDef* SPIx) +{ + u32 temp=0; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + + temp =(u32)SPIx->RXREG; + if(SPIx->EXTCTL>8||SPIx->EXTCTL==0) temp |=(u32) (SPIx->RXREG)<<8; + if(SPIx->EXTCTL>16||SPIx->EXTCTL==0) temp |=(u32)( SPIx->RXREG)<<16; + if(SPIx->EXTCTL>24||SPIx->EXTCTL==0) temp |=(u32)( SPIx->RXREG)<<24; + + return temp; +} + +/** +* @brief Slave chip csn single by selected +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @param SPI_CSInternalSelected: specifies the SPI CS internal selected. +* This parameter can be one of the following values: +* @arg SPI_CS_BIT0: cs bit 0 selected +* @arg SPI_CS_BIT1: cs bit 1 selected +* @arg SPI_CS_BIT2: cs bit 2 selected +* @arg SPI_CS_BIT3: cs bit 3 selected +* @arg SPI_CS_BIT4: cs bit 4 selected +* @arg SPI_CS_BIT5: cs bit 5 selected +* @arg SPI_CS_BIT6: cs bit 6 selected +* @arg SPI_CS_BIT7: cs bit 7 selected +* @param NewState: new state of the selected SPI CS pin +* request. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void SPI_CSInternalSelected(SPI_TypeDef* SPIx, uint16_t SPI_CSInternalSelected,FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_CS(SPI_CSInternalSelected)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + + if (NewState != DISABLE) + { + /* selected cs pin according NSSR Value */ + SPIx->NSSR &= SPI_CSInternalSelected; + } + else + { + /* release cs pin according NSSR Value*/ + SPIx->NSSR |= ~SPI_CSInternalSelected; + } +} + + +/** +* @brief Configures internally by software the NSS pin for the selected +* SPI. +* @param SPIx: where x can be 1, 2 to select the SPI peripheral. +* @param SPI_NSSInternalSoft: specifies the SPI NSS internal state. +* This parameter can be one of the following values: +* @arg SPI_NSSInternalSoft_Set: Set NSS pin internally +* @arg SPI_NSSInternalSoft_Reset: Reset NSS pin internally +* @retval : None +*/ +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_NSS_INTERNAL(SPI_NSSInternalSoft)); + if (SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset) + { + /* Set NSS pin internally by software */ + SPIx->GCTL |= SPI_NSSInternalSoft_Set; + } + else + { + /* Reset NSS pin internally by software */ + SPIx->GCTL &= SPI_NSSInternalSoft_Reset; + } +} + + + +/** +* @brief Configures the data size for the selected SPI. +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @param SPI_DataSize: specifies the SPI data size. +* This parameter can be one of the following values: +* @arg SPI_DataSize_32b: Set data frame format to 32bit +* @arg SPI_DataSize_16b: Set data frame format to 16bit +* @arg SPI_DataSize_8b: Set data frame format to 8bit +* @retval : None +*/ +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DATASIZE(SPI_DataSize)); + /* Clear data_sel bit */ + SPIx->GCTL &= SPI_DataSize_Mask; + /* Set new data_sel bit value */ + SPIx->GCTL |= SPI_DataSize; +} + + + +/** +* @brief Selects the data transfer direction in bi-directional mode +* for the specified SPI. +* @param SPIx: where x can be 0, 1 to select the SPI peripheral. +* @param SPI_Direction: specifies the data transfer direction in +* bi-directional mode. +* This parameter can be one of the following values: +* @arg SPI_Direction_Tx: Selects Tx transmission direction +* @arg SPI_Direction_Rx: Selects Rx receive direction +@arg SPI_Disable_Tx: Selects Rx receive direction +@arg SPI_Disable_Rx: Selects Rx receive direction +* @retval : None +*/ +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_DIRECTION(SPI_Direction)); + + /* Set the Tx only mode */ + if(SPI_Direction==SPI_Direction_Tx) + { + SPIx->GCTL |= SPI_Direction_Tx; + } + /* Set the Rx only mode */ + if(SPI_Direction==SPI_Direction_Rx) + { + SPIx->GCTL |= SPI_Direction_Rx; + } + /* Disable the Tx only mode */ + if(SPI_Direction==SPI_Disable_Tx) + { + SPIx->GCTL &= SPI_Disable_Tx; + } + /* Disable the Rx only mode */ + if(SPI_Direction==SPI_Disable_Rx) + { + SPIx->GCTL &= SPI_Disable_Rx; + } +} + +/** +* @brief Checks whether the specified SPI flag is set or not. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_FLAG: specifies the SPI flag to check. +* This parameter can be one of the following values: +* @arg SPI_FLAG_RXAVL: Rx buffer has bytes flag +* @arg SPI_FLAG_TXEPT: Tx buffer and tx shifter empty flag +* @retval : The new state of SPI_FLAG (SET or RESET). +*/ +FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_GET_FLAG(SPI_FLAG)); + if(SPIx->EXTCTL==8) + { + /* Check the status of the specified SPI flag */ + if ((SPIx->CSTAT & SPI_FLAG) != (uint16_t)RESET) + { + /* SPI_FLAG is set */ + bitstatus = SET; + } + else + { + /* SPI_FLAG is reset */ + bitstatus = RESET; + } + /* Return the SPI_FLAG status */ + return bitstatus; + } + else + { + u8 number; + if(SPIx->EXTCTL>0&&SPIx->EXTCTL<=8) + number=1; + else if(SPIx->EXTCTL<=16) + number=2; + else if(SPIx->EXTCTL<=24) + number=3; + else if(SPIx->EXTCTL<=31||SPIx->EXTCTL==0) + number=4; + if(((SPIx->CSTAT&0xf00)>>8)>=number) + { + return SET; + } + else + { + return RESET; + } + } +} + +/** +* @brief Checks whether the specified SPI interrupt has occurred or not. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_IT: specifies the SPI interrupt source to check. +* This parameter can be one of the following values: +* @arg SPI_IT_TX: Tx buffer empty interrupt +* @arg SPI_IT_RX: Rx buffer interrupt +* @arg SPI_IT_UNDERRUN: under Error interrupt in slave mode +* @arg SPI_IT_RXOVER: RX OVER Error interrupt +* @arg SPI_IT_RXMATCH: spectials rx data numbers interrupt +* @arg SPI_IT_RXFULL: Rx buffer full interrupt +* @arg SPI_IT_TXEPT: Tx buffer and tx shifter empty interrupt +* @retval : The new state of SPI_IT (SET or RESET). +*/ +ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_IT) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_GET_IT(SPI_IT)); + /* Check the status of the specified SPI interrupt */ + if ((SPIx->INTSTAT & SPI_IT) != (uint16_t)RESET) + { + /* SPI_IT is set */ + bitstatus = SET; + } + else + { + /* SPI_IT is reset */ + bitstatus = RESET; + } + /* Return the SPI_IT status */ + return bitstatus; +} + +/** +* @brief Clears the SPIx Error interrupt pending bit. +* @param SPIx: where x can be : +* 0, 1 in SPI mode +* @param SPI_IT: specifies the SPI interrupt pending bit to clear. +* @arg SPI_IT_TX: Tx buffer empty interrupt +* @arg SPI_IT_RX: Rx buffer interrupt +* @arg SPI_IT_UNDERRUN: under Error interrupt in slave mode +* @arg SPI_IT_RXOVER: RX OVER Error interrupt +* @arg SPI_IT_RXMATCH: spectials rx data numbers interrupt +* @arg SPI_IT_RXFULL: Rx buffer full interrupt +* @arg SPI_IT_TXEPT: Tx buffer and tx shifter empty interrupt +* This function clears only ERR intetrrupt pending bit. +* @retval : None +*/ +void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_IT) +{ + + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_CLEAR_IT(SPI_IT)); + + /* Clear the selected SPI IT INTERRUPT */ + SPIx->INTCLR |= (uint16_t)SPI_IT; +} + + +/** +* @brief SPI Hole a count Received bytes in next receive process. +* @param SPIx: where x can be 0, 1 in SPI mode +* @param Number: specifies the SPI receive Number. +* This parament can be 1-65535. +* This function can use only in SPI master single receive mode. +* @retval : None +*/ +void SPI_RxBytes(SPI_TypeDef* SPIx, uint16_t Number) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + /*set the received bytes in next receive process */ + SPIx->RXDNR = Number; +} + +/** +* @brief slave mode tx data transmit phase adjust set. +* @param SPIx: where x can be 0, 1 in SPI mode +* @param AdjustValue: specifies the SPI receive Number. +* This parament can be : +* SPI_SlaveAdjust_FAST: fast speed use +* SPI_SlaveAdjust_LOW: low speed use +* This function can use only in SPI master single receive mode. +* @retval : None +*/ +void SPI_SlaveAdjust(SPI_TypeDef* SPIx, uint16_t AdjustValue) +{ + /* Check the parameters */ + assert_param(IS_SPI_ALL_PERIPH(SPIx)); + assert_param(IS_SPI_SlaveAdjust(AdjustValue)); + /*set the AdjustValue according to txedge bit of CCTL register*/ + SPIx->CCTL |= AdjustValue; +} + + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_syscfg.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_syscfg.c new file mode 100644 index 0000000000..8d759a6f2f --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_syscfg.c @@ -0,0 +1,199 @@ +/** +****************************************************************************** +* @file HAL_syscfg.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides firmware functions to manage the following +* functionalities of the SYSCFG peripheral: +* + Remapping the memory mapped at 0x00000000 +* + Remapping the DMA channels +* + Enabling I2C fast mode plus driving capability for I2C pins +* + Configuring the EXTI lines connection to the GPIO port +* + Configuring the CFGR2 features (Connecting some internal signal +* to the break input of TIM1) +* +* @verbatim +=============================================================================== +##### How to use this driver ##### +=============================================================================== +[..] +The SYSCFG registers can be accessed only when the SYSCFG +interface APB clock is enabled. +To enable SYSCFG APB clock use: +RCC_APBPeriphClockCmd(RCC_APBPeriph_SYSCFG, ENABLE). +* @endverbatim +* +****************************************************************************** +* @attention +* +*

© COPYRIGHT 2017 MindMotion

+****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_syscfg.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup SYSCFG +* @brief SYSCFG driver modules +* @{ +*/ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup SYSCFG_Private_Functions +* @{ +*/ + +/** @defgroup SYSCFG_Group1 SYSCFG Initialization and Configuration functions +* @brief SYSCFG Initialization and Configuration functions +* +@verbatim +=============================================================================== +##### SYSCFG Initialization and Configuration functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Deinitializes the SYSCFG registers to their default reset values. +* @param None +* @retval None +* @note MEM_MODE bits are not affected by APB reset. +* @note MEM_MODE bits took the value from the user option bytes. +* @note CFGR2 register is not affected by APB reset. +* @note CLABBB configuration bits are locked when set. +* @note To unlock the configuration, perform a system reset. +*/ +void SYSCFG_DeInit(void) +{ + /* Set SYSCFG_CFGR1 register to reset value without affecting MEM_MODE bits */ + SYSCFG->CFGR &= SYSCFG_CFGR_MEM_MODE; + /* Set EXTICRx registers to reset value */ + SYSCFG->EXTICR[0] = 0; + SYSCFG->EXTICR[1] = 0; + SYSCFG->EXTICR[2] = 0; + SYSCFG->EXTICR[3] = 0; + +} + +/** +* @brief Configures the memory mapping at address 0x00000000. +* @param SYSCFG_MemoryRemap: selects the memory remapping. +* This parameter can be one of the following values: +* @arg SYSCFG_MemoryRemap_Flash: Main Flash memory mapped at 0x00000000 +* @arg SYSCFG_MemoryRemap_SystemMemory: System Flash memory mapped at 0x00000000 +* @arg SYSCFG_MemoryRemap_SRAM: Embedded SRAM mapped at 0x00000000 +* @retval None +*/ +void SYSCFG_MemoryRemapConfig(uint32_t SYSCFG_MemoryRemap) +{ + uint32_t tmpctrl = 0; + + /* Check the parameter */ + assert_param(IS_SYSCFG_MEMORY_REMAP(SYSCFG_MemoryRemap)); + + /* Get CFGR1 register value */ + tmpctrl = SYSCFG->CFGR; + + /* Clear MEM_MODE bits */ + tmpctrl &= (uint32_t) (~SYSCFG_CFGR_MEM_MODE); + + /* Set the new MEM_MODE bits value */ + tmpctrl |= (uint32_t) SYSCFG_MemoryRemap; + + /* Set CFGR1 register with the new memory remap configuration */ + SYSCFG->CFGR = tmpctrl; +} + +/** +* @brief Configure the DMA channels remapping. +* @param SYSCFG_DMARemap: selects the DMA channels remap. +* This parameter can be one of the following values: +* @arg SYSCFG_DMARemap_TIM17: Remap TIM17 DMA requests from channel1 to channel2 +* @arg SYSCFG_DMARemap_TIM16: Remap TIM16 DMA requests from channel3 to channel4 +* @arg SYSCFG_DMARemap_UART1Rx: Remap UART1 Rx DMA requests from channel3 to channel5 +* @arg SYSCFG_DMARemap_UART1Tx: Remap UART1 Tx DMA requests from channel2 to channel4 +* @arg SYSCFG_DMARemap_ADC1: Remap ADC1 DMA requests from channel1 to channel2 +* @param NewState: new state of the DMA channel remapping. +* This parameter can be: ENABLE or DISABLE. +* @note When enabled, DMA channel of the selected peripheral is remapped +* @note When disabled, Default DMA channel is mapped to the selected peripheral +* @note By default TIM17 DMA requests is mapped to channel 1, +* use SYSCFG_DMAChannelRemapConfig(SYSCFG_DMARemap_TIM17, Enable) to remap +* TIM17 DMA requests to channel 2 and use +* SYSCFG_DMAChannelRemapConfig(SYSCFG_DMARemap_TIM17, Disable) to map +* TIM17 DMA requests to channel 1 (default mapping) +* @retval None +*/ +void SYSCFG_DMAChannelRemapConfig(uint32_t SYSCFG_DMARemap, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_SYSCFG_DMA_REMAP(SYSCFG_DMARemap)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Remap the DMA channel */ + SYSCFG->CFGR |= (uint32_t)SYSCFG_DMARemap; + } + else + { + /* use the default DMA channel mapping */ + SYSCFG->CFGR &= (uint32_t)(~SYSCFG_DMARemap); + } +} + + + +/** +* @brief Selects the GPIO pin used as EXTI Line. +* @param EXTI_PortSourceGPIOx: selects the GPIO port to be used as source +* for EXTI lines where x can be (A, B, C, D, E or F). +* @param EXTI_PinSourcex: specifies the EXTI line to be configured. +* @note This parameter can be EXTI_PinSourcex where x can be: +* For MCU: (0..15) for GPIOA, GPIOB, (13..15) for GPIOC and (0..1, 6..7) for GPIOD. +* @retval None +*/ +void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex) +{ + uint32_t tmp = 0x00; + + /* Check the parameters */ + assert_param(IS_EXTI_PORT_SOURCE(EXTI_PortSourceGPIOx)); + assert_param(IS_EXTI_PIN_SOURCE(EXTI_PinSourcex)); + + tmp = ((uint32_t)0x0F) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03)); + SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] &= ~tmp; + SYSCFG->EXTICR[EXTI_PinSourcex >> 0x02] |= (((uint32_t)EXTI_PortSourceGPIOx) << (0x04 * (EXTI_PinSourcex & (uint8_t)0x03))); +} + + + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_tim.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_tim.c new file mode 100644 index 0000000000..048ad281ec --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_tim.c @@ -0,0 +1,3276 @@ +/** +****************************************************************************** +* @file HAL_tim.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides firmware functions to manage the following +* functionalities of the TIM peripheral: +* + TimeBase management +* + Output Compare management +* + Input Capture management +* + Interrupts, DMA and flags management +* + Clocks management +* + Synchronization management +* + Specific interface management +* + Specific remapping management +* +* @verbatim + +=============================================================================== +##### How to use this driver ##### +=============================================================================== +[..] This driver provides functions to configure and program the TIM +of all M0 series devices These functions are split in 8 groups: +(#) TIM TimeBase management: this group includes all needed functions +to configure the TM Timebase unit: +(++) Set/Get Prescaler. +(++) Set/Get Autoreload. +(++) Counter modes configuration. +(++) Set Clock division. +(++) Select the One Pulse mode. +(++) Update Request Configuration. +(++) Update Disable Configuration. +(++) Auto-Preload Configuration. +(++) Enable/Disable the counter. + +(#) TIM Output Compare management: this group includes all needed +functions to configure the Capture/Compare unit used in Output +compare mode: +(++) Configure each channel, independently, in Output Compare mode. +(++) Select the output compare modes. +(++) Select the Polarities of each channel. +(++) Set/Get the Capture/Compare register values. +(++) Select the Output Compare Fast mode. +(++) Select the Output Compare Forced mode. +(++) Output Compare-Preload Configuration. +(++) Clear Output Compare Reference. +(++) Select the OCREF Clear signal. +(++) Enable/Disable the Capture/Compare Channels. + +(#) TIM Input Capture management: this group includes all needed +functions to configure the Capture/Compare unit used in +Input Capture mode: +(++) Configure each channel in input capture mode. +(++) Configure Channel1/2 in PWM Input mode. +(++) Set the Input Capture Prescaler. +(++) Get the Capture/Compare values. + +(#) Advanced-control timers (TIM1) specific features +(++) Configures the Break input, dead time, Lock level, the OSSI, +the OSSR State and the AOE(automatic output enable) +(++) Enable/Disable the TIM peripheral Main Outputs +(++) Select the Commutation event +(++) Set/Reset the Capture Compare Preload Control bit + +(#) TIM interrupts, DMA and flags management. +(++) Enable/Disable interrupt sources. +(++) Get flags status. +(++) Clear flags/ Pending bits. +(++) Enable/Disable DMA requests. +(++) Configure DMA burst mode. +(++) Select CaptureCompare DMA request. + +(#) TIM clocks management: this group includes all needed functions +to configure the clock controller unit: +(++) Select internal/External clock. +(++) Select the external clock mode: ETR(Mode1/Mode2), TIx or ITRx. + +(#) TIM synchronization management: this group includes all needed. +functions to configure the Synchronization unit: +(++) Select Input Trigger. +(++) Select Output Trigger. +(++) Select Master Slave Mode. +(++) ETR Configuration when used as external trigger. + +(#) TIM specific interface management, this group includes all +needed functions to use the specific TIM interface: +(++) Encoder Interface Configuration. +(++) Select Hall Sensor. + +(#) TIM specific remapping management includes the Remapping +configuration of specific timers + +@endverbatim +* +****************************************************************************** +* @attention +* +*

© COPYRIGHT 2017 MindMotion

+* +****************************************************************************** +*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_tim.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup TIM +* @brief TIM driver modules +* @{ +*/ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ + +/* ---------------------- TIM registers bit mask ------------------------ */ +#define SMCR_ETR_MASK ((uint16_t)0x00FF) +#define CCMR_OFFSET ((uint16_t)0x0018) +#define CCER_CCE_SET ((uint16_t)0x0001) +#define CCER_CCNE_SET ((uint16_t)0x0004) + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ + +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup TIM_Private_Functions +* @{ +*/ + +/** @defgroup TIM_Group1 TimeBase management functions +* @brief TimeBase management functions +* +@verbatim +=============================================================================== +##### TimeBase management functions ##### +=============================================================================== + +*** TIM Driver: how to use it in Timing(Time base) Mode *** +=============================================================================== +[..] To use the Timer in Timing(Time base) mode, the following steps are +mandatory: +(#) Enable TIM clock using +RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function. +(#) Fill the TIM_TimeBaseInitStruct with the desired parameters. +(#) Call TIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStruct) to configure +the Time Base unit with the corresponding configuration. +(#) Enable the NVIC if you need to generate the update interrupt. +(#) Enable the corresponding interrupt using the function +TIM_ITConfig(TIMx, TIM_IT_Update). +(#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. +[..] +(@) All other functions can be used seperatly to modify, if needed, +a specific feature of the Timer. + +@endverbatim +* @{ +*/ + +/** +* @brief Deinitializes the TIMx peripheral registers to their default reset values. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM peripheral. + + + +* @retval None +* +*/ +void TIM_DeInit(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + if (TIMx == TIM1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); + } + else if (TIMx == TIM2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); + } + else if (TIMx == TIM3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE); + } + else if (TIMx == TIM14) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM14, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM14, DISABLE); + } + else if (TIMx == TIM16) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, DISABLE); + } + else + { + if (TIMx == TIM17) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE); + } + } + +} + +/** +* @brief Initializes the TIMx Time Base Unit peripheral according to +* the specified parameters in the TIM_TimeBaseInitStruct. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef +* structure that contains the configuration information for +* the specified TIM peripheral. +* @retval None +*/ +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + uint16_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode)); + assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision)); + + tmpcr1 = TIMx->CR1; + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3)) + { + /* Select the Counter Mode */ + tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS))); + tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode; + } + TIMx->CR1 = tmpcr1; + + /* Set the Autoreload value */ + TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ; + + /* Set the Prescaler value */ + TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; + + if ((TIMx == TIM1)|| (TIMx == TIM16) || (TIMx == TIM17)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; + } + + /* Generate an update event to reload the Prescaler and the Repetition counter + values immediately */ + TIMx->EGR = TIM_PSCReloadMode_Immediate; +} + +/** +* @brief Fills each TIM_TimeBaseInitStruct member with its default value. +* @param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef structure +* which will be initialized. +* @retval None +*/ +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + /* Set the default configuration */ + TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF; + TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; + TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; + TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; +} + +/** +* @brief Configures the TIMx Prescaler. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM peripheral. + + + +* @param Prescaler: specifies the Prescaler Register value +* @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode +* This parameter can be one of the following values: +* @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event. +* @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediatly. +* @retval None +*/ +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode)); + + /* Set the Prescaler value */ + TIMx->PSC = Prescaler; + /* Set or reset the UG Bit */ + TIMx->EGR = TIM_PSCReloadMode; +} + +/** +* @brief Specifies the TIMx Counter Mode to be used. +* @param TIMx: where x can be 1, 2, or 3 to select the TIM peripheral. + +* @param TIM_CounterMode: specifies the Counter Mode to be used +* This parameter can be one of the following values: +* @arg TIM_CounterMode_Up: TIM Up Counting Mode +* @arg TIM_CounterMode_Down: TIM Down Counting Mode +* @arg TIM_CounterMode_CenterAligned1: TIM Center Aligned Mode1 +* @arg TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2 +* @arg TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3 +* @retval None +*/ +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode) +{ + uint16_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode)); + + tmpcr1 = TIMx->CR1; + /* Reset the CMS and DIR Bits */ + tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS))); + /* Set the Counter Mode */ + tmpcr1 |= TIM_CounterMode; + /* Write to TIMx CR1 register */ + TIMx->CR1 = tmpcr1; +} + +/** +* @brief Sets the TIMx Counter Register value +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param Counter: specifies the Counter register new value. +* @retval None +*/ +void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Set the Counter Register value */ + TIMx->CNT = Counter; +} + +/** +* @brief Sets the TIMx Autoreload Register value +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM peripheral. + + + +* @param Autoreload: specifies the Autoreload register new value. +* @retval None +*/ +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Set the Autoreload Register value */ + TIMx->ARR = Autoreload; +} + +/** +* @brief Gets the TIMx Counter value. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @retval Counter Register value. +*/ +uint32_t TIM_GetCounter(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Get the Counter Register value */ + return TIMx->CNT; +} + +/** +* @brief Gets the TIMx Prescaler value. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @retval Prescaler Register value. +*/ +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + + /* Get the Prescaler Register value */ + return TIMx->PSC; +} + +/** +* @brief Enables or Disables the TIMx Update event. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param NewState: new state of the TIMx UDIS bit +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the Update Disable Bit */ + TIMx->CR1 |= TIM_CR1_UDIS; + } + else + { + /* Reset the Update Disable Bit */ + TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS); + } +} + +/** +* @brief Configures the TIMx Update Request Interrupt source. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param TIM_UpdateSource: specifies the Update source. +* This parameter can be one of the following values: +* @arg TIM_UpdateSource_Regular: Source of update is the counter +* overflow/underflow or the setting of UG bit, or an update +* generation through the slave mode controller. +* @arg TIM_UpdateSource_Global: Source of update is counter overflow/underflow. +* @retval None +*/ +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource)); + + if (TIM_UpdateSource != TIM_UpdateSource_Global) + { + /* Set the URS Bit */ + TIMx->CR1 |= TIM_CR1_URS; + } + else + { + /* Reset the URS Bit */ + TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS); + } +} + +/** +* @brief Enables or disables TIMx peripheral Preload register on ARR. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param NewState: new state of the TIMx peripheral Preload register +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the ARR Preload Bit */ + TIMx->CR1 |= TIM_CR1_ARPE; + } + else + { + /* Reset the ARR Preload Bit */ + TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE); + } +} + +/** +* @brief Selects the TIMx's One Pulse Mode. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM +* peripheral. + + + +* @param TIM_OPMode: specifies the OPM Mode to be used. +* This parameter can be one of the following values: +* @arg TIM_OPMode_Single +* @arg TIM_OPMode_Repetitive +* @retval None +*/ +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_OPM_MODE(TIM_OPMode)); + + /* Reset the OPM Bit */ + TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_OPM); + /* Configure the OPM Mode */ + TIMx->CR1 |= TIM_OPMode; +} + +/** +* @brief Sets the TIMx Clock Division value. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 and 17 to select the TIM peripheral. + +* @param TIM_CKD: specifies the clock division value. +* This parameter can be one of the following value: +* @arg TIM_CKD_DIV1: TDTS = Tck_tim +* @arg TIM_CKD_DIV2: TDTS = 2*Tck_tim +* @arg TIM_CKD_DIV4: TDTS = 4*Tck_tim +* @retval None +*/ +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_CKD_DIV(TIM_CKD)); + + /* Reset the CKD Bits */ + TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_CKD); + /* Set the CKD value */ + TIMx->CR1 |= TIM_CKD; +} + +/** +* @brief Enables or disables the specified TIM peripheral. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17to select the TIMx +* peripheral. + + + +* @param NewState: new state of the TIMx peripheral. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the TIM Counter */ + TIMx->CR1 |= TIM_CR1_CEN; + } + else + { + /* Disable the TIM Counter */ + TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN)); + } +} + +/** +* @} +*/ + +/** @defgroup TIM_Group2 Advanced-control timers (TIM1) specific features +* @brief Advanced-control timers (TIM1) specific features +* +@verbatim +=============================================================================== +##### Advanced-control timers (TIM1) specific features ##### +=============================================================================== + +=================================================================== +*** TIM Driver: how to use the Break feature *** +=================================================================== +[..] After configuring the Timer channel(s) in the appropriate Output Compare mode: + +(#) Fill the TIM_BDTRInitStruct with the desired parameters for the Timer +Break Polarity, dead time, Lock level, the OSSI/OSSR State and the +AOE(automatic output enable). + +(#) Call TIM_BDTRConfig(TIMx, &TIM_BDTRInitStruct) to configure the Timer + +(#) Enable the Main Output using TIM_CtrlPWMOutputs(TIM1, ENABLE) + +(#) Once the break even occurs, the Timer's output signals are put in reset +state or in a known state (according to the configuration made in +TIM_BDTRConfig() function). + +@endverbatim +* @{ +*/ +/** +* @brief Configures the: Break feature, dead time, Lock level, OSSI/OSSR State +* and the AOE(automatic output enable). +* @param TIMx: where x can be 1, 15, 16 or 17 to select the TIM +* @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure that +* contains the BDTR Register configuration information for the TIM peripheral. +* @retval None +*/ +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OSSR_STATE(TIM_BDTRInitStruct->TIM_OSSRState)); + assert_param(IS_TIM_OSSI_STATE(TIM_BDTRInitStruct->TIM_OSSIState)); + assert_param(IS_TIM_LOCK_LEVEL(TIM_BDTRInitStruct->TIM_LOCKLevel)); + assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break)); + assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput)); + /* Set the Lock level, the Break enable Bit and the Ploarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | + TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | + TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | + TIM_BDTRInitStruct->TIM_AutomaticOutput; +} + +/** +* @brief Fills each TIM_BDTRInitStruct member with its default value. +* @param TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which +* will be initialized. +* @retval None +*/ +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct) +{ + /* Set the default configuration */ + TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; + TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; + TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; + TIM_BDTRInitStruct->TIM_DeadTime = 0x00; + TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; + TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; + TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; +} + +/** +* @brief Enables or disables the TIM peripheral Main Outputs. +* @param TIMx: where x can be 1, 15, 16 or 17 to select the TIMx peripheral. +* @param NewState: new state of the TIM peripheral Main Outputs. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the TIM Main Output */ + TIMx->BDTR |= TIM_BDTR_MOE; + } + else + { + /* Disable the TIM Main Output */ + TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE)); + } +} + +/** +* @} +*/ + +/** @defgroup TIM_Group3 Output Compare management functions +* @brief Output Compare management functions +* +@verbatim +=============================================================================== +##### Output Compare management functions ##### +=============================================================================== +*** TIM Driver: how to use it in Output Compare Mode *** +=============================================================================== +[..] To use the Timer in Output Compare mode, the following steps are mandatory: +(#) Enable TIM clock using +RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function. +(#) Configure the TIM pins by configuring the corresponding GPIO pins +(#) Configure the Time base unit as described in the first part of this +driver, if needed, else the Timer will run with the default +configuration: +(++) Autoreload value = 0xFFFF. +(++) Prescaler value = 0x0000. +(++) Counter mode = Up counting. +(++) Clock Division = TIM_CKD_DIV1. +(#) Fill the TIM_OCInitStruct with the desired parameters including: +(++) The TIM Output Compare mode: TIM_OCMode. +(++) TIM Output State: TIM_OutputState. +(++) TIM Pulse value: TIM_Pulse. +(++) TIM Output Compare Polarity : TIM_OCPolarity. +(#) Call TIM_OCxInit(TIMx, &TIM_OCInitStruct) to configure the desired +channel with the corresponding configuration. +(#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. +[..] +(@) All other functions can be used separately to modify, if needed, +a specific feature of the Timer. +(@) In case of PWM mode, this function is mandatory: +TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_ENABLE). +(@) If the corresponding interrupt or DMA request are needed, the user should: +(#@) Enable the NVIC (or the DMA) to use the TIM interrupts (or DMA requests). +(#@) Enable the corresponding interrupt (or DMA request) using the function +TIM_ITConfig(TIMx, TIM_IT_CCx) (or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)). + +@endverbatim +* @{ +*/ + +/** +* @brief Initializes the TIMx Channel1 according to the specified +* parameters in the TIM_OCInitStruct. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 and 17 to select the TIM peripheral. + +* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E); + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC1M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC1S)); + + /* Select the Output Compare Mode */ + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1P)); + /* Set the Output Compare Polarity */ + tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; + + /* Set the Output State */ + tmpccer |= TIM_OCInitStruct->TIM_OutputState; + + if((TIMx == TIM1) || (TIMx == TIM16) || (TIMx == TIM17)) + { + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NP)); + /* Set the Output N Polarity */ + tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; + + /* Reset the Output N State */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NE)); + /* Set the Output N State */ + tmpccer |= TIM_OCInitStruct->TIM_OutputNState; + + /* Reset the Ouput Compare and Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1)); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1N)); + + /* Set the Output Idle state */ + tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Initializes the TIMx Channel2 according to the specified +* parameters in the TIM_OCInitStruct. +* @param TIMx: where x can be 1, 2, 3 to select the TIM peripheral. + +* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC2E)); + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC2M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S)); + + /* Select the Output Compare Mode */ + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2P)); + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4); + + if(TIMx == TIM1) + { + /* Check the parameters */ + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Ouput Compare State */ + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2)); + + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2); + + if (TIMx == TIM1) + { + /* Check the parameters */ + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NP)); + /* Set the Output N Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); + + /* Reset the Output N State */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NE)); + /* Set the Output N State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4); + + /* Reset the Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2N)); + + /* Set the Output N Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2); + } + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Initializes the TIMx Channel3 according to the specified +* parameters in the TIM_OCInitStruct. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC3E)); + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC3M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC3S)); + /* Select the Output Compare Mode */ + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3P)); + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8); + + if(TIMx == TIM1) + { + assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity)); + assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + + /* Reset the Output N Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NP)); + /* Set the Output N Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); + /* Reset the Output N State */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NE)); + + /* Set the Output N State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8); + /* Reset the Ouput Compare and Output Compare N IDLE State */ + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3)); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3N)); + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4); + /* Set the Output N Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Initializes the TIMx Channel4 according to the specified +* parameters in the TIM_OCInitStruct. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode)); + assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity)); + /* Disable the Channel 2: Reset the CC4E Bit */ + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC4E)); + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC4M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC4S)); + + /* Select the Output Compare Mode */ + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + + /* Reset the Output Polarity level */ + tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC4P)); + /* Set the Output Compare Polarity */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12); + + /* Set the Output State */ + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12); + + if(TIMx == TIM1) + { + assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState)); + /* Reset the Ouput Compare IDLE State */ + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS4)); + /* Set the Output Idle state */ + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); + } + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Fills each TIM_OCInitStruct member with its default value. +* @param TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure which will +* be initialized. +* @retval None +*/ +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + /* Set the default configuration */ + TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; + TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; + TIM_OCInitStruct->TIM_Pulse = 0x0000000; + TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; + TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; +} + +/** +* @brief Selects the TIM Output Compare Mode. +* @note This function disables the selected channel before changing the Output +* Compare Mode. +* User has to enable this channel using TIM_CCxCmd and TIM_CCxNCmd functions. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_Channel: specifies the TIM Channel +* This parameter can be one of the following values: +* @arg TIM_Channel_1: TIM Channel 1 +* @arg TIM_Channel_2: TIM Channel 2 +* @arg TIM_Channel_3: TIM Channel 3 +* @arg TIM_Channel_4: TIM Channel 4 +* @param TIM_OCMode: specifies the TIM Output Compare Mode. +* This parameter can be one of the following values: +* @arg TIM_OCMode_Timing +* @arg TIM_OCMode_Active +* @arg TIM_OCMode_Toggle +* @arg TIM_OCMode_PWM1 +* @arg TIM_OCMode_PWM2 +* @arg TIM_ForcedAction_Active +* @arg TIM_ForcedAction_InActive +* @retval None +*/ +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode) +{ + uint32_t tmp = 0; + uint16_t tmp1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCM(TIM_OCMode)); + + tmp = (uint32_t) TIMx; + tmp += CCMR_OFFSET; + + tmp1 = CCER_CCE_SET << (uint16_t)TIM_Channel; + + /* Disable the Channel: Reset the CCxE Bit */ + TIMx->CCER &= (uint16_t) ~tmp1; + + if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3)) + { + tmp += (TIM_Channel>>1); + + /* Reset the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC1M); + + /* Configure the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp |= TIM_OCMode; + } + else + { + tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1; + + /* Reset the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC2M); + + /* Configure the OCxM bits in the CCMRx register */ + *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8); + } +} + +/** +* @brief Sets the TIMx Capture Compare1 Register value +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param Compare1: specifies the Capture Compare1 register new value. +* @retval None +*/ +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint32_t Compare1) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + + /* Set the Capture Compare1 Register value */ + TIMx->CCR1 = Compare1; +} + +/** +* @brief Sets the TIMx Capture Compare2 Register value +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param Compare2: specifies the Capture Compare2 register new value. +* @retval None +*/ +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint32_t Compare2) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + + /* Set the Capture Compare2 Register value */ + TIMx->CCR2 = Compare2; +} + +/** +* @brief Sets the TIMx Capture Compare3 Register value +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. +* @param Compare3: specifies the Capture Compare3 register new value. +* @retval None +*/ +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint32_t Compare3) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Set the Capture Compare3 Register value */ + TIMx->CCR3 = Compare3; +} + +/** +* @brief Sets the TIMx Capture Compare4 Register value +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param Compare4: specifies the Capture Compare4 register new value. +* @retval None +*/ +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint32_t Compare4) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Set the Capture Compare4 Register value */ + TIMx->CCR4 = Compare4; +} + +/** +* @brief Forces the TIMx output 1 waveform to active or inactive level. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. +* This parameter can be one of the following values: +* @arg TIM_ForcedAction_Active: Force active level on OC1REF +* @arg TIM_ForcedAction_InActive: Force inactive level on OC1REF. +* @retval None +*/ +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC1M Bits */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1M); + /* Configure The Forced output Mode */ + tmpccmr1 |= TIM_ForcedAction; + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Forces the TIMx output 2 waveform to active or inactive level. +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. +* This parameter can be one of the following values: +* @arg TIM_ForcedAction_Active: Force active level on OC2REF +* @arg TIM_ForcedAction_InActive: Force inactive level on OC2REF. +* @retval None +*/ +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC2M Bits */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2M); + /* Configure The Forced output Mode */ + tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8); + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Forces the TIMx output 3 waveform to active or inactive level. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. +* This parameter can be one of the following values: +* @arg TIM_ForcedAction_Active: Force active level on OC3REF +* @arg TIM_ForcedAction_InActive: Force inactive level on OC3REF. +* @retval None +*/ +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC1M Bits */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3M); + /* Configure The Forced output Mode */ + tmpccmr2 |= TIM_ForcedAction; + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Forces the TIMx output 4 waveform to active or inactive level. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ForcedAction: specifies the forced Action to be set to the output waveform. +* This parameter can be one of the following values: +* @arg TIM_ForcedAction_Active: Force active level on OC4REF +* @arg TIM_ForcedAction_InActive: Force inactive level on OC4REF. +* @retval None +*/ +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC2M Bits */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4M); + /* Configure The Forced output Mode */ + tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8); + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Sets or Resets the TIM peripheral Capture Compare Preload Control bit. +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIMx peripheral + +* @param NewState: new state of the Capture Compare Preload Control bit +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the CCPC Bit */ + TIMx->CR2 |= TIM_CR2_CCPC; + } + else + { + /* Reset the CCPC Bit */ + TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC); + } +} + + +/** +* @brief Enables or disables the TIMx peripheral Preload register on CCR1. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 and 17 to select the TIM peripheral. + +* @param TIM_OCPreload: new state of the TIMx peripheral Preload register +* This parameter can be one of the following values: +* @arg TIM_OCPreload_Enable +* @arg TIM_OCPreload_Disable +* @retval None +*/ +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC1PE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1PE); + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr1 |= TIM_OCPreload; + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Enables or disables the TIMx peripheral Preload register on CCR2. +* @param TIMx: where x can be 1, 2, 3 and 15 to select the TIM peripheral. + +* @param TIM_OCPreload: new state of the TIMx peripheral Preload register +* This parameter can be one of the following values: +* @arg TIM_OCPreload_Enable +* @arg TIM_OCPreload_Disable +* @retval None +*/ +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC2PE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2PE); + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8); + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Enables or disables the TIMx peripheral Preload register on CCR3. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCPreload: new state of the TIMx peripheral Preload register +* This parameter can be one of the following values: +* @arg TIM_OCPreload_Enable +* @arg TIM_OCPreload_Disable +* @retval None +*/ +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC3PE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3PE); + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr2 |= TIM_OCPreload; + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Enables or disables the TIMx peripheral Preload register on CCR4. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCPreload: new state of the TIMx peripheral Preload register +* This parameter can be one of the following values: +* @arg TIM_OCPreload_Enable +* @arg TIM_OCPreload_Disable +* @retval None +*/ +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC4PE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4PE); + /* Enable or Disable the Output Compare Preload feature */ + tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8); + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Configures the TIMx Output Compare 1 Fast feature. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCFast_Enable: TIM output compare fast enable +* @arg TIM_OCFast_Disable: TIM output compare fast disable +* @retval None +*/ +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC1FE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1FE); + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr1 |= TIM_OCFast; + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Configures the TIMx Output Compare 2 Fast feature. +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCFast_Enable: TIM output compare fast enable +* @arg TIM_OCFast_Disable: TIM output compare fast disable +* @retval None +*/ +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC2FE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2FE); + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr1 |= (uint16_t)(TIM_OCFast << 8); + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Configures the TIMx Output Compare 3 Fast feature. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCFast_Enable: TIM output compare fast enable +* @arg TIM_OCFast_Disable: TIM output compare fast disable +* @retval None +*/ +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR2 register value */ + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC3FE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3FE); + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr2 |= TIM_OCFast; + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Configures the TIMx Output Compare 4 Fast feature. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCFast_Enable: TIM output compare fast enable +* @arg TIM_OCFast_Disable: TIM output compare fast disable +* @retval None +*/ +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast)); + + /* Get the TIMx CCMR2 register value */ + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC4FE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4FE); + /* Enable or Disable the Output Compare Fast Bit */ + tmpccmr2 |= (uint16_t)(TIM_OCFast << 8); + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Clears or safeguards the OCREF1 signal on an external event +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCClear_Enable: TIM Output clear enable +* @arg TIM_OCClear_Disable: TIM Output clear disable +* @retval None +*/ +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC1CE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1CE); + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr1 |= TIM_OCClear; + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Clears or safeguards the OCREF2 signal on an external event +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCClear_Enable: TIM Output clear enable +* @arg TIM_OCClear_Disable: TIM Output clear disable +* @retval None +*/ +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr1 = TIMx->CCMR1; + /* Reset the OC2CE Bit */ + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2CE); + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr1 |= (uint16_t)(TIM_OCClear << 8); + /* Write to TIMx CCMR1 register */ + TIMx->CCMR1 = tmpccmr1; +} + +/** +* @brief Clears or safeguards the OCREF3 signal on an external event +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCClear_Enable: TIM Output clear enable +* @arg TIM_OCClear_Disable: TIM Output clear disable +* @retval None +*/ +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC3CE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3CE); + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr2 |= TIM_OCClear; + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Clears or safeguards the OCREF4 signal on an external event +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* This parameter can be one of the following values: +* @arg TIM_OCClear_Enable: TIM Output clear enable +* @arg TIM_OCClear_Disable: TIM Output clear disable +* @retval None +*/ +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear)); + + tmpccmr2 = TIMx->CCMR2; + /* Reset the OC4CE Bit */ + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4CE); + /* Enable or Disable the Output Compare Clear Bit */ + tmpccmr2 |= (uint16_t)(TIM_OCClear << 8); + /* Write to TIMx CCMR2 register */ + TIMx->CCMR2 = tmpccmr2; +} + +/** +* @brief Configures the TIMx channel 1 polarity. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_OCPolarity: specifies the OC1 Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCPolarity_High: Output Compare active high +* @arg TIM_OCPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC1P Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P); + tmpccer |= TIM_OCPolarity; + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx Channel 1N polarity. +* @param TIMx: where x can be 1, 15, 16 or 17 to select the TIM peripheral. +* @param TIM_OCNPolarity: specifies the OC1N Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCNPolarity_High: Output Compare active high +* @arg TIM_OCNPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC1NP Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1NP); + tmpccer |= TIM_OCNPolarity; + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx channel 2 polarity. +* @param TIMx: where x can be 1, 2, 3 to select the TIM peripheral. + +* @param TIM_OCPolarity: specifies the OC2 Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCPolarity_High: Output Compare active high +* @arg TIM_OCPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC2P Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 4); + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx Channel 2N polarity. +* @param TIMx: where x can be 1 to select the TIM peripheral. +* @param TIM_OCNPolarity: specifies the OC2N Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCNPolarity_High: Output Compare active high +* @arg TIM_OCNPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC2NP Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2NP); + tmpccer |= (uint16_t)(TIM_OCNPolarity << 4); + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx channel 3 polarity. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCPolarity: specifies the OC3 Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCPolarity_High: Output Compare active high +* @arg TIM_OCPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC3P Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 8); + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx Channel 3N polarity. +* @param TIMx: where x can be 1 to select the TIM peripheral. +* @param TIM_OCNPolarity: specifies the OC3N Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCNPolarity_High: Output Compare active high +* @arg TIM_OCNPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST1_PERIPH(TIMx)); + assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC3NP Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3NP); + tmpccer |= (uint16_t)(TIM_OCNPolarity << 8); + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Configures the TIMx channel 4 polarity. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCPolarity: specifies the OC4 Polarity +* This parmeter can be one of the following values: +* @arg TIM_OCPolarity_High: Output Compare active high +* @arg TIM_OCPolarity_Low: Output Compare active low +* @retval None +*/ +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity)); + + tmpccer = TIMx->CCER; + /* Set or Reset the CC4P Bit */ + tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC4P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 12); + /* Write to TIMx CCER register */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Selects the OCReference Clear source. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_OCReferenceClear: specifies the OCReference Clear source. +* This parameter can be one of the following values: +* @arg TIM_OCReferenceClear_ETRF: The internal OCreference clear input is connected to ETRF. +* @arg TIM_OCReferenceClear_OCREFCLR: The internal OCreference clear input is connected to OCREF_CLR input. +* @retval None +*/ +void TIM_SelectOCREFClear(TIM_TypeDef* TIMx, uint16_t TIM_OCReferenceClear) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(TIM_OCREFERENCECECLEAR_SOURCE(TIM_OCReferenceClear)); + + /* Set the TIM_OCReferenceClear source */ + TIMx->SMCR |= TIM_OCReferenceClear; +} + +/** +* @brief Enables or disables the TIM Capture Compare Channel x. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_Channel: specifies the TIM Channel +* This parameter can be one of the following values: +* @arg TIM_Channel_1: TIM Channel 1 +* @arg TIM_Channel_2: TIM Channel 2 +* @arg TIM_Channel_3: TIM Channel 3 +* @arg TIM_Channel_4: TIM Channel 4 +* @param TIM_CCx: specifies the TIM Channel CCxE bit new state. +* This parameter can be: TIM_CCx_Enable or TIM_CCx_Disable. +* @retval None +*/ +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx) +{ + uint16_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_CCX(TIM_CCx)); + + tmp = CCER_CCE_SET << TIM_Channel; + + /* Reset the CCxE Bit */ + TIMx->CCER &= (uint16_t)~ tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel); +} + +/** +* @brief Enables or disables the TIM Capture Compare Channel xN. +* @param TIMx: where x can be 1, 15, 16 or 17 to select the TIM peripheral. +* @param TIM_Channel: specifies the TIM Channel +* This parmeter can be one of the following values: +* @arg TIM_Channel_1: TIM Channel 1 +* @arg TIM_Channel_2: TIM Channel 2 +* @arg TIM_Channel_3: TIM Channel 3 +* @param TIM_CCxN: specifies the TIM Channel CCxNE bit new state. +* This parameter can be: TIM_CCxN_Enable or TIM_CCxN_Disable. +* @retval None +*/ +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN) +{ + uint16_t tmp = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_TIM_COMPLEMENTARY_CHANNEL(TIM_Channel)); + assert_param(IS_TIM_CCXN(TIM_CCxN)); + + tmp = CCER_CCNE_SET << TIM_Channel; + + /* Reset the CCxNE Bit */ + TIMx->CCER &= (uint16_t) ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel); +} + +/** +* @brief Selects the TIM peripheral Commutation event. +* @param TIMx: where x can be 1, 15, 16 or 17 to select the TIMx peripheral +* @param NewState: new state of the Commutation event. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST2_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Set the COM Bit */ + TIMx->CR2 |= TIM_CR2_CCUS; + } + else + { + /* Reset the COM Bit */ + TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS); + } +} + +/** +* @} +*/ + +/** @defgroup TIM_Group4 Input Capture management functions +* @brief Input Capture management functions +* +@verbatim +=============================================================================== +##### Input Capture management functions ##### +=============================================================================== + +*** TIM Driver: how to use it in Input Capture Mode *** +=============================================================================== +[..] To use the Timer in Input Capture mode, the following steps are mandatory: +(#) Enable TIM clock using RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) +function. +(#) Configure the TIM pins by configuring the corresponding GPIO pins. +(#) Configure the Time base unit as described in the first part of this +driver, if needed, else the Timer will run with the default configuration: +(++) Autoreload value = 0xFFFF. +(++) Prescaler value = 0x0000. +(++) Counter mode = Up counting. +(++) Clock Division = TIM_CKD_DIV1. +(#) Fill the TIM_ICInitStruct with the desired parameters including: +(++) TIM Channel: TIM_Channel. +(++) TIM Input Capture polarity: TIM_ICPolarity. +(++) TIM Input Capture selection: TIM_ICSelection. +(++) TIM Input Capture Prescaler: TIM_ICPrescaler. +(++) TIM Input CApture filter value: TIM_ICFilter. +(#) Call TIM_ICInit(TIMx, &TIM_ICInitStruct) to configure the desired +channel with the corresponding configuration and to measure only +frequency or duty cycle of the input signal,or, Call +TIM_PWMIConfig(TIMx, &TIM_ICInitStruct) to configure the desired +channels with the corresponding configuration and to measure the +frequency and the duty cycle of the input signal. +(#) Enable the NVIC or the DMA to read the measured frequency. +(#) Enable the corresponding interrupt (or DMA request) to read +the Captured value, using the function TIM_ITConfig(TIMx, TIM_IT_CCx) +(or TIM_DMA_Cmd(TIMx, TIM_DMA_CCx)). +(#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter. +(#) Use TIM_GetCapturex(TIMx); to read the captured value. +[..] +(@) All other functions can be used separately to modify, if needed, +a specific feature of the Timer. + +@endverbatim +* @{ +*/ + +/** +* @brief Initializes the TIM peripheral according to the specified +* parameters in the TIM_ICInitStruct. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_CHANNEL(TIM_ICInitStruct->TIM_Channel)); + assert_param(IS_TIM_IC_SELECTION(TIM_ICInitStruct->TIM_ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICInitStruct->TIM_ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(TIM_ICInitStruct->TIM_ICFilter)); + assert_param(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity)); + + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + /* TI1 Configuration */ + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) + { + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + /* TI2 Configuration */ + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3) + { + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + /* TI3 Configuration */ + TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + /* TI4 Configuration */ + TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/** +* @brief Fills each TIM_ICInitStruct member with its default value. +* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will +* be initialized. +* @retval None +*/ +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + /* Set the default configuration */ + TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; + TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStruct->TIM_ICFilter = 0x00; +} + +/** +* @brief Configures the TIM peripheral according to the specified +* parameters in the TIM_ICInitStruct to measure an external PWM signal. +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure +* that contains the configuration information for the specified TIM +* peripheral. +* @retval None +*/ +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + uint16_t icoppositepolarity = TIM_ICPolarity_Rising; + uint16_t icoppositeselection = TIM_ICSelection_DirectTI; + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + /* Select the Opposite Input Polarity */ + if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) + { + icoppositepolarity = TIM_ICPolarity_Falling; + } + else + { + icoppositepolarity = TIM_ICPolarity_Rising; + } + /* Select the Opposite Input */ + if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) + { + icoppositeselection = TIM_ICSelection_IndirectTI; + } + else + { + icoppositeselection = TIM_ICSelection_DirectTI; + } + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + /* TI1 Configuration */ + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + /* TI2 Configuration */ + TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + /* TI2 Configuration */ + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + /* TI1 Configuration */ + TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + /* Set the Input Capture Prescaler value */ + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/** +* @brief Gets the TIMx Input Capture 1 value. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @retval Capture Compare 1 Register value. +*/ +uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + + /* Get the Capture 1 Register value */ + return TIMx->CCR1; +} + +/** +* @brief Gets the TIMx Input Capture 2 value. +* @param TIMx: where x can be 1, 2, 3 to select the TIM peripheral. +* @retval Capture Compare 2 Register value. +*/ +uint32_t TIM_GetCapture2(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + + /* Get the Capture 2 Register value */ + return TIMx->CCR2; +} + +/** +* @brief Gets the TIMx Input Capture 3 value. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @retval Capture Compare 3 Register value. +*/ +uint32_t TIM_GetCapture3(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Get the Capture 3 Register value */ + return TIMx->CCR3; +} + +/** +* @brief Gets the TIMx Input Capture 4 value. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @retval Capture Compare 4 Register value. +*/ +uint32_t TIM_GetCapture4(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + + /* Get the Capture 4 Register value */ + return TIMx->CCR4; +} + +/** +* @brief Sets the TIMx Input Capture 1 prescaler. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_ICPSC: specifies the Input Capture1 prescaler new value. +* This parameter can be one of the following values: +* @arg TIM_ICPSC_DIV1: no prescaler +* @arg TIM_ICPSC_DIV2: capture is done once every 2 events +* @arg TIM_ICPSC_DIV4: capture is done once every 4 events +* @arg TIM_ICPSC_DIV8: capture is done once every 8 events +* @retval None +*/ +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC1PSC Bits */ + TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC1PSC); + /* Set the IC1PSC value */ + TIMx->CCMR1 |= TIM_ICPSC; +} + +/** +* @brief Sets the TIMx Input Capture 2 prescaler. +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_ICPSC: specifies the Input Capture2 prescaler new value. +* This parameter can be one of the following values: +* @arg TIM_ICPSC_DIV1: no prescaler +* @arg TIM_ICPSC_DIV2: capture is done once every 2 events +* @arg TIM_ICPSC_DIV4: capture is done once every 4 events +* @arg TIM_ICPSC_DIV8: capture is done once every 8 events +* @retval None +*/ +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC2PSC Bits */ + TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC2PSC); + /* Set the IC2PSC value */ + TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8); +} + +/** +* @brief Sets the TIMx Input Capture 3 prescaler. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ICPSC: specifies the Input Capture3 prescaler new value. +* This parameter can be one of the following values: +* @arg TIM_ICPSC_DIV1: no prescaler +* @arg TIM_ICPSC_DIV2: capture is done once every 2 events +* @arg TIM_ICPSC_DIV4: capture is done once every 4 events +* @arg TIM_ICPSC_DIV8: capture is done once every 8 events +* @retval None +*/ +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC3PSC Bits */ + TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC3PSC); + /* Set the IC3PSC value */ + TIMx->CCMR2 |= TIM_ICPSC; +} + +/** +* @brief Sets the TIMx Input Capture 4 prescaler. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ICPSC: specifies the Input Capture4 prescaler new value. +* This parameter can be one of the following values: +* @arg TIM_ICPSC_DIV1: no prescaler +* @arg TIM_ICPSC_DIV2: capture is done once every 2 events +* @arg TIM_ICPSC_DIV4: capture is done once every 4 events +* @arg TIM_ICPSC_DIV8: capture is done once every 8 events +* @retval None +*/ +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC)); + + /* Reset the IC4PSC Bits */ + TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC4PSC); + /* Set the IC4PSC value */ + TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8); +} + +/** +* @} +*/ + +/** @defgroup TIM_Group5 Interrupts DMA and flags management functions +* @brief Interrupts, DMA and flags management functions +* +@verbatim +=============================================================================== +##### Interrupts, DMA and flags management functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Enables or disables the specified TIM interrupts. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the TIMx peripheral. + + + +* @param TIM_IT: specifies the TIM interrupts sources to be enabled or disabled. +* This parameter can be any combination of the following values: +* @arg TIM_IT_Update: TIM update Interrupt source +* @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source +* @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source +* @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source +* @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source +* @arg TIM_IT_COM: TIM Commutation Interrupt source +* @arg TIM_IT_Trigger: TIM Trigger Interrupt source +* @arg TIM_IT_Break: TIM Break Interrupt source +* +* @note TIM6 and TIM7 can only generate an update interrupt. +* @note TIM15 can have only TIM_IT_Update, TIM_IT_CC1,TIM_IT_CC2 or TIM_IT_Trigger. +* @note TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1. +* @note TIM_IT_Break is used only with TIM1 and TIM15. +* @note TIM_IT_COM is used only with TIM1, TIM15, TIM16 and TIM17. +* +* @param NewState: new state of the TIM interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_IT(TIM_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the Interrupt sources */ + TIMx->DIER |= TIM_IT; + } + else + { + /* Disable the Interrupt sources */ + TIMx->DIER &= (uint16_t)~TIM_IT; + } +} + +/** +* @brief Configures the TIMx event to be generate by software. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the +* TIM peripheral. + + + +* @param TIM_EventSource: specifies the event source. +* This parameter can be one or more of the following values: +* @arg TIM_EventSource_Update: Timer update Event source +* @arg TIM_EventSource_CC1: Timer Capture Compare 1 Event source +* @arg TIM_EventSource_CC2: Timer Capture Compare 2 Event source +* @arg TIM_EventSource_CC3: Timer Capture Compare 3 Event source +* @arg TIM_EventSource_CC4: Timer Capture Compare 4 Event source +* @arg TIM_EventSource_COM: Timer COM event source +* @arg TIM_EventSource_Trigger: Timer Trigger Event source +* @arg TIM_EventSource_Break: Timer Break event source +* +* @note TIM6 and TIM7 can only generate an update event. +* @note TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1. +* +* @retval None +*/ +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource)); + /* Set the event sources */ + TIMx->EGR = TIM_EventSource; +} + +/** +* @brief Checks whether the specified TIM flag is set or not. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the TIM peripheral. + + + +* @param TIM_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg TIM_FLAG_Update: TIM update Flag +* @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag +* @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag +* @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag +* @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag +* @arg TIM_FLAG_COM: TIM Commutation Flag +* @arg TIM_FLAG_Trigger: TIM Trigger Flag +* @arg TIM_FLAG_Break: TIM Break Flag +* @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag +* @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag +* @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag +* @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag +* +* @note TIM6 and TIM7 can have only one update flag. +* @note TIM15 can have only TIM_FLAG_Update, TIM_FLAG_CC1, TIM_FLAG_CC2 or TIM_FLAG_Trigger. +* @note TIM14, TIM16 and TIM17 can have TIM_FLAG_Update or TIM_FLAG_CC1. +* @note TIM_FLAG_Break is used only with TIM1 and TIM15. +* @note TIM_FLAG_COM is used only with TIM1 TIM15, TIM16 and TIM17. +* +* @retval The new state of TIM_FLAG (SET or RESET). +*/ +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + ITStatus bitstatus = RESET; + + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_GET_FLAG(TIM_FLAG)); + + if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the TIMx's pending flags. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the TIM peripheral. + + + +* @param TIM_FLAG: specifies the flag bit to clear. +* This parameter can be any combination of the following values: +* @arg TIM_FLAG_Update: TIM update Flag +* @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag +* @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag +* @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag +* @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag +* @arg TIM_FLAG_COM: TIM Commutation Flag +* @arg TIM_FLAG_Trigger: TIM Trigger Flag +* @arg TIM_FLAG_Break: TIM Break Flag +* @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag +* @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag +* @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag +* @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag +* +* @note TIM6 and TIM7 can have only one update flag. +* @note TIM15 can have only TIM_FLAG_Update, TIM_FLAG_CC1,TIM_FLAG_CC2 or +* TIM_FLAG_Trigger. +* @note TIM14, TIM16 and TIM17 can have TIM_FLAG_Update or TIM_FLAG_CC1. +* @note TIM_FLAG_Break is used only with TIM1 and TIM15. +* @note TIM_FLAG_COM is used only with TIM1, TIM15, TIM16 and TIM17. +* +* @retval None +*/ +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG)); + + /* Clear the flags */ + TIMx->SR = (uint16_t)~TIM_FLAG; +} + +/** +* @brief Checks whether the TIM interrupt has occurred or not. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the TIM peripheral. + + + +* @param TIM_IT: specifies the TIM interrupt source to check. +* This parameter can be one of the following values: +* @arg TIM_IT_Update: TIM update Interrupt source +* @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source +* @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source +* @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source +* @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source +* @arg TIM_IT_COM: TIM Commutation Interrupt source +* @arg TIM_IT_Trigger: TIM Trigger Interrupt source +* @arg TIM_IT_Break: TIM Break Interrupt source +* +* @note TIM6 and TIM7 can generate only an update interrupt. +* @note TIM15 can have only TIM_IT_Update, TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. +* @note TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1. +* @note TIM_IT_Break is used only with TIM1 and TIM15. +* @note TIM_IT_COM is used only with TIM1, TIM15, TIM16 and TIM17. +* +* @retval The new state of the TIM_IT(SET or RESET). +*/ +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itstatus = 0x0, itenable = 0x0; + + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_GET_IT(TIM_IT)); + + itstatus = TIMx->SR & TIM_IT; + + itenable = TIMx->DIER & TIM_IT; + if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the TIMx's interrupt pending bits. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 or 17 to select the TIM peripheral. + + + +* @param TIM_IT: specifies the pending bit to clear. +* This parameter can be any combination of the following values: +* @arg TIM_IT_Update: TIM1 update Interrupt source +* @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source +* @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source +* @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source +* @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source +* @arg TIM_IT_COM: TIM Commutation Interrupt source +* @arg TIM_IT_Trigger: TIM Trigger Interrupt source +* @arg TIM_IT_Break: TIM Break Interrupt source +* +* @note TIM6 and TIM7 can generate only an update interrupt. +* @note TIM15 can have only TIM_IT_Update, TIM_IT_CC1, TIM_IT_CC2 or TIM_IT_Trigger. +* @note TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1. +* @note TIM_IT_Break is used only with TIM1 and TIM15. +* @note TIM_IT_COM is used only with TIM1, TIM15, TIM16 and TIM17. +* +* @retval None +*/ +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + /* Check the parameters */ + assert_param(IS_TIM_ALL_PERIPH(TIMx)); + assert_param(IS_TIM_IT(TIM_IT)); + + /* Clear the IT pending Bit */ + TIMx->SR = (uint16_t)~TIM_IT; +} + +/** +* @brief Configures the TIMx's DMA interface. +* @param TIMx: where x can be 1, 2, 3, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_DMABase: DMA Base address. +* This parameter can be one of the following values: +* @arg TIM_DMABase_CR1 +* @arg TIM_DMABase_CR2 +* @arg TIM_DMABase_SMCR +* @arg TIM_DMABase_DIER +* @arg TIM_DMABase_SR +* @arg TIM_DMABase_EGR +* @arg TIM_DMABase_CCMR1 +* @arg TIM_DMABase_CCMR2 +* @arg TIM_DMABase_CCER +* @arg TIM_DMABase_CNT +* @arg TIM_DMABase_PSC +* @arg TIM_DMABase_ARR +* @arg TIM_DMABase_CCR1 +* @arg TIM_DMABase_CCR2 +* @arg TIM_DMABase_CCR3 +* @arg TIM_DMABase_CCR4 +* @arg TIM_DMABase_DCR +* @arg TIM_DMABase_OR +* @param TIM_DMABurstLength: DMA Burst length. This parameter can be one value +* between: TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers. +* @retval None +*/ +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST4_PERIPH(TIMx)); + assert_param(IS_TIM_DMA_BASE(TIM_DMABase)); + assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength)); + /* Set the DMA Base and the DMA Burst Length */ + TIMx->DCR = TIM_DMABase | TIM_DMABurstLength; +} + +/** +* @brief Enables or disables the TIMx's DMA Requests. +* @param TIMx: where x can be 1, 2, 3, 6, 7, 15, 16 or 17 to select the TIM peripheral. + + + +* @param TIM_DMASource: specifies the DMA Request sources. +* This parameter can be any combination of the following values: +* @arg TIM_DMA_Update: TIM update Interrupt source +* @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source +* @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source +* @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source +* @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source +* @arg TIM_DMA_COM: TIM Commutation DMA source +* @arg TIM_DMA_Trigger: TIM Trigger DMA source +* @param NewState: new state of the DMA Request sources. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST10_PERIPH(TIMx)); + assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the DMA sources */ + TIMx->DIER |= TIM_DMASource; + } + else + { + /* Disable the DMA sources */ + TIMx->DIER &= (uint16_t)~TIM_DMASource; + } +} + +/** +* @brief Selects the TIMx peripheral Capture Compare DMA source. +* @param TIMx: where x can be 1, 2, 3, 15, 16 or 17 to select the TIM peripheral. + +* @param NewState: new state of the Capture Compare DMA source +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST5_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the CCDS Bit */ + TIMx->CR2 |= TIM_CR2_CCDS; + } + else + { + /* Reset the CCDS Bit */ + TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS); + } +} + +/** +* @} +*/ + +/** @defgroup TIM_Group6 Clocks management functions +* @brief Clocks management functions +* +@verbatim +=============================================================================== +##### Clocks management functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Configures the TIMx internal Clock +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @retval None +*/ +void TIM_InternalClockConfig(TIM_TypeDef* TIMx) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + /* Disable slave mode to clock the prescaler directly with the internal clock */ + TIMx->SMCR &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); +} + +/** +* @brief Configures the TIMx Internal Trigger as External Clock +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @param TIM_ITRSource: Trigger source. +* This parameter can be one of the following values: +* @arg TIM_TS_ITR0: Internal Trigger 0 +* @arg TIM_TS_ITR1: Internal Trigger 1 +* @arg TIM_TS_ITR2: Internal Trigger 2 +* @arg TIM_TS_ITR3: Internal Trigger 3 +* @retval None +*/ +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource)); + /* Select the Internal Trigger */ + TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource); + /* Select the External clock mode1 */ + TIMx->SMCR |= TIM_SlaveMode_External1; +} + +/** +* @brief Configures the TIMx Trigger as External Clock +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @param TIM_TIxExternalCLKSource: Trigger source. +* This parameter can be one of the following values: +* @arg TIM_TIxExternalCLK1Source_TI1ED: TI1 Edge Detector +* @arg TIM_TIxExternalCLK1Source_TI1: Filtered Timer Input 1 +* @arg TIM_TIxExternalCLK1Source_TI2: Filtered Timer Input 2 +* @param TIM_ICPolarity: specifies the TIx Polarity. +* This parameter can be one of the following values: +* @arg TIM_ICPolarity_Rising +* @arg TIM_ICPolarity_Falling +* @param ICFilter: specifies the filter value. +* This parameter must be a value between 0x0 and 0xF. +* @retval None +*/ +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity)); + assert_param(IS_TIM_IC_FILTER(ICFilter)); + + /* Configure the Timer Input Clock Source */ + if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) + { + TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + else + { + TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + /* Select the Trigger source */ + TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); + /* Select the External clock mode1 */ + TIMx->SMCR |= TIM_SlaveMode_External1; +} + +/** +* @brief Configures the External clock Mode1 +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* @param TIM_ExtTRGPolarity: The external Trigger Polarity. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* @param ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x00 and 0x0F +* @retval None +*/ +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + + /* Configure the ETR Clock source */ + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the SMS Bits */ + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); + /* Select the External clock mode1 */ + tmpsmcr |= TIM_SlaveMode_External1; + /* Select the Trigger selection : ETRF */ + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS)); + tmpsmcr |= TIM_TS_ETRF; + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** +* @brief Configures the External clock Mode2 +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* @param TIM_ExtTRGPolarity: The external Trigger Polarity. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* @param ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x00 and 0x0F +* @retval None +*/ +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + + /* Configure the ETR Clock source */ + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + /* Enable the External clock mode2 */ + TIMx->SMCR |= TIM_SMCR_ECE; +} + +/** +* @} +*/ + +/** @defgroup TIM_Group7 Synchronization management functions +* @brief Synchronization management functions +* +@verbatim +=============================================================================== +##### Synchronization management functions ##### +=============================================================================== +*** TIM Driver: how to use it in synchronization Mode *** +=============================================================================== +[..] Case of two/several Timers +(#) Configure the Master Timers using the following functions: +(++) void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, +uint16_t TIM_TRGOSource). +(++) void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, +uint16_t TIM_MasterSlaveMode); +(#) Configure the Slave Timers using the following functions: +(++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, +uint16_t TIM_InputTriggerSource); +(++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); +[..] Case of Timers and external trigger(ETR pin) +(#) Configure the Etrenal trigger using this function: +(++) void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, +uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); +(#) Configure the Slave Timers using the following functions: +(++) void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, +uint16_t TIM_InputTriggerSource); +(++) void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); + +@endverbatim +* @{ +*/ +/** +* @brief Selects the Input Trigger source +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_InputTriggerSource: The Input Trigger source. +* This parameter can be one of the following values: +* @arg TIM_TS_ITR0: Internal Trigger 0 +* @arg TIM_TS_ITR1: Internal Trigger 1 +* @arg TIM_TS_ITR2: Internal Trigger 2 +* @arg TIM_TS_ITR3: Internal Trigger 3 +* @arg TIM_TS_TI1F_ED: TI1 Edge Detector +* @arg TIM_TS_TI1FP1: Filtered Timer Input 1 +* @arg TIM_TS_TI2FP2: Filtered Timer Input 2 +* @arg TIM_TS_ETRF: External Trigger input +* @retval None +*/ +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource)); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the TS Bits */ + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS)); + /* Set the Input Trigger source */ + tmpsmcr |= TIM_InputTriggerSource; + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** +* @brief Selects the TIMx Trigger Output Mode. +* @param TIMx: where x can be 1, 2, 3, 6, 7, or 15 to select the TIM peripheral. + + + +* @param TIM_TRGOSource: specifies the Trigger Output source. +* This parameter can be one of the following values: +* +* - For all TIMx +* @arg TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is used as the trigger output (TRGO). +* @arg TIM_TRGOSource_Enable: The Counter Enable CEN is used as the trigger output (TRGO). +* @arg TIM_TRGOSource_Update: The update event is selected as the trigger output (TRGO). +* +* - For all TIMx except TIM6 and TIM7 +* @arg TIM_TRGOSource_OC1: The trigger output sends a positive pulse when the CC1IF flag +* is to be set, as soon as a capture or compare match occurs (TRGO). +* @arg TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output (TRGO). +* @arg TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output (TRGO). +* @arg TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output (TRGO). +* @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO). +* +* @retval None +*/ +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST9_PERIPH(TIMx)); + assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource)); + + /* Reset the MMS Bits */ + TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_MMS); + /* Select the TRGO source */ + TIMx->CR2 |= TIM_TRGOSource; +} + +/** +* @brief Selects the TIMx Slave Mode. +* @param TIMx: where x can be 1, 2, 3 or 15 to select the TIM peripheral. + +* @param TIM_SlaveMode: specifies the Timer Slave Mode. +* This parameter can be one of the following values: +* @arg TIM_SlaveMode_Reset: Rising edge of the selected trigger signal (TRGI) re-initializes +* the counter and triggers an update of the registers. +* @arg TIM_SlaveMode_Gated: The counter clock is enabled when the trigger signal (TRGI) is high. +* @arg TIM_SlaveMode_Trigger: The counter starts at a rising edge of the trigger TRGI. +* @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter. +* @retval None +*/ +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode)); + + /* Reset the SMS Bits */ + TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_SMS); + /* Select the Slave Mode */ + TIMx->SMCR |= TIM_SlaveMode; +} + +/** +* @brief Sets or Resets the TIMx Master/Slave Mode. +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @param TIM_MasterSlaveMode: specifies the Timer Master Slave Mode. +* This parameter can be one of the following values: +* @arg TIM_MasterSlaveMode_Enable: synchronization between the current timer +* and its slaves (through TRGO). +* @arg TIM_MasterSlaveMode_Disable: No action +* @retval None +*/ +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST6_PERIPH(TIMx)); + assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode)); + + /* Reset the MSM Bit */ + TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_MSM); + + /* Set or Reset the MSM Bit */ + TIMx->SMCR |= TIM_MasterSlaveMode; +} + +/** +* @brief Configures the TIMx External Trigger (ETR). +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* @param TIM_ExtTRGPolarity: The external Trigger Polarity. +* This parameter can be one of the following values: +* @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* @param ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x00 and 0x0F +* @retval None +*/ +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler)); + assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity)); + assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter)); + + tmpsmcr = TIMx->SMCR; + /* Reset the ETR Bits */ + tmpsmcr &= SMCR_ETR_MASK; + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8))); + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** +* @} +*/ + +/** @defgroup TIM_Group8 Specific interface management functions +* @brief Specific interface management functions +* +@verbatim +=============================================================================== +##### Specific interface management functions ##### +=============================================================================== + +@endverbatim +* @{ +*/ + +/** +* @brief Configures the TIMx Encoder Interface. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_EncoderMode: specifies the TIMx Encoder Mode. +* This parameter can be one of the following values: +* @arg TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level. +* @arg TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge depending on TI1FP1 level. +* @arg TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and TI2FP2 edges depending +* on the level of the other input. +* @param TIM_IC1Polarity: specifies the IC1 Polarity +* This parmeter can be one of the following values: +* @arg TIM_ICPolarity_Falling: IC Falling edge. +* @arg TIM_ICPolarity_Rising: IC Rising edge. +* @param TIM_IC2Polarity: specifies the IC2 Polarity +* This parmeter can be one of the following values: +* @arg TIM_ICPolarity_Falling: IC Falling edge. +* @arg TIM_ICPolarity_Rising: IC Rising edge. +* @retval None +*/ +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) +{ + uint16_t tmpsmcr = 0; + uint16_t tmpccmr1 = 0; + uint16_t tmpccer = 0; + + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode)); + assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity)); + assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity)); + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = TIMx->CCMR1; + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + /* Set the encoder Mode */ + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS)); + tmpsmcr |= TIM_EncoderMode; + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S))); + tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP)) & (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP)); + tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4)); + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmr1; + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** +* @brief Enables or disables the TIMx's Hall sensor interface. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param NewState: new state of the TIMx Hall sensor interface. +* This parameter can be: ENABLE or DISABLE. +* @retval None +*/ +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_TIM_LIST3_PERIPH(TIMx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Set the TI1S Bit */ + TIMx->CR2 |= TIM_CR2_TI1S; + } + else + { + /* Reset the TI1S Bit */ + TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S); + } +} + + +/** +* @} +*/ + +/** +* @brief Configure the TI1 as Input. +* @param TIMx: where x can be 1, 2, 3, 14, 15, 16 or 17 to select the TIM peripheral. + +* @param TIM_ICPolarity: The Input Polarity. +* This parameter can be one of the following values: +* @arg TIM_ICPolarity_Rising +* @arg TIM_ICPolarity_Falling +* @param TIM_ICSelection: specifies the input to be used. +* This parameter can be one of the following values: +* @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1. +* @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2. +* @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC. +* @param TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* @retval None +*/ +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0; + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E); + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + /* Select the Input and set the filter */ + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC1F))); + tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E); + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** +* @brief Configure the TI2 as Input. +* @param TIMx: where x can be 1, 2, 3, or 15 to select the TIM peripheral. + +* @param TIM_ICPolarity: The Input Polarity. +* This parameter can be one of the following values: +* @arg TIM_ICPolarity_Rising +* @arg TIM_ICPolarity_Falling +* @param TIM_ICSelection: specifies the input to be used. +* This parameter can be one of the following values: +* @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2. +* @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1. +* @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC. +* @param TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* @retval None +*/ +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC2E); + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 4); + /* Select the Input and set the filter */ + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC2S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC2F))); + tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); + tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8); + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP)); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E); + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** +* @brief Configure the TI3 as Input. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ICPolarity: The Input Polarity. +* This parameter can be one of the following values: +* @arg TIM_ICPolarity_Rising +* @arg TIM_ICPolarity_Falling +* @param TIM_ICSelection: specifies the input to be used. +* This parameter can be one of the following values: +* @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3. +* @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4. +* @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC. +* @param TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* @retval None +*/ +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + /* Disable the Channel 3: Reset the CC3E Bit */ + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC3E); + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 8); + /* Select the Input and set the filter */ + tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR2_CC3S)) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC3F))); + tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC3NP)); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E); + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** +* @brief Configure the TI4 as Input. +* @param TIMx: where x can be 1, 2 or 3 to select the TIM peripheral. + +* @param TIM_ICPolarity: The Input Polarity. +* This parameter can be one of the following values: +* @arg TIM_ICPolarity_Rising +* @arg TIM_ICPolarity_Falling +* @param TIM_ICSelection: specifies the input to be used. +* This parameter can be one of the following values: +* @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4. +* @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3. +* @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC. +* @param TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* @retval None +*/ +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC4E); + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 12); + /* Select the Input and set the filter */ + tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CCMR2_CC4S) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC4F))); + tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8); + tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC4P )); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E); + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_uart.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_uart.c new file mode 100644 index 0000000000..6b85f4b75e --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_uart.c @@ -0,0 +1,455 @@ +/** +****************************************************************************** +* @file HAL_uart.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the UART firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_uart.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup UART +* @brief UART driver modules +* @{ +*/ + +/** @defgroup UART_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup UART_Private_Defines +* @{ +*/ + + + +/* UART UE Mask */ +#define GCR_UE_Set ((uint16_t)0x0001) /* UART Enable Mask */ +#define GCR_UE_Reset ((uint16_t)0xFFFE) /* UART Disable Mask */ + +#define CCR_CLEAR_Mask ((uint32_t)0xFFFFFF30) /* UART CCR Mask */ +#define GCR_CLEAR_Mask ((uint32_t)0xFFFFFFE0) /* UART GCR Mask */ +/** +* @} +*/ + +/** @defgroup UART_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup UART_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup UART_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup UART_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the UARTx peripheral registers to their +* default reset values. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @retval : None +*/ +void UART_DeInit(UART_TypeDef* UARTx) +{ + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + switch (*(uint32_t*)&UARTx) + { + case UART1_BASE: + RCC_APB2PeriphResetCmd(RCC_APB2Periph_UART1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_UART1, DISABLE); + break; + case UART2_BASE: + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART2, DISABLE); + break; + default: + break; + } +} + + +/** +* @brief Initializes the UARTx peripheral according to the specified +* parameters in the UART_InitStruct . +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param UART_InitStruct: pointer to a UART_InitTypeDef structure +* that contains the configuration information for the +* specified UART peripheral. +* @retval : None +*/ +void UART_Init(UART_TypeDef* UARTx, UART_InitTypeDef* UART_InitStruct) +{ + uint32_t tmpreg = 0x00, apbclock = 0x00; + uint32_t tmpreg1 = 0x00; + uint32_t UARTxbase = 0; + RCC_ClocksTypeDef RCC_ClocksStatus; + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_BAUDRATE(UART_InitStruct->UART_BaudRate)); + assert_param(IS_UART_WORD_LENGTH(UART_InitStruct->UART_WordLength)); + assert_param(IS_UART_STOPBITS(UART_InitStruct->UART_StopBits)); + assert_param(IS_UART_PARITY(UART_InitStruct->UART_Parity)); + assert_param(IS_UART_MODE(UART_InitStruct->UART_Mode)); + assert_param(IS_UART_HARDWARE_FLOW_CONTROL(UART_InitStruct->UART_HardwareFlowControl)); + + UARTxbase = (*(uint32_t*)&UARTx); + /*---------------------------- UART CCR Configuration -----------------------*/ + /* get UART CCR values */ + tmpreg = UARTx->CCR; + /* Clear spb,psel,pen bits */ + tmpreg &= CCR_CLEAR_Mask; + /* Configure the UART Word Length,the UART Stop Bits,Parity ------------*/ + /* Set the char bits according to UART_WordLength value */ + /* Set spb bit according to UART_StopBits value */ + /* Set PEN bit according to UART_Parity value */ + tmpreg |= (uint32_t)UART_InitStruct->UART_WordLength |(uint32_t)UART_InitStruct->UART_StopBits |UART_InitStruct->UART_Parity; + + /* Write to UART CCR */ + UARTx->CCR = tmpreg; + + /*---------------------------- UART GCR Configuration -----------------------*/ + /* get UART GCR values */ + tmpreg = UARTx->GCR; + /* Clear TXEN and RXEN ,autoflowen, mode ,uarten bits */ + tmpreg &= GCR_CLEAR_Mask; + /* Set autorlowen bit according to UART_HardwareFlowControl value */ + /* Set rxen,txen bits according to UART_Mode value */ + tmpreg |= UART_InitStruct->UART_HardwareFlowControl | UART_InitStruct->UART_Mode ; + /* Write to UART GCR */ + UARTx->GCR = tmpreg; + /*---------------------------- UART BRR Configuration -----------------------*/ + /* Configure the UART Baud Rate -------------------------------------------*/ + RCC_GetClocksFreq(&RCC_ClocksStatus); + if (UARTxbase == UART1_BASE) + { + apbclock = RCC_ClocksStatus.PCLK2_Frequency; + } + else + { + apbclock = RCC_ClocksStatus.PCLK1_Frequency; + } + /* Determine the UART_baud*/ + tmpreg = (apbclock /UART_InitStruct->UART_BaudRate)/16; + tmpreg1 = (apbclock /UART_InitStruct->UART_BaudRate)%16; + UARTx->BRR = tmpreg; + UARTx->FRA = tmpreg1; +} + +/** +* @brief Fills each UART_InitStruct member with its default value. +* @param UART_InitStruct: pointer to a UART_InitTypeDef structure +* which will be initialized. +* @retval : None +*/ +void UART_StructInit(UART_InitTypeDef* UART_InitStruct) +{ + /* UART_InitStruct members default value */ + UART_InitStruct->UART_BaudRate = 9600; + UART_InitStruct->UART_WordLength = UART_WordLength_8b; + UART_InitStruct->UART_StopBits = UART_StopBits_1; + UART_InitStruct->UART_Parity = UART_Parity_No ; + UART_InitStruct->UART_Mode = UART_Mode_Rx | UART_Mode_Tx; + UART_InitStruct->UART_HardwareFlowControl = UART_HardwareFlowControl_None; +} + + +/** +* @brief Enables or disables the specified UART peripheral. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param NewState: new state of the UARTx peripheral. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void UART_Cmd(UART_TypeDef* UARTx, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the selected UART by setting the uarten bit in the GCR register */ + UARTx->GCR |= GCR_UE_Set; + } + else + { + /* Disable the selected UART by clearing the uarten bit in the GCR register */ + UARTx->GCR &= GCR_UE_Reset; + } +} + +/** +* @brief Enables or disables the specified UART interrupts. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param UART_IT: specifies the UART interrupt sources to be +* enabled or disabled. +* This parameter can be one of the following values: +* +* @arg UART_IT_ERR: Error interrupt(Frame error,) +* @arg UART_IT_PE: Parity Error interrupt +* @arg UART_OVER_ERR: overrun Error interrupt +* @arg UART_TIMEOUT_ERR: timeout Error interrupt +* @arg UART_IT_RXIEN: Receive Data register interrupt +* @arg UART_IT_TXIEN: Tansmit Data Register empty interrupt +* @param NewState: new state of the specified UARTx interrupts. +* This parameter can be: ENABLE or DISABLE. +* @retval : None +*/ +void UART_ITConfig(UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_CONFIG_IT(UART_IT)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + /* Enable the UART_IT interrupt */ + UARTx->IER |= UART_IT; + } + else + { + /* Disable the UART_IT interrupt */ + UARTx->IER &= ~ UART_IT; + } +} + +/** +* @brief Enables or disables the UART’s DMA interface. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3 . +* @param UART_DMAReq: specifies the DMA request. +* This parameter can be any combination of the following values: +* @arg UART_DMAReq_EN: UART DMA transmit request +* +* @param NewState: new state of the DMA Request sources. +* This parameter can be: ENABLE or DISABLE. +* @note The DMA mode is not available for UART5. +* @retval : None +*/ +void UART_DMACmd(UART_TypeDef* UARTx, uint16_t UART_DMAReq, FunctionalState NewState) +{ + /* Check the parameters */ + assert_param(IS_UART_1234_PERIPH(UARTx)); + assert_param(IS_UART_DMAREQ(UART_DMAReq)); + assert_param(IS_FUNCTIONAL_STATE(NewState)); + if (NewState != DISABLE) + { + /* Enable the DMA transfer */ + UARTx->GCR |= UART_DMAReq; + } + else + { + /* Disable the DMA transfer */ + UARTx->GCR &= ~UART_DMAReq; + } +} + + +/** +* @brief Transmits single data through the UARTx peripheral. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param Data: the data to transmit. +* @retval : None +*/ +void UART_SendData(UART_TypeDef* UARTx, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_DATA(Data)); + + /* Transmit Data */ + UARTx->TDR = (Data & (uint16_t)0x00FF); +} + +/** +* @brief Returns the most recent received data by the UARTx peripheral. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @retval : The received data. +*/ +uint16_t UART_ReceiveData(UART_TypeDef* UARTx) +{ + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + + /* Receive Data */ + return (uint16_t)(UARTx->RDR & (uint16_t)0x00FF); +} + + +/** +* @brief Checks whether the specified UART flag is set or not. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param UART_FLAG: specifies the flag to check. +* This parameter can be one of the following values: +* @arg UART_FLAG_TXEMPTY:Transmit data register empty flag +* @arg UART_FLAG_TXFULL:Transmit data buffer full +* @arg UART_FLAG_RXAVL:RX Buffer has a byte flag +* @arg UART_FLAG_OVER:OverRun Error flag +* @arg UART_FLAG_TXEPT: tx and shifter are emptys flag +* @retval : The new state of UART_FLAG (SET or RESET). +*/ +FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx, uint16_t UART_FLAG) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_FLAG(UART_FLAG)); + if ((UARTx->CSR & UART_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the UARTx's pending flags. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3, UART4 or UART5. +* @param UART_FLAG: specifies the flag to clear. +* This parameter can be any combination of the following values: +* @arg UART_FLAG_TXEMPTY:Transmit data register empty flag +* @arg UART_FLAG_TXFULL:Transmit data buffer full +* @arg UART_FLAG_RXAVL:RX Buffer has a byte flag +* @arg UART_FLAG_OVER:OverRun Error flag +* @arg UART_FLAG_TXEPT: tx and shifter are emptys flag +* @retval : None +*/ +void UART_ClearFlag(UART_TypeDef* UARTx, uint16_t UART_FLAG) +{ + +} + +/** +* @brief Checks whether the specified UART interrupt has occurred or not. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3. +* @param UART_IT: specifies the UART interrupt source to check. +* This parameter can be one of the following values: +* @arg UART_IT_ERR: Error interrupt(Frame error,) +* @arg UART_IT_PE: Parity Error interrupt +* @arg UART_OVER_ERR: overrun Error interrupt +* @arg UART_TIMEOUT_ERR: timeout Error interrupt +* @arg UART_IT_RXIEN: Receive Data register interrupt +* @arg UART_IT_TXIEN: Tansmit Data Register empty interrupt +* @retval : The new state of UART_IT (SET or RESET). +*/ +ITStatus UART_GetITStatus(UART_TypeDef* UARTx, uint16_t UART_IT) +{ + FlagStatus bitstatus = RESET; + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_FLAG(UART_FLAG)); + assert_param(IS_UART_PERIPH_FLAG(UARTx, UART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */ + if ((UARTx->ISR & UART_IT) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/** +* @brief Clears the UARTx’s interrupt pending bits. +* @param UARTx: Select the UART or the UART peripheral. +* This parameter can be one of the following values: +* UART1, UART2, UART3, UART4 or UART5. +* @param UART_IT: specifies the interrupt pending bit to clear. +* This parameter can be one of the following values: +* @arg UART_IT_ERR: Error interrupt(Frame error,) +* @arg UART_IT_PE: Parity Error interrupt +* @arg UART_OVER_ERR: overrun Error interrupt +* @arg UART_TIMEOUT_ERR: timeout Error interrupt +* @arg UART_IT_RXIEN: Receive Data register interrupt +* @arg UART_IT_TXIEN: Tansmit Data Register empty interrupt + +* @retval : None +*/ +void UART_ClearITPendingBit(UART_TypeDef* UARTx, uint16_t UART_IT) +{ + + /* Check the parameters */ + assert_param(IS_UART_ALL_PERIPH(UARTx)); + assert_param(IS_UART_CLEAR_IT(UART_IT)); + assert_param(IS_UART_PERIPH_IT(UARTx, UART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */ + /*clear UART_IT pendings bit*/ + UARTx->ICR = UART_IT; +} +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_wwdg.c b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_wwdg.c new file mode 100644 index 0000000000..3c651f6fee --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/HAL_lib/src/HAL_wwdg.c @@ -0,0 +1,221 @@ +/** +****************************************************************************** +* @file HAL_wwdg.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief This file provides all the WWDG firmware functions. +****************************************************************************** +* @copy +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT,MindMotion SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +*

© COPYRIGHT 2017 MindMotion

+*/ + +/* Includes ------------------------------------------------------------------*/ +#include "HAL_wwdg.h" +#include "HAL_rcc.h" + +/** @addtogroup StdPeriph_Driver +* @{ +*/ + +/** @defgroup WWDG +* @brief WWDG driver modules +* @{ +*/ + +/** @defgroup WWDG_Private_TypesDefinitions +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Private_Defines +* @{ +*/ + +/* ----------- WWDG registers bit address in the alias region ----------- */ +#define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE) + +/* Alias word address of EWI bit */ +#define CFR_OFFSET (WWDG_OFFSET + 0x04) +#define EWI_BitNumber 0x09 +#define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4)) + +/* --------------------- WWDG registers bit mask ------------------------ */ + +/* CR register bit mask */ +#define CR_WDGA_Set ((uint32_t)0x00000080) + +/* CFR register bit mask */ +#define CFR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) +#define CFR_W_Mask ((uint32_t)0xFFFFFF80) +#define BIT_Mask ((uint8_t)0x7F) + +/** +* @} +*/ + +/** @defgroup WWDG_Private_Macros +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Private_Variables +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + +/** @defgroup WWDG_Private_Functions +* @{ +*/ + +/** +* @brief Deinitializes the WWDG peripheral registers to their default +* reset values. +* @param None +* @retval : None +*/ +void WWDG_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); +} + +/** +* @brief Sets the WWDG Prescaler. +* @param WWDG_Prescaler: specifies the WWDG Prescaler. +* This parameter can be one of the following values: +* @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1 +* @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2 +* @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4 +* @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8 +* @retval : None +*/ +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_WWDG_PRESCALER(WWDG_Prescaler)); + /* Clear WDGTB[1:0] bits */ + tmpreg = WWDG->CFR & CFR_WDGTB_Mask; + /* Set WDGTB[1:0] bits according to WWDG_Prescaler value */ + tmpreg |= WWDG_Prescaler; + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** +* @brief Sets the WWDG window value. +* @param WindowValue: specifies the window value to be compared to +* the downcounter. +* This parameter value must be lower than 0x80. +* @retval : None +*/ +void WWDG_SetWindowValue(uint8_t WindowValue) +{ + uint32_t tmpreg = 0; + /* Check the parameters */ + assert_param(IS_WWDG_WINDOW_VALUE(WindowValue)); + /* Clear W[6:0] bits */ + tmpreg = WWDG->CFR & CFR_W_Mask; + /* Set W[6:0] bits according to WindowValue value */ + tmpreg |= WindowValue & BIT_Mask; + /* Store the new value */ + WWDG->CFR = tmpreg; +} + +/** +* @brief Enables the WWDG Early Wakeup interrupt(EWI). +* @param None +* @retval : None +*/ +void WWDG_EnableIT(void) +{ + WWDG->CFR |= (uint32_t)0x200; +} + +/** +* @brief Sets the WWDG counter value. +* @param Counter: specifies the watchdog counter value. +* This parameter must be a number between 0x40 and 0x7F. +* @retval : None +*/ +void WWDG_SetCounter(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + /* Write to T[6:0] bits to configure the counter value, no need to do + a read-modify-write; writing a 0 to WDGA bit does nothing */ + WWDG->CR = Counter & BIT_Mask; +} + +/** +* @brief Enables WWDG and load the counter value. +* @param Counter: specifies the watchdog counter value. +* This parameter must be a number between 0x40 and 0x7F. +* @retval : None +*/ +void WWDG_Enable(uint8_t Counter) +{ + /* Check the parameters */ + assert_param(IS_WWDG_COUNTER(Counter)); + WWDG->CR = CR_WDGA_Set | Counter; +} + +/** +* @brief Checks whether the Early Wakeup interrupt flag is set or not. +* @param None +* @retval : The new state of the Early Wakeup interrupt flag (SET or RESET) +*/ +FlagStatus WWDG_GetFlagStatus(void) +{ + return (FlagStatus)(WWDG->SR); +} + +/** +* @brief Clears Early Wakeup interrupt flag. +* @param None +* @retval : None +*/ +void WWDG_ClearFlag(void) +{ + WWDG->SR = (uint32_t)RESET; +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/Include/HAL_device.h b/bsp/mm32l07x/Libraries/MM32L0xx/Include/HAL_device.h new file mode 100644 index 0000000000..0319b8053a --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/Include/HAL_device.h @@ -0,0 +1,31 @@ +/**************************************************************************//** +* @file HAL_device.h +* @brief CMSIS Cortex-M Peripheral Access Layer for MindMotion +* microcontroller devices +* +* This is a convenience header file for defining the part number on the +* build command line, instead of specifying the part specific header file. +* +* Example: Add "MM32L073PF" to your build options, to define part +* Add "#include "HAL_device.h" to your source files +* +* +* @version 2.0.0 +* +* +*****************************************************************************/ + +#ifndef __HAL_device_H +#define __HAL_device_H + +#define MM32L0xxxx + +#if defined(MM32L0xxxx) + +#include "MM32L0xx.h" +#include "system_MM32L0xx.h" +#else +#error "HAL_device.h: PART NUMBER undefined" +#endif +#endif /* __HAL_device_H */ +/*-------------------------(C) COPYRIGHT 2016 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/Include/MM32L0xx.h b/bsp/mm32l07x/Libraries/MM32L0xx/Include/MM32L0xx.h new file mode 100644 index 0000000000..b5d30b4710 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/Include/MM32L0xx.h @@ -0,0 +1,4984 @@ +/** +****************************************************************************** +* @file MM32L0xx.h +* @brief CMSIS Cortex-M0 Device Peripheral Access Layer Header File. +* This file contains all the peripheral register's definitions, bits +* definitions and memory mapping for MM32L0xx devices. +* @author AE team +* @version V2.0.0 +* @date 22/08/2017 +****************************************************************************** +*/ + +/** @addtogroup CMSIS +* @{ +*/ + +/** @addtogroup MM32L0xx +* @{ +*/ + +#ifndef __MM32L0xx_H +#define __MM32L0xx_H + +/** @addtogroup Library_configuration_section +* @{ +*/ + + + + +#if !defined USE_STDPERIPH_DRIVER +/** +* @brief Comment the line below if you will not use the peripherals drivers. +In this case, these drivers will not be included and the application code will +be based on direct access to peripherals registers +*/ +/*#define USE_STDPERIPH_DRIVER*/ +#endif + +/** +* @brief In the following line adjust the value of External High Speed oscillator (HSE) +used in your application +*/ +#define HSE_Value ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/ +#define HSE_VALUE HSE_Value +/** +* @brief In the following line adjust the External High Speed oscillator (HSE) Startup +Timeout value +*/ +#define HSEStartUp_TimeOut ((uint16_t)0x0500) /*!< Time out for HSE start up */ +#define HSE_STARTUP_TIMEOUT HSEStartUp_TimeOut + +#define HSI_Value ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ +#define HSI_VALUE HSI_Value + +#define HSI_Value_Pll_ON ((uint32_t)48000000/4) /*!< Value of the Internal oscillator in Hz*/ +#define HSI_VALUE_PLL_ON HSI_Value_Pll_ON + +#define HSI_Value_Pll_OFF ((uint32_t)48000000/6) /*!< Value of the Internal oscillator in Hz*/ +#define HSI_VALUE_PLL_OFF HSI_Value_Pll_OFF + +/*!< [31:16] MM32L0xx Standard Peripheral Library main version */ +#define __MM32L0xx_STDPERIPH_VERSION_MAIN (0x01) +/*!< [15:8] MM32L0xx Standard Peripheral Library sub1 version */ +#define __MM32L0xx_STDPERIPH_VERSION_SUB1 (0x00) +/*!< [7:0] MM32L0xx Standard Peripheral Library sub2 version */ +#define __MM32L0xx_STDPERIPH_VERSION_SUB2 (0x00) +/*! + +/** @addtogroup Exported_types +* @{ +*/ + +/*!< MM32L0xx Standard Peripheral Library old types (maintained for legacy prupose) */ + +typedef int32_t s32; +typedef int16_t s16; +typedef int8_t s8; + +typedef const int32_t sc32; /*!< Read Only */ +typedef const int16_t sc16; /*!< Read Only */ +typedef const int8_t sc8; /*!< Read Only */ + +typedef __IO int32_t vs32; +typedef __IO int16_t vs16; +typedef __IO int8_t vs8; + +typedef __I int32_t vsc32; /*!< Read Only */ +typedef __I int16_t vsc16; /*!< Read Only */ +typedef __I int8_t vsc8; /*!< Read Only */ + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +typedef const uint32_t uc32; /*!< Read Only */ +typedef const uint16_t uc16; /*!< Read Only */ +typedef const uint8_t uc8; /*!< Read Only */ + +typedef __IO uint32_t vu32; +typedef __IO uint16_t vu16; +typedef __IO uint8_t vu8; + +typedef __I uint32_t vuc32; /*!< Read Only */ +typedef __I uint16_t vuc16; /*!< Read Only */ +typedef __I uint8_t vuc8; /*!< Read Only */ + +typedef enum {FALSE = 0, TRUE = !FALSE} bool; + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + + + +/** +* @} +*/ + +/** @addtogroup Peripheral_registers_structures +* @{ +*/ + +/** +* @brief Analog to Digital Converter +*/ + +typedef struct +{ + __IO uint32_t ADDATA; + __IO uint32_t ADCFG; + __IO uint32_t ADCR; + __IO uint32_t ADCHS; + __IO uint32_t ADCMPR; + __IO uint32_t ADSTA; + __IO uint32_t ADDR0; + __IO uint32_t ADDR1; + __IO uint32_t ADDR2; + __IO uint32_t ADDR3; + __IO uint32_t ADDR4; + __IO uint32_t ADDR5; + __IO uint32_t ADDR6; + __IO uint32_t ADDR7; + __IO uint32_t ADDR8; + __IO uint32_t ADDR9; + __IO uint32_t ADDR10; + __IO uint32_t ADDR11; +} ADC_TypeDef; +/** +* @brief Backup Registers +*/ + +typedef struct +{ + uint32_t RESERVED0;//0x00 + __IO uint16_t DR1_RESERVED;//0x04 + uint16_t RESERVED1; + __IO uint16_t DR2_RESERVED; + uint16_t RESERVED2; + __IO uint16_t DR3_RESERVED; + uint16_t RESERVED3; + __IO uint16_t DR4_RESERVED;//0x10 + uint16_t RESERVED4; + __IO uint16_t DR5_RESERVED; + uint16_t RESERVED5; + __IO uint16_t DR6_RESERVED; + uint16_t RESERVED6; + __IO uint16_t DR7_RESERVED; + uint16_t RESERVED7; + __IO uint16_t DR8_RESERVED;//0x20 + uint16_t RESERVED8; + __IO uint16_t DR9_RESERVED; + uint16_t RESERVED9; + __IO uint16_t DR10_RESERVED; + uint16_t RESERVED10; + __IO uint16_t RTCCR;//0x2C + uint16_t RESERVED11; + __IO uint16_t CR_RESERVED;//0x30 + uint16_t RESERVED12; + __IO uint16_t CSR_RESERVED;//0x34 + uint16_t RESERVED13; + + uint32_t RESERVED14;//0x38 + uint32_t RESERVED15;//0x3C + uint32_t RESERVED16;//0x40 + uint32_t RESERVED17;//0x44 + uint32_t RESERVED18;//0x48 + uint32_t RESERVED19;//0x4C + + __IO uint16_t DR1;//0x50 + uint16_t RESERVED20; + __IO uint16_t DR2;//0x54 + uint16_t RESERVED22; + __IO uint16_t DR3;//0x58 + uint16_t RESERVED23; + __IO uint16_t DR4;//0x5C + uint16_t RESERVED24; + __IO uint16_t DR5;//0x60 + uint16_t RESERVED25; + __IO uint16_t DR6;//0x64 + uint16_t RESERVED26; + __IO uint16_t DR7;//0x68 + uint16_t RESERVED27; + __IO uint16_t DR8;//0x6C + uint16_t RESERVED28; + __IO uint16_t DR9;//0x70 + uint16_t RESERVED29; + __IO uint16_t DR10;//0x74 + uint16_t RESERVED30; + +} BKP_TypeDef; +/** +* @brief CAN basic +*/ +typedef struct +{ + __IO uint32_t CR; //0x00 + __IO uint32_t CMR; //0x04 + __IO uint32_t SR; //0x08 + __IO uint32_t IR; //0x0c + __IO uint32_t ACR; //0x10 + __IO uint32_t AMR; //0x14 + __IO uint32_t BTR0; //0x18 + __IO uint32_t BTR1; //0x1C + __IO uint32_t RESERVED0; //0x20 + uint32_t RESERVED1; //0x24 + __IO uint32_t TXID0; //0x28 + __IO uint32_t TXID1; //0x2c + __IO uint32_t TXDR0; //0x30 + __IO uint32_t TXDR1; //0x34 + __IO uint32_t TXDR2; //0x38 + __IO uint32_t TXDR3; //0x3c + __IO uint32_t TXDR4; //0x40 + __IO uint32_t TXDR5; //0x44 + __IO uint32_t TXDR6; //0x48 + __IO uint32_t TXDR7; //0x4c + __IO uint32_t RXID0; //0x50 + __IO uint32_t RXID1; //0x54 + __IO uint32_t RXDR0; //0x58 + __IO uint32_t RXDR1; //0x5C + __IO uint32_t RXDR2; //0x60 + __IO uint32_t RXDR3; + __IO uint32_t RXDR4; + __IO uint32_t RXDR5; //0x6c + __IO uint32_t RXDR6; //0x70 + __IO uint32_t RXDR7; //0x74 + uint32_t RESERVED2; + __IO uint32_t CDR; //0x7c +}CAN_TypeDef; + +/** +* @brief CAN Peli +*/ +typedef struct +{ + __IO uint32_t MOD; + __IO uint32_t CMR; + __IO uint32_t SR; + __IO uint32_t IR; + __IO uint32_t IER; //0x10h + uint32_t RESERVED0; + __IO uint32_t BTR0; + __IO uint32_t BTR1; + uint32_t RESERVED1; //0x20h + uint32_t RESERVED2; + uint32_t RESERVED3; + __IO uint32_t ALC; + __IO uint32_t ECC; //0x30h + __IO uint32_t EWLR; + __IO uint32_t RXERR; + __IO uint32_t TXERR; + __IO uint32_t FF; //0x40 + __IO uint32_t ID0; + __IO uint32_t ID1; + __IO uint32_t DATA0; + __IO uint32_t DATA1; //0x50 + __IO uint32_t DATA2; + __IO uint32_t DATA3; + __IO uint32_t DATA4; + __IO uint32_t DATA5; //0x60 + __IO uint32_t DATA6; + __IO uint32_t DATA7; + __IO uint32_t DATA8; + __IO uint32_t DATA9; //0x70 + __IO uint32_t RMC; + __IO uint32_t RBSA; + __IO uint32_t CDR; +}CAN_Peli_TypeDef; + + + + +/** +* @brief Debug MCU +*/ + +typedef struct +{ + __IO uint32_t IDCODE; + __IO uint32_t CR; +}DBGMCU_TypeDef; + +/** +* @brief DMA Controller +*/ + +typedef struct +{ + __IO uint32_t CCR; + __IO uint32_t CNDTR; + __IO uint32_t CPAR; + __IO uint32_t CMAR; +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; + __IO uint32_t IFCR; +} DMA_TypeDef; + +/** +* @brief External Interrupt/Event Controller +*/ + +typedef struct +{ + __IO uint32_t IMR; + __IO uint32_t EMR; + __IO uint32_t RTSR; + __IO uint32_t FTSR; + __IO uint32_t SWIER; + __IO uint32_t PR; +} EXTI_TypeDef; + +/** +* @brief FLASH Registers +*/ + +typedef struct +{ + __IO uint32_t ACR; + __IO uint32_t KEYR; + __IO uint32_t OPTKEYR; + __IO uint32_t SR; + __IO uint32_t CR; + __IO uint32_t AR; + __IO uint32_t RESERVED; + __IO uint32_t OBR; + __IO uint32_t WRPR; +} FLASH_TypeDef; + +/** +* @brief Option Bytes Registers +*/ + +typedef struct +{ + __IO uint16_t RDP; + __IO uint16_t USER; + __IO uint16_t Data0; + __IO uint16_t Data1; + __IO uint16_t WRP0; + __IO uint16_t WRP1; + __IO uint16_t WRP2; + __IO uint16_t WRP3; +} OB_TypeDef; + + +/** +* @brief General Purpose IO +*/ + +typedef struct +{ + __IO uint32_t CRL; + __IO uint32_t CRH; + __IO uint32_t IDR; + __IO uint32_t ODR; + __IO uint32_t BSRR; + __IO uint32_t BRR; + __IO uint32_t LCKR; + __IO uint32_t RESERVED0; + __IO uint32_t AFRL; + __IO uint32_t AFRH; +} GPIO_TypeDef; + +/** +* @brief SysTem Configuration +*/ + +typedef struct +{ + __IO uint32_t CFGR; /*!< SYSCFG configuration register , Address offset: 0x00 */ + __IO uint32_t RESERVED0; + __IO uint32_t EXTICR[4]; + +} SYSCFG_TypeDef; + +/** +* @brief Alternate Function IO +*/ + +typedef struct +{ + __IO uint32_t EVCR; + __IO uint32_t MAPR; + __IO uint32_t EXTICR[4]; +} AFIO_TypeDef; +/** +* @brief Inter-integrated Circuit Interface +*/ + +typedef struct +{ + __IO uint16_t IC_CON; + uint16_t RESERVED0; + __IO uint16_t IC_TAR; + uint16_t RESERVED1; + __IO uint16_t IC_SAR; + uint16_t RESERVED2; + __IO uint16_t IC_HS_MADDR_RESERVED; + uint16_t RESERVED3; + __IO uint16_t IC_DATA_CMD; + uint16_t RESERVED4; + __IO uint16_t IC_SS_SCL_HCNT; + uint16_t RESERVED5; + __IO uint16_t IC_SS_SCL_LCNT; + uint16_t RESERVED6; + __IO uint16_t IC_FS_SCL_HCNT; + uint16_t RESERVED7; + __IO uint16_t IC_FS_SCL_LCNT; + uint16_t RESERVED8; + __IO uint16_t IC_HS_SCL_HCNT_RESERVED; + uint16_t RESERVED9; + __IO uint16_t IC_HS_SCL_LCNT_RESERVED; + uint16_t RESERVED10; + __IO uint16_t IC_INTR_STAT; + uint16_t RESERVED11; + __IO uint16_t IC_INTR_MASK; + uint16_t RESERVED12; + __IO uint16_t IC_RAW_INTR_STAT; + uint16_t RESERVED13; + __IO uint16_t IC_RX_TL; + uint16_t RESERVED14; + __IO uint16_t IC_TX_TL; + uint16_t RESERVED15; + __IO uint16_t IC_CLR_INTR; + uint16_t RESERVED16; + __IO uint16_t IC_CLR_RX_UNDER; + uint16_t RESERVED17; + __IO uint16_t IC_CLR_RX_OVER; + uint16_t RESERVED18; + __IO uint16_t IC_CLR_TX_OVER; + uint16_t RESERVED19; + __IO uint16_t IC_CLR_RD_REQ; + uint16_t RESERVED20; + __IO uint16_t IC_CLR_TX_ABRT; + uint16_t RESERVED21; + __IO uint16_t IC_CLR_RX_DONE; + uint16_t RESERVED22; + __IO uint16_t IC_CLR_ACTIVITY; + uint16_t RESERVED23; + __IO uint16_t IC_CLR_STOP_DET; + uint16_t RESERVED24; + __IO uint16_t IC_CLR_START_DET; + uint16_t RESERVED25; + __IO uint16_t IC_CLR_GEN_CALL; + uint16_t RESERVED26; + __IO uint16_t IC_ENABLE; + uint16_t RESERVED27; + + __IO uint32_t IC_STATUS; + __IO uint32_t IC_TXFLR; + __IO uint32_t IC_RXFLR; + __IO uint32_t IC_SDA_HOLD; + __IO uint32_t IC_TX_ABRT_SOURCE_RESERVED; + __IO uint32_t IC_SLV_DATA_NACK_ONLY_RESERVED; + __IO uint32_t IC_DMA_CR; + __IO uint32_t IC_DMA_TDLR_RESERVED; + __IO uint32_t IC_DMA_RDLR_RESERVED; + __IO uint32_t IC_SDA_SETUP; + __IO uint32_t IC_ACK_GENERAL_CALL; +} I2C_TypeDef; + +/** +* @brief Independent WATCHDOG +*/ + +typedef struct +{ + __IO uint32_t KR; + __IO uint32_t PR; + __IO uint32_t RLR; + __IO uint32_t SR; +} IWDG_TypeDef; + +/** +* @brief Power Control +*/ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CSR; +} PWR_TypeDef; + +/** +* @brief Reset and Clock Control +*/ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFGR; + __IO uint32_t CIR; + __IO uint32_t APB2RSTR; + __IO uint32_t APB1RSTR; + __IO uint32_t AHBENR; + __IO uint32_t APB2ENR; + __IO uint32_t APB1ENR; + __IO uint32_t BDCR; + __IO uint32_t CSR; +} RCC_TypeDef; + + + +/** +* @brief Serial Peripheral Interface +*/ + + +typedef struct +{ + __IO uint32_t TXREG; + __IO uint32_t RXREG; + __IO uint16_t CSTAT; + uint16_t RESERVED0; + __IO uint16_t INTSTAT; + uint16_t RESERVED1; + __IO uint16_t INTEN; + uint16_t RESERVED2; + __IO uint16_t INTCLR; + uint16_t RESERVED3; + __IO uint16_t GCTL; + uint16_t RESERVED4; + __IO uint16_t CCTL; + uint16_t RESERVED5; + __IO uint16_t SPBRG; + uint16_t RESERVED6; + __IO uint16_t RXDNR; + uint16_t RESERVED7; + __IO uint16_t NSSR; + uint16_t RESERVED8; + __IO uint16_t EXTCTL; + uint16_t RESERVED9; +} SPI_TypeDef; + + +/** +* @brief TIM +*/ + +typedef struct +{ + __IO uint32_t CR1; + __IO uint32_t CR2; + __IO uint32_t SMCR; + __IO uint32_t DIER; + __IO uint32_t SR; + __IO uint32_t EGR; + __IO uint32_t CCMR1; + __IO uint32_t CCMR2; + __IO uint32_t CCER; + __IO uint32_t CNT; + __IO uint32_t PSC; + __IO uint32_t ARR; + __IO uint32_t RCR; + __IO uint32_t CCR1; + __IO uint32_t CCR2; + __IO uint32_t CCR3; + __IO uint32_t CCR4; + __IO uint32_t BDTR; + __IO uint32_t DCR; + __IO uint32_t DMAR; +} TIM_TypeDef; + +/** +* @brief Universal Synchronous Asynchronous Receiver Transmitter +*/ + +typedef struct +{ + __IO uint32_t TDR; + __IO uint32_t RDR; + __IO uint32_t CSR; + __IO uint32_t ISR; + __IO uint32_t IER; + __IO uint32_t ICR; + __IO uint32_t GCR; + __IO uint32_t CCR; + __IO uint32_t BRR; + __IO uint32_t FRA; +} UART_TypeDef; + +/** +* @brief Window WATCHDOG +*/ + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFR; + __IO uint32_t SR; +} WWDG_TypeDef; + + +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t SR; + __IO uint32_t DINR; + __IO uint32_t DOUTR; + __IO uint32_t KEYR0; + __IO uint32_t KEYR1; + __IO uint32_t KEYR2; + __IO uint32_t KEYR3; + __IO uint32_t IVR0; + __IO uint32_t IVR1; + __IO uint32_t IVR2; + __IO uint32_t IVR3; + __IO uint32_t KEYR4; + __IO uint32_t KEYR5; + __IO uint32_t KEYR6; + __IO uint32_t KEYR7; + +} AES_TypeDef; +/** +* @brief CRS +*/ +typedef struct +{ + __IO uint32_t CR; + __IO uint32_t CFGR; + __IO uint32_t ISR; + __IO uint32_t ICR; + +} CRS_TypeDef; + +/** +* @brief Analog Comparators +*/ + +typedef struct +{ + __IO uint32_t CSR; /*!< Comparator control Status register, Address offset: 0x00 */ +} COMP_TypeDef; + +/** +* @brief USB +*/ +typedef struct +{ + __IO uint32_t TOP; /*! Address offset: 0x00 */ + __IO uint32_t INT_STATE; /*! Address offset: 0x04 */ + __IO uint32_t EP_INT_STATE; /*! Address offset: 0x08 */ + __IO uint32_t EP0_INT_STATE; /*! Address offset: 0x0C */ + __IO uint32_t INT_EN; /*! Address offset: 0x10 */ + __IO uint32_t EP_INT_EN; /*! Address offset: 0x14 */ + __IO uint32_t EP0_INT_EN; /*! Address offset: 0x18 */ + __IO uint32_t RESERVED0; + __IO uint32_t EP1_INT_STATE; /*! Address offset: 0x20 */ + __IO uint32_t EP2_INT_STATE; /*! Address offset: 0x24 */ + __IO uint32_t EP3_INT_STATE; /*! Address offset: 0x28 */ + __IO uint32_t EP4_INT_STATE; /*! Address offset: 0x2C */ + + __IO uint32_t RESERVED1; /*! Address offset: 0x30 */ + __IO uint32_t RESERVED2; /*! Address offset: 0x34 */ + __IO uint32_t RESERVED3; /*! Address offset: 0x38 */ + __IO uint32_t RESERVED4; /*! Address offset: 0x3C */ + + __IO uint32_t EP1_INT_EN; /*! Address offset: 0x40 */ + __IO uint32_t EP2_INT_EN; /*! Address offset: 0x44 */ + __IO uint32_t EP3_INT_EN; /*! Address offset: 0x48 */ + __IO uint32_t EP4_INT_EN; /*! Address offset: 0x4C */ + + __IO uint32_t RESERVED5; /*! Address offset: 0x50 */ + __IO uint32_t RESERVED6; /*! Address offset: 0x54 */ + __IO uint32_t RESERVED7; /*! Address offset: 0x58 */ + __IO uint32_t RESERVED8; /*! Address offset: 0x5C */ + + __IO uint32_t ADDR; /*! Address offset: 0x60 */ + __IO uint32_t EP_EN; /*! Address offset: 0x64 */ + + __IO uint32_t RESERVED9; /*! Address offset: 0x68 */ + __IO uint32_t RESERVED10; /*! Address offset: 0x6C */ + __IO uint32_t RESERVED11; /*! Address offset: 0x70 */ + __IO uint32_t RESERVED12; /*! Address offset: 0x74 */ + + __IO uint32_t TOG_CTRL1_4; /*! Address offset: 0x78 */ + + __IO uint32_t RESERVED13; /*! Address offset: 0x7C */ + + __IO uint32_t SETUP[8]; /*! Address offset: 0x80 */ + __IO uint32_t PAKET_SIZE0; /*! Address offset: 0xA0 */ + __IO uint32_t PAKET_SIZE1; /*! Address offset: 0xA4 */ + + __IO uint32_t RESERVED14; /*! Address offset: 0xA8 */ + __IO uint32_t RESERVED15; /*! Address offset: 0xAC */ + + __IO uint32_t RESERVED16; /*! Address offset: 0xB0 */ + __IO uint32_t RESERVED17; /*! Address offset: 0xB4 */ + __IO uint32_t RESERVED18; /*! Address offset: 0xB8 */ + __IO uint32_t RESERVED19; /*! Address offset: 0xBC */ + + __IO uint32_t RESERVED20; /*! Address offset: 0xC0 */ + __IO uint32_t RESERVED21; /*! Address offset: 0xC4 */ + __IO uint32_t RESERVED22; /*! Address offset: 0xC8 */ + __IO uint32_t RESERVED23; /*! Address offset: 0xCC */ + + __IO uint32_t RESERVED24; /*! Address offset: 0xD0 */ + __IO uint32_t RESERVED25; /*! Address offset: 0xD4 */ + __IO uint32_t RESERVED26; /*! Address offset: 0xD8 */ + __IO uint32_t RESERVED27; /*! Address offset: 0xDC */ + + __IO uint32_t RESERVED28; /*! Address offset: 0xE0 */ + __IO uint32_t RESERVED29; /*! Address offset: 0xE4 */ + __IO uint32_t RESERVED30; /*! Address offset: 0xE8 */ + __IO uint32_t RESERVED31; /*! Address offset: 0xEC */ + + __IO uint32_t RESERVED32; /*! Address offset: 0xF0 */ + __IO uint32_t RESERVED33; /*! Address offset: 0xF4 */ + __IO uint32_t RESERVED34; /*! Address offset: 0xF8 */ + __IO uint32_t RESERVED35; /*! Address offset: 0xFC */ + + __IO uint32_t EP0_AVIL; /*! Address offset: 0x100 */ + __IO uint32_t EP1_AVIL; /*! Address offset: 0x104 */ + __IO uint32_t EP2_AVIL; /*! Address offset: 0x108 */ + __IO uint32_t EP3_AVIL; /*! Address offset: 0x10C */ + __IO uint32_t EP4_AVIL; /*! Address offset: 0x110 */ + + __IO uint32_t RESERVED36; /*! Address offset: 0x114 */ + __IO uint32_t RESERVED37; /*! Address offset: 0x118 */ + __IO uint32_t RESERVED38; /*! Address offset: 0x11C */ + __IO uint32_t RESERVED39; /*! Address offset: 0x120 */ + + __IO uint32_t RESERVED40; /*! Address offset: 0x124 */ + __IO uint32_t RESERVED41; /*! Address offset: 0x128 */ + __IO uint32_t RESERVED42; /*! Address offset: 0x12C */ + __IO uint32_t RESERVED43; /*! Address offset: 0x130 */ + + __IO uint32_t RESERVED44; /*! Address offset: 0x134 */ + __IO uint32_t RESERVED45; /*! Address offset: 0x138 */ + __IO uint32_t RESERVED46; /*! Address offset: 0x13C */ + + __IO uint32_t EP0_CTRL; /*! Address offset: 0x140 */ + __IO uint32_t EP1_CTRL; /*! Address offset: 0x144 */ + __IO uint32_t EP2_CTRL; /*! Address offset: 0x148 */ + __IO uint32_t EP3_CTRL; /*! Address offset: 0x14C */ + __IO uint32_t EP4_CTRL; /*! Address offset: 0x150 */ + + __IO uint32_t RESERVED47; /*! Address offset: 0x154 */ + __IO uint32_t RESERVED48; /*! Address offset: 0x158 */ + __IO uint32_t RESERVED49; /*! Address offset: 0x15C */ + __IO uint32_t EP0_FIFO; /*! Address offset: 0x160 */ + __IO uint32_t EP1_FIFO; /*! Address offset: 0x164 */ + __IO uint32_t EP2_FIFO; /*! Address offset: 0x168 */ + __IO uint32_t EP3_FIFO; /*! Address offset: 0x16C */ + __IO uint32_t EP4_FIFO; /*! Address offset: 0x170 */ + __IO uint32_t RESERVED51; /*! Address offset: 0x174 */ + __IO uint32_t RESERVED52; /*! Address offset: 0x178 */ + __IO uint32_t RESERVED53; /*! Address offset: 0x17C */ + __IO uint32_t RESERVED54; /*! Address offset: 0x180 */ + __IO uint32_t EP_DMA; /*! Address offset: 0x184 */ + __IO uint32_t EP_HALT; /*! Address offset: 0x188 */ + __IO uint32_t RESERVED55; /*! Address offset: 0x18C */ + __IO uint32_t RESERVED56; /*! Address offset: 0x190 */ + __IO uint32_t RESERVED57; /*! Address offset: 0x194 */ + __IO uint32_t RESERVED58; /*! Address offset: 0x198 */ + __IO uint32_t RESERVED59; /*! Address offset: 0x19C */ + __IO uint32_t RESERVED60; /*! Address offset: 0x1A0 */ + __IO uint32_t RESERVED61; /*! Address offset: 0x1A4 */ + __IO uint32_t RESERVED62; /*! Address offset: 0x1A8 */ + __IO uint32_t RESERVED63; /*! Address offset: 0x1AC */ + __IO uint32_t RESERVED64; /*! Address offset: 0x1B0 */ + __IO uint32_t RESERVED65; /*! Address offset: 0x1B4 */ + __IO uint32_t RESERVED66; /*! Address offset: 0x1B8 */ + __IO uint32_t RESERVED67; /*! Address offset: 0x1BC */ + __IO uint32_t POWER; /*! Address offset: 0x1C0 */ +} USB_TypeDef; + + + +/** +* @} +*/ + +/** @addtogroup Peripheral_memory_map +* @{ +*/ + +#define FLASH_BASE ((uint32_t)0x08000000) /*!< FLASH base address in the alias region */ +#define PERIPH_BB_BASE ((uint32_t)0x42000000) /*!< Peripheral base address in the alias region */ +#define SRAM_BB_BASE ((uint32_t)0x22000000) /*!< SRAM base address in the alias region */ + +#define SRAM_BASE ((uint32_t)0x20000000) /*!< Peripheral base address in the bit-band region */ +#define PERIPH_BASE ((uint32_t)0x40000000) /*!< SRAM base address in the bit-band region */ + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APBPERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) +#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) + +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800) + +#define RTC_BASE (APB1PERIPH_BASE + 0x2800) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000) + +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) + +#define UART2_BASE (APB1PERIPH_BASE + 0x4400) + +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) + +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400) + +#define BKP_BASE (APB1PERIPH_BASE + 0x2800) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000) + +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x0000) +#define EXTI_BASE (APB2PERIPH_BASE + 0x0400) + +#define GPIOA_BASE (0x48000000) +#define GPIOB_BASE (0x48000400) +#define GPIOC_BASE (0x48000800) +#define GPIOD_BASE (0x48000C00) + +#define AES_BASE (0x40026000) +#define CRS_BASE (0x40006C00) +#define USB_BASE (0x40005C00) + +#define COMP_BASE (APB2PERIPH_BASE + 0x00003C00) +#define COMP1_BASE (APB2PERIPH_BASE + 0x00003C00) +#define COMP2_BASE (APB2PERIPH_BASE + 0x00003C04) + +#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) + +#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) + +#define UART1_BASE (APB2PERIPH_BASE + 0x3800) +#define TIM14_BASE (APB2PERIPH_BASE + 0x4000) +#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) +#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) + +#define DMA1_BASE (AHBPERIPH_BASE + 0x0000) +#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008) +#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C) +#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030) +#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044) +#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058) +#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C) +#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080) + +#define RCC_BASE (AHBPERIPH_BASE + 0x1000) + +#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /*!< Flash registers base address */ +#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */ + +#define DBGMCU_BASE ((uint32_t)0xE0042000) /*!< Debug MCU registers base address */ + + +/** +* @} +*/ + +/** @addtogroup Peripheral_declaration +* @{ +*/ + +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define TIM16 ((TIM_TypeDef *) TIM16_BASE) +#define TIM17 ((TIM_TypeDef *) TIM17_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define UART2 ((UART_TypeDef *) UART2_BASE) + +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) + +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define CAN1_PELI ((CAN_Peli_TypeDef *) CAN1_BASE) +#define BKP ((BKP_TypeDef *) BKP_BASE) + +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define UART1 ((UART_TypeDef *) UART1_BASE) +#define UART2 ((UART_TypeDef *) UART2_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) +#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) +#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) +#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) +#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) +#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) +#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) + +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define OB ((OB_TypeDef *) OB_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) + +#define COMP ((COMP_TypeDef *) COMP_BASE) +#define COMP1 ((COMP_TypeDef *) COMP1_BASE) +#define COMP2 ((COMP_TypeDef *) COMP2_BASE) + +#define AES ((AES_TypeDef *) AES_BASE) +#define CRS ((CRS_TypeDef *) CRS_BASE) +#define USB ((USB_TypeDef*) USB_BASE ) +/** +* @} +*/ + +/** @addtogroup Exported_constants +* @{ +*/ + +/** @addtogroup Peripheral_Registers_Bits_Definition +* @{ +*/ + + + + + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Advanced Encryption Standard (AES) */ +/* */ +/******************************************************************************/ +/******************* Bit definition for AES_CR register *********************/ +#define AES_CR_EN ((uint32_t)0x00000001) /*!< AES Enable */ +#define AES_CR_DATATYPE ((uint32_t)0x00000006) /*!< Data type selection */ +#define AES_CR_DATATYPE_0 ((uint32_t)0x00000002) /*!< Bit 0 */ +#define AES_CR_DATATYPE_1 ((uint32_t)0x00000004) /*!< Bit 1 */ + +#define AES_CR_MODE ((uint32_t)0x00000018) /*!< AES Mode Of Operation */ +#define AES_CR_MODE_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define AES_CR_MODE_1 ((uint32_t)0x00000010) /*!< Bit 1 */ + +#define AES_CR_CHMOD ((uint32_t)0x00000060) /*!< AES Chaining Mode */ +#define AES_CR_CHMOD_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define AES_CR_CHMOD_1 ((uint32_t)0x00000040) /*!< Bit 1 */ + +#define AES_CR_CCFC ((uint32_t)0x00000080) /*!< Computation Complete Flag Clear */ +#define AES_CR_ERRC ((uint32_t)0x00000100) /*!< Error Clear */ +#define AES_CR_CCFIE ((uint32_t)0x00000200) /*!< Computation Complete Interrupt Enable */ +#define AES_CR_ERRIE ((uint32_t)0x00000400) /*!< Error Interrupt Enable */ +#define AES_CR_DMAINEN ((uint32_t)0x00000800) /*!< DMA ENable managing the data input phase */ +#define AES_CR_DMAOUTEN ((uint32_t)0x00001000) /*!< DMA Enable managing the data output phase */ + +/******************* Bit definition for AES_SR register *********************/ +#define AES_SR_CCF ((uint32_t)0x00000001) /*!< Computation Complete Flag */ +#define AES_SR_RDERR ((uint32_t)0x00000002) /*!< Read Error Flag */ +#define AES_SR_WRERR ((uint32_t)0x00000004) /*!< Write Error Flag */ + +/******************* Bit definition for AES_DINR register *******************/ +#define AES_DINR ((uint32_t)0xFFFFFFFF) /*!< AES Data Input Register */ + +/******************* Bit definition for AES_DOUTR register ******************/ +#define AES_DOUTR ((uint32_t)0xFFFFFFFF) /*!< AES Data Output Register */ + +/******************* Bit definition for AES_KEYR0 register ******************/ +#define AES_KEYR0 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 0 */ + +/******************* Bit definition for AES_KEYR1 register ******************/ +#define AES_KEYR1 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 1 */ + +/******************* Bit definition for AES_KEYR2 register ******************/ +#define AES_KEYR2 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 2 */ + +/******************* Bit definition for AES_KEYR3 register ******************/ +#define AES_KEYR3 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 3 */ + +/******************* Bit definition for AES_IVR0 register *******************/ +#define AES_IVR0 ((uint32_t)0xFFFFFFFF) /*!< AES Initialization Vector Register 0 */ + +/******************* Bit definition for AES_IVR1 register *******************/ +#define AES_IVR1 ((uint32_t)0xFFFFFFFF) /*!< AES Initialization Vector Register 1 */ + +/******************* Bit definition for AES_IVR2 register *******************/ +#define AES_IVR2 ((uint32_t)0xFFFFFFFF) /*!< AES Initialization Vector Register 2 */ + +/******************* Bit definition for AES_IVR3 register *******************/ +#define AES_IVR3 ((uint32_t)0xFFFFFFFF) /*!< AES Initialization Vector Register 3 */ + +/******************* Bit definition for AES_KEYR4 register ******************/ +#define AES_KEYR4 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 4 */ + +/******************* Bit definition for AES_KEYR5 register ******************/ +#define AES_KEYR5 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 5 */ + +/******************* Bit definition for AES_KEYR6 register ******************/ +#define AES_KEYR6 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 6 */ + +/******************* Bit definition for AES_KEYR7 register ******************/ +#define AES_KEYR7 ((uint32_t)0xFFFFFFFF) /*!< AES Key Register 7 */ + +/******************************************************************************/ +/* */ +/* Power Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for PWR_CR register ********************/ +#define PWR_CR_PDDS ((uint16_t)0x0002) /*!< Power Down Deepsleep */ +#define PWR_CR_CWUF ((uint16_t)0x0004) /*!< Clear Wakeup Flag */ +#define PWR_CR_CSBF ((uint16_t)0x0008) /*!< Clear Standby Flag */ +#define PWR_CR_PVDE ((uint16_t)0x0010) /*!< Power Voltage Detector Enable */ + +#define PWR_CR_PLS ((uint16_t)0x1E00) /*!< PLS[2:0] bits (PVD Level Selection) */ +#define PWR_CR_PLS_0 ((uint16_t)0x0200) /*!< Bit 0 */ +#define PWR_CR_PLS_1 ((uint16_t)0x0400) /*!< Bit 1 */ +#define PWR_CR_PLS_2 ((uint16_t)0x0800) /*!< Bit 2 */ +#define PWR_CR_PLS_3 ((uint16_t)0x1000) /*!< Bit 3 */ + +/*!< PVD level configuration */ +#define PWR_CR_PLS_1V8 ((uint16_t)0x0000) /*!< PVD level 1.8V */ +#define PWR_CR_PLS_2V1 ((uint16_t)0x0200) /*!< PVD level 2.1V */ +#define PWR_CR_PLS_2V4 ((uint16_t)0x0400) /*!< PVD level 2.4V */ +#define PWR_CR_PLS_2V7 ((uint16_t)0x0600) /*!< PVD level 2.7V */ +#define PWR_CR_PLS_3V0 ((uint16_t)0x0800) /*!< PVD level 3.0V */ +#define PWR_CR_PLS_3V3 ((uint16_t)0x0A00) /*!< PVD level 3.3V */ +#define PWR_CR_PLS_3V6 ((uint16_t)0x0C00) /*!< PVD level 3.6V */ +#define PWR_CR_PLS_3V9 ((uint16_t)0x0E00) /*!< PVD level 3.9V */ +#define PWR_CR_PLS_4V2 ((uint16_t)0x1000) /*!< PVD level 4.2V */ +#define PWR_CR_PLS_4V5 ((uint16_t)0x1200) /*!< PVD level 4.5V */ +#define PWR_CR_PLS_4V8 ((uint16_t)0x1400) /*!< PVD level 4.8V */ + +/******************* Bit definition for PWR_CSR register ********************/ +#define PWR_CSR_WUF ((uint16_t)0x0001) /*!< Wakeup Flag */ +#define PWR_CSR_SBF ((uint16_t)0x0002) /*!< Standby Flag */ +#define PWR_CSR_PVDO ((uint16_t)0x0004) /*!< PVD Output */ +#define PWR_CSR_EWUP ((uint16_t)0x0100) /*!< Enable WKUP pin */ + + +/******************************************************************************/ +/* */ +/* Backup registers */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for BKP_DR1 register ********************/ +#define BKP_DR1_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR2 register ********************/ +#define BKP_DR2_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR3 register ********************/ +#define BKP_DR3_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR4 register ********************/ +#define BKP_DR4_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR5 register ********************/ +#define BKP_DR5_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR6 register ********************/ +#define BKP_DR6_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR7 register ********************/ +#define BKP_DR7_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR8 register ********************/ +#define BKP_DR8_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR9 register ********************/ +#define BKP_DR9_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************* Bit definition for BKP_DR10 register *******************/ +#define BKP_DR10_D ((uint16_t)0xFFFF) /*!< Backup data */ + +/******************************************************************************/ +/* */ +/* Reset and Clock Control */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for RCC_CR register ********************/ +#define RCC_CR_HSION ((uint32_t)0x00000001) /*!< Internal High Speed clock enable */ +#define RCC_CR_HSIRDY ((uint32_t)0x00000002) /*!< Internal High Speed clock ready flag */ +#define RCC_CR_HSITEN ((uint32_t)0x00000004) /*!< Internal High Speed clock trimming */ +#define RCC_CR_HSICAL ((uint32_t)0x0000FF00) /*!< Internal High Speed clock Calibration */ +#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */ +#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */ +#define RCC_CR_HSEBYP ((uint32_t)0x00040000) /*!< External High Speed clock Bypass */ +#define RCC_CR_CSSON ((uint32_t)0x00080000) /*!< Clock Security System enable */ +#define RCC_CR_PLLON ((uint32_t)0x01000000) /*!< PLL enable */ +#define RCC_CR_PLLRDY ((uint32_t)0x02000000) /*!< PLL clock ready flag */ + +#define RCC_CR_PLLDN ((uint32_t)0xFC000000) /*!< PLLDN[5:0] bits */ +#define RCC_CR_PLLDN_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define RCC_CR_PLLDN_1 ((uint32_t)0x08000000) /*!< Bit 1 */ +#define RCC_CR_PLLDN_2 ((uint32_t)0x10000000) /*!< Bit 2 */ +#define RCC_CR_PLLDN_3 ((uint32_t)0x20000000) /*!< Bit 3 */ +#define RCC_CR_PLLDN_4 ((uint32_t)0x40000000) /*!< Bit 4 */ +#define RCC_CR_PLLDN_5 ((uint32_t)0x80000000) /*!< Bit 5 */ + +#define RCC_CR_PLLDM ((uint32_t)0x00700000) /*!< PLLDM[2:0] bits */ +#define RCC_CR_PLLDM_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define RCC_CR_PLLDM_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define RCC_CR_PLLDM_2 ((uint32_t)0x00400000) /*!< Bit 2 */ + +/******************* Bit definition for RCC_CFGR register *******************/ +#define RCC_CFGR_SW ((uint32_t)0x00000003) /*!< SW[1:0] bits (System clock Switch) */ +#define RCC_CFGR_SW_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define RCC_CFGR_SW_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +/*!< SW configuration */ +#define RCC_CFGR_SW_HSI ((uint32_t)0x00000000) /*!< HSI selected as system clock */ +#define RCC_CFGR_SW_HSE ((uint32_t)0x00000001) /*!< HSE selected as system clock */ +#define RCC_CFGR_SW_PLL ((uint32_t)0x00000002) /*!< PLL selected as system clock */ +#define RCC_CFGR_SW_LSI ((uint32_t)0x00000003) /*!< LSI selected as system clock */ + +#define RCC_CFGR_SWS ((uint32_t)0x0000000C) /*!< SWS[1:0] bits (System Clock Switch Status) */ +#define RCC_CFGR_SWS_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define RCC_CFGR_SWS_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +/*!< SWS configuration */ +#define RCC_CFGR_SWS_HSI ((uint32_t)0x00000000) /*!< HSI oscillator used as system clock */ +#define RCC_CFGR_SWS_HSE ((uint32_t)0x00000004) /*!< HSE oscillator used as system clock */ +#define RCC_CFGR_SWS_PLL ((uint32_t)0x00000008) /*!< PLL used as system clock */ +#define RCC_CFGR_SWS_LSI ((uint32_t)0x0000000C) /*!< LSI used as system clock */ + +#define RCC_CFGR_HPRE ((uint32_t)0x000000F0) /*!< HPRE[3:0] bits (AHB prescaler) */ +#define RCC_CFGR_HPRE_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define RCC_CFGR_HPRE_1 ((uint32_t)0x00000020) /*!< Bit 1 */ +#define RCC_CFGR_HPRE_2 ((uint32_t)0x00000040) /*!< Bit 2 */ +#define RCC_CFGR_HPRE_3 ((uint32_t)0x00000080) /*!< Bit 3 */ + +/*!< HPRE configuration */ +#define RCC_CFGR_HPRE_DIV1 ((uint32_t)0x00000000) /*!< SYSCLK not divided */ +#define RCC_CFGR_HPRE_DIV2 ((uint32_t)0x00000080) /*!< SYSCLK divided by 2 */ +#define RCC_CFGR_HPRE_DIV4 ((uint32_t)0x00000090) /*!< SYSCLK divided by 4 */ +#define RCC_CFGR_HPRE_DIV8 ((uint32_t)0x000000A0) /*!< SYSCLK divided by 8 */ +#define RCC_CFGR_HPRE_DIV16 ((uint32_t)0x000000B0) /*!< SYSCLK divided by 16 */ +#define RCC_CFGR_HPRE_DIV64 ((uint32_t)0x000000C0) /*!< SYSCLK divided by 64 */ +#define RCC_CFGR_HPRE_DIV128 ((uint32_t)0x000000D0) /*!< SYSCLK divided by 128 */ +#define RCC_CFGR_HPRE_DIV256 ((uint32_t)0x000000E0) /*!< SYSCLK divided by 256 */ +#define RCC_CFGR_HPRE_DIV512 ((uint32_t)0x000000F0) /*!< SYSCLK divided by 512 */ + +#define RCC_CFGR_PPRE1 ((uint32_t)0x00000700) /*!< PRE1[2:0] bits (APB1 prescaler) */ +#define RCC_CFGR_PPRE1_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define RCC_CFGR_PPRE1_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define RCC_CFGR_PPRE1_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + +/*!< PPRE1 configuration */ +#define RCC_CFGR_PPRE1_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE1_DIV2 ((uint32_t)0x00000400) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE1_DIV4 ((uint32_t)0x00000500) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE1_DIV8 ((uint32_t)0x00000600) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE1_DIV16 ((uint32_t)0x00000700) /*!< HCLK divided by 16 */ + +#define RCC_CFGR_PPRE2 ((uint32_t)0x00003800) /*!< PRE2[2:0] bits (APB2 prescaler) */ +#define RCC_CFGR_PPRE2_0 ((uint32_t)0x00000800) /*!< Bit 0 */ +#define RCC_CFGR_PPRE2_1 ((uint32_t)0x00001000) /*!< Bit 1 */ +#define RCC_CFGR_PPRE2_2 ((uint32_t)0x00002000) /*!< Bit 2 */ + +/*!< PPRE2 configuration */ +#define RCC_CFGR_PPRE2_DIV1 ((uint32_t)0x00000000) /*!< HCLK not divided */ +#define RCC_CFGR_PPRE2_DIV2 ((uint32_t)0x00002000) /*!< HCLK divided by 2 */ +#define RCC_CFGR_PPRE2_DIV4 ((uint32_t)0x00002800) /*!< HCLK divided by 4 */ +#define RCC_CFGR_PPRE2_DIV8 ((uint32_t)0x00003000) /*!< HCLK divided by 8 */ +#define RCC_CFGR_PPRE2_DIV16 ((uint32_t)0x00003800) /*!< HCLK divided by 16 */ + +#define RCC_CFGR_PLLSRC ((uint32_t)0x00010000) /*!< PLL entry clock source */ +#define RCC_CFGR_PLLXTPRE ((uint32_t)0x00020000) /*!< HSE divider for PLL entry */ + +#define RCC_CFGR_USBPRE ((uint32_t)0x00C00000) /*!< USBPRE[2:0] bits (USB prescaler)*/ +#define RCC_CFGR_USBPRE_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define RCC_CFGR_USBPRE_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +/*!< USBPRE configuration */ +#define RCC_CFGR_USBPRE_DIV1 ((uint32_t)0x00000000) /*!< PLL clock not divided for usb clock*/ +#define RCC_CFGR_USBPRE_DIV2 ((uint32_t)0x00400000) /*!< PLL clock divided by 2 for usb clock*/ +#define RCC_CFGR_USBPRE_DIV3 ((uint32_t)0x00800000) /*!< PLL clock divided by 3 for usb clock*/ +#define RCC_CFGR_USBPRE_DIV4 ((uint32_t)0x00C00000) /*!< PLL clock divided by 4 for usb clock*/ + +#define RCC_CFGR_MCO ((uint32_t)0x07000000) /*!< MCO[2:0] bits (Microcontroller Clock Output) */ +#define RCC_CFGR_MCO_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define RCC_CFGR_MCO_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define RCC_CFGR_MCO_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + +/*!< MCO configuration */ +#define RCC_CFGR_MCO_NOCLOCK ((uint32_t)0x00000000) /*!< No clock */ +#define RCC_CFGR_MCO_LSI ((uint32_t)0x02000000) +#define RCC_CFGR_MCO_SYSCLK ((uint32_t)0x04000000) /*!< System clock selected */ +#define RCC_CFGR_MCO_HSI ((uint32_t)0x05000000) /*!< Internal 48 MHz RC oscillator clock selected */ +#define RCC_CFGR_MCO_HSE ((uint32_t)0x06000000) /*!< External 1-25 MHz oscillator clock selected */ +#define RCC_CFGR_MCO_PLL ((uint32_t)0x07000000) /*!< PLL clock divided by 2 selected*/ + +/*!<****************** Bit definition for RCC_CIR register ********************/ +#define RCC_CIR_LSIRDYF ((uint32_t)0x00000001) /*!< LSI Ready Interrupt flag */ +#define RCC_CIR_HSIRDYF ((uint32_t)0x00000004) /*!< HSI Ready Interrupt flag */ +#define RCC_CIR_HSERDYF ((uint32_t)0x00000008) /*!< HSE Ready Interrupt flag */ +#define RCC_CIR_PLLRDYF ((uint32_t)0x00000010) /*!< PLL Ready Interrupt flag */ +#define RCC_CIR_CSSF ((uint32_t)0x00000080) /*!< Clock Security System Interrupt flag */ +#define RCC_CIR_LSIRDYIE ((uint32_t)0x00000100) /*!< LSI Ready Interrupt Enable */ +#define RCC_CIR_HSIRDYIE ((uint32_t)0x00000400) /*!< HSI Ready Interrupt Enable */ +#define RCC_CIR_HSERDYIE ((uint32_t)0x00000800) /*!< HSE Ready Interrupt Enable */ +#define RCC_CIR_PLLRDYIE ((uint32_t)0x00001000) /*!< PLL Ready Interrupt Enable */ +#define RCC_CIR_LSIRDYC ((uint32_t)0x00010000) /*!< LSI Ready Interrupt Clear */ +#define RCC_CIR_HSIRDYC ((uint32_t)0x00040000) /*!< HSI Ready Interrupt Clear */ +#define RCC_CIR_HSERDYC ((uint32_t)0x00080000) /*!< HSE Ready Interrupt Clear */ +#define RCC_CIR_PLLRDYC ((uint32_t)0x00100000) /*!< PLL Ready Interrupt Clear */ +#define RCC_CIR_CSSC ((uint32_t)0x00800000) /*!< Clock Security System Interrupt Clear */ + +/***************** Bit definition for RCC_APB2RSTR register *****************/ +#define RCC_APB2RSTR_SYSCFGRST ((uint32_t)0x00000001) /*!< System Configurationregister reset */ +#define RCC_APB2RSTR_ADC1RST ((uint32_t)0x00000200) /*!< ADC 1 interface reset */ +#define RCC_APB2RSTR_TIM1RST ((uint32_t)0x00000800) /*!< TIM1 Timer reset */ +#define RCC_APB2RSTR_SPI1RST ((uint32_t)0x00001000) /*!< SPI 1 reset */ +#define RCC_APB2RSTR_UART1RST ((uint32_t)0x00004000) /*!< UART1 reset */ +#define RCC_APB2RSTR_CPTRST ((uint32_t)0x00008000) /*!< CPT interface reset */ +#define RCC_APB2RSTR_TIM14RST ((uint32_t)0x00010000) /*!< TIM14 timer reset */ +#define RCC_APB2RSTR_TIM16RST ((uint32_t)0x00020000) /*!< TIM16 timer reset */ +#define RCC_APB2RSTR_TIM17RST ((uint32_t)0x00040000) /*!< TIM17 timer reset */ +#define RCC_APB2RSTR_DBGMCURST ((uint32_t)0x00400000) /*!< DBGMCU reset */ + +/***************** Bit definition for RCC_APB1RSTR register *****************/ +#define RCC_APB1RSTR_TIM2RST ((uint32_t)0x00000001) /*!< Timer 2 reset */ +#define RCC_APB1RSTR_TIM3RST ((uint32_t)0x00000002) /*!< Timer 3 reset */ +#define RCC_APB1RSTR_WWDGRST ((uint32_t)0x00000800) /*!< Window Watchdog reset */ +#define RCC_APB1RSTR_SPI2RST ((uint32_t)0x00004000) /*!< SPI 2 reset */ +#define RCC_APB1RSTR_UART2RST ((uint32_t)0x00020000) /*!< UART 2 reset */ +#define RCC_APB1RSTR_I2C1RST ((uint32_t)0x00200000) /*!< I2C 1 reset */ +#define RCC_APB1RSTR_USBRST ((uint32_t)0x00800000) /*!< USB reset */ +#define RCC_APB1RSTR_CANRST ((uint32_t)0x02000000) /*!< CAN reset */ +#define RCC_APB1RSTR_CRSRST ((uint32_t)0x08000000) /*!< CRS interface reset */ +#define RCC_APB1RSTR_PWRRST ((uint32_t)0x10000000) /*!< Power interface reset */ + +/****************** Bit definition for RCC_AHBENR register ******************/ +#define RCC_AHBENR_DMA1EN ((uint32_t)0x00000001) /*!< DMA1 clock enable */ +#define RCC_AHBENR_SRAMEN ((uint32_t)0x00000004) /*!< SRAM interface clock enable */ +#define RCC_AHBENR_FLITFEN ((uint32_t)0x00000010) /*!< FLITF clock enable */ +#define RCC_AHBENR_AESEN ((uint32_t)0x00000080) /*!< AES clock enable */ +#define RCC_AHBENR_GPIOAEN ((uint32_t)0x00020000) /*!< GPIOA clock enable */ +#define RCC_AHBENR_GPIOBEN ((uint32_t)0x00040000) /*!< GPIOB clock enable */ +#define RCC_AHBENR_GPIOCEN ((uint32_t)0x00080000) /*!< GPIOC clock enable */ +#define RCC_AHBENR_GPIODEN ((uint32_t)0x00100000) /*!< GPIOD clock enable */ + +/****************** Bit definition for RCC_APB2ENR register *****************/ +#define RCC_APB2ENR_SYSCFGEN ((uint32_t)0x00000001) /*!< System configuration register enable */ +#define RCC_APB2ENR_ADC1EN ((uint32_t)0x00000200) /*!< ADC 1 interface clock enable */ +#define RCC_APB2ENR_TIM1EN ((uint32_t)0x00000800) /*!< TIM1 Timer clock enable */ +#define RCC_APB2ENR_SPI1EN ((uint32_t)0x00001000) /*!< SPI 1 clock enable */ +#define RCC_APB2ENR_UART1EN ((uint32_t)0x00004000) /*!< UART1 clock enable */ +#define RCC_APB2ENR_CPTEN ((uint32_t)0x00008000) /*!< Comparator interface clock enable */ +#define RCC_APB2ENR_TIM14EN ((uint32_t)0x00010000) /*!< TIM14 Timer clock enable */ +#define RCC_APB2ENR_TIM16EN ((uint32_t)0x00020000) /*!< TIM16 Timer clock enable */ +#define RCC_APB2ENR_TIM17EN ((uint32_t)0x00040000) /*!< TIM17 Timer clock enable */ +#define RCC_APB2ENR_DBGMCUEN ((uint32_t)0x00400000) /*!< TIM17 Timer clock enable */ + +/***************** Bit definition for RCC_APB1ENR register ******************/ +#define RCC_APB1ENR_TIM2EN ((uint32_t)0x00000001) /*!< Timer 2 clock enabled*/ +#define RCC_APB1ENR_TIM3EN ((uint32_t)0x00000002) /*!< Timer 3 clock enable */ +#define RCC_APB1ENR_WWDGEN ((uint32_t)0x00000800) /*!< Window Watchdog clock enable */ +#define RCC_APB1ENR_SPI2EN ((uint32_t)0x00004000) /*!< SPI 2 clock enable */ +#define RCC_APB1ENR_UART2EN ((uint32_t)0x00020000) /*!< UART 2 clock enable */ +#define RCC_APB1ENR_I2C1EN ((uint32_t)0x00200000) /*!< I2C 1 clock enable */ +#define RCC_APB1ENR_USBEN ((uint32_t)0x00800000) /*!< USB clock enable */ +#define RCC_APB1ENR_CANEN ((uint32_t)0x02000000) /*!< CAN clock enable */ +#define RCC_APB1ENR_CRSEN ((uint32_t)0x08000000) /*!< CRS interface enable */ +#define RCC_APB1ENR_PWREN ((uint32_t)0x10000000) /*!< Power interface clock enable */ + +/******************* Bit definition for RCC_CSR register ********************/ +#define RCC_CSR_LSION ((uint32_t)0x00000001) /*!< Internal Low Speed oscillator enable */ +#define RCC_CSR_LSIRDY ((uint32_t)0x00000002) /*!< Internal Low Speed oscillator Ready */ +#define RCC_CSR_RMVF ((uint32_t)0x01000000) /*!< Remove reset flag */ +#define RCC_CSR_PINRSTF ((uint32_t)0x04000000) /*!< PIN reset flag */ +#define RCC_CSR_PORRSTF ((uint32_t)0x08000000) /*!< POR/PDR reset flag */ +#define RCC_CSR_SFTRSTF ((uint32_t)0x10000000) /*!< Software Reset flag */ +#define RCC_CSR_IWDGRSTF ((uint32_t)0x20000000) /*!< Independent Watchdog reset flag */ +#define RCC_CSR_WWDGRSTF ((uint32_t)0x40000000) /*!< Window watchdog reset flag */ +#define RCC_CSR_LPWRRSTF ((uint32_t)0x80000000) /*!< Low-Power reset flag */ + +/******************************************************************************/ +/* */ +/* Clock feedback system */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for CRS_CR register *******************/ +#define CRS_CR_SYNCOKIE ((uint16_t)0x0001) /*!< SYNC event OK interrupt enable */ +#define CRS_CR_SYNCWARNIE ((uint16_t)0x0002) /*!< SYNC warning interrupt enable */ +#define CRS_CR_ERRIE ((uint16_t)0x0004) /*!< Synchronization or trimming error interrupt enable */ +#define CRS_CR_ESYNCIE ((uint16_t)0x0008) /*!< Expected SYNC interrupt enable */ +#define CRS_CR_CEN ((uint16_t)0x0020) /*!< Frequency error counter enable */ +#define CRS_CR_AUTOTRIMEN ((uint16_t)0x0040) /*!< Automatic trimming enable */ +#define CRS_CR_SWSYNC ((uint16_t)0x0080) /*!< Generate software SYNC event */ +#define CRS_CR_TRIM ((uint16_t)0x3F00) /*!< HSI48 oscillator smooth trimming */ + +/******************* Bit definition for CRS_CFGR register *******************/ +#define CRS_CFGR_RELOAD ((uint32_t)0x0000FFFF) /*!< Counter reload value */ +#define CRS_CFGR_FELIM ((uint32_t)0x00FF0000) /*!< Frequency error limit */ + +#define CRS_CFGR_SYNCDIV ((uint32_t)0x07000000) /*!< SYNC divider */ +#define CRS_CFGR_SYNCDIV_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define CRS_CFGR_SYNCDIV_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define CRS_CFGR_SYNCDIV_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + +/*!< SYNCDIV configuration */ +#define CRS_CFGR_SYNCDIV_DIV1 ((uint32_t)0x00000000) /*!< SYNC not divided */ +#define CRS_CFGR_SYNCDIV_DIV2 ((uint32_t)0x01000000) /*!< SYNC divided by 2*/ +#define CRS_CFGR_SYNCDIV_DIV4 ((uint32_t)0x02000000) /*!< SYNC divided by 4*/ +#define CRS_CFGR_SYNCDIV_DIV8 ((uint32_t)0x03000000) /*!< SYNC divided by 8*/ +#define CRS_CFGR_SYNCDIV_DIV16 ((uint32_t)0x04000000) /*!< SYNC divided by 18*/ +#define CRS_CFGR_SYNCDIV_DIV32 ((uint32_t)0x05000000) /*!< SYNC divided by 32*/ +#define CRS_CFGR_SYNCDIV_DIV64 ((uint32_t)0x06000000) /*!< SYNC divided by 64*/ +#define CRS_CFGR_SYNCDIV_DIV128 ((uint32_t)0x07000000) /*!< SYNC divided by 128*/ + +#define CRS_CFGR_SYNCSRC ((uint32_t)0x30000000) /*!< SYNC signal source selection */ +#define CRS_CFGR_SYNCSRC_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define CRS_CFGR_SYNCSRC_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +/*!< SYNCSRC configuration */ +#define CRS_CFGR_SYNCSRC_GPIO ((uint32_t)0x00000000) /*!< GPIO Selected as SYNC signal source */ +#define CRS_CFGR_SYNCSRC_LSE ((uint32_t)0x10000000) /*!< LSE Selected as SYNC signal source */ +#define CRS_CFGR_SYNCSRC_USB_SOF ((uint32_t)0x20000000) /*!< USB_SOF Selected as SYNC signal source */ + +#define CRS_CFGR_SYNCPOL ((uint32_t)0x80000000) /*!< SYNC polarity selection */ + + +/******************* Bit definition for CRS_ISR register *******************/ +#define CRS_ISR_SYNCOKF ((uint32_t)0x00000001) /*!< SYNC event OK flag */ +#define CRS_ISR_SYNCWARNF ((uint32_t)0x00000002) /*!< SYNC warning flag */ +#define CRS_ISR_ERRF ((uint32_t)0x00000004) /*!< Error flag */ +#define CRS_ISR_ESYNCF ((uint32_t)0x00000008) /*!< Expected SYNC flag */ + +#define CRS_ISR_SYNCERR ((uint32_t)0x00000100) /*!< SYNC error */ +#define CRS_ISR_SYNCMISS ((uint32_t)0x00000200) /*!< SYNC missed */ +#define CRS_ISR_TRIMOVF ((uint32_t)0x00000400) /*!< Trimming overflow or underflow */ + +#define CRS_ISR_FEDIR ((uint32_t)0x00008000) /*!< Frequency error direction */ + +#define CRS_ISR_FECAP ((uint32_t)0xFFFF0000) /*!< Frequency error capture */ + +/******************* Bit definition for CRS_ICR register *******************/ +#define CRS_ICR_SYNCOKC ((uint32_t)0x00000001) /*!< SYNC event OK clear flag */ +#define CRS_ICR_SYNCWARNC ((uint32_t)0x00000002) /*!< SYNC warning clear flag */ +#define CRS_ICR_ERRC ((uint32_t)0x00000004) /*!< Error clear flag */ +#define CRS_ICR_ESYNCC ((uint32_t)0x00000008) /*!< Expected SYNC clear flag */ + +/******************************************************************************/ +/* */ +/* General Purpose and Alternate Function IO */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for GPIO_CRL register *******************/ +#define GPIO_CRL_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ + +#define GPIO_CRL_MODE0 ((uint32_t)0x00000003) /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */ +#define GPIO_CRL_MODE0_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define GPIO_CRL_MODE0_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +#define GPIO_CRL_MODE1 ((uint32_t)0x00000030) /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */ +#define GPIO_CRL_MODE1_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define GPIO_CRL_MODE1_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define GPIO_CRL_MODE2 ((uint32_t)0x00000300) /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */ +#define GPIO_CRL_MODE2_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define GPIO_CRL_MODE2_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +#define GPIO_CRL_MODE3 ((uint32_t)0x00003000) /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */ +#define GPIO_CRL_MODE3_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define GPIO_CRL_MODE3_1 ((uint32_t)0x00002000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE4 ((uint32_t)0x00030000) /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */ +#define GPIO_CRL_MODE4_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define GPIO_CRL_MODE4_1 ((uint32_t)0x00020000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE5 ((uint32_t)0x00300000) /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */ +#define GPIO_CRL_MODE5_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define GPIO_CRL_MODE5_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE6 ((uint32_t)0x03000000) /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */ +#define GPIO_CRL_MODE6_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define GPIO_CRL_MODE6_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + +#define GPIO_CRL_MODE7 ((uint32_t)0x30000000) /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */ +#define GPIO_CRL_MODE7_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define GPIO_CRL_MODE7_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ + +#define GPIO_CRL_CNF0 ((uint32_t)0x0000000C) /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */ +#define GPIO_CRL_CNF0_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define GPIO_CRL_CNF0_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define GPIO_CRL_CNF1 ((uint32_t)0x000000C0) /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */ +#define GPIO_CRL_CNF1_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define GPIO_CRL_CNF1_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define GPIO_CRL_CNF2 ((uint32_t)0x00000C00) /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */ +#define GPIO_CRL_CNF2_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define GPIO_CRL_CNF2_1 ((uint32_t)0x00000800) /*!< Bit 1 */ + +#define GPIO_CRL_CNF3 ((uint32_t)0x0000C000) /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */ +#define GPIO_CRL_CNF3_0 ((uint32_t)0x00004000) /*!< Bit 0 */ +#define GPIO_CRL_CNF3_1 ((uint32_t)0x00008000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF4 ((uint32_t)0x000C0000) /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */ +#define GPIO_CRL_CNF4_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define GPIO_CRL_CNF4_1 ((uint32_t)0x00080000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF5 ((uint32_t)0x00C00000) /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */ +#define GPIO_CRL_CNF5_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define GPIO_CRL_CNF5_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF6 ((uint32_t)0x0C000000) /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */ +#define GPIO_CRL_CNF6_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define GPIO_CRL_CNF6_1 ((uint32_t)0x08000000) /*!< Bit 1 */ + +#define GPIO_CRL_CNF7 ((uint32_t)0xC0000000) /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */ +#define GPIO_CRL_CNF7_0 ((uint32_t)0x40000000) /*!< Bit 0 */ +#define GPIO_CRL_CNF7_1 ((uint32_t)0x80000000) /*!< Bit 1 */ + +/******************* Bit definition for GPIO_CRH register *******************/ +#define GPIO_CRH_MODE ((uint32_t)0x33333333) /*!< Port x mode bits */ + +#define GPIO_CRH_MODE8 ((uint32_t)0x00000003) /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */ +#define GPIO_CRH_MODE8_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define GPIO_CRH_MODE8_1 ((uint32_t)0x00000002) /*!< Bit 1 */ + +#define GPIO_CRH_MODE9 ((uint32_t)0x00000030) /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */ +#define GPIO_CRH_MODE9_0 ((uint32_t)0x00000010) /*!< Bit 0 */ +#define GPIO_CRH_MODE9_1 ((uint32_t)0x00000020) /*!< Bit 1 */ + +#define GPIO_CRH_MODE10 ((uint32_t)0x00000300) /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */ +#define GPIO_CRH_MODE10_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define GPIO_CRH_MODE10_1 ((uint32_t)0x00000200) /*!< Bit 1 */ + +#define GPIO_CRH_MODE11 ((uint32_t)0x00003000) /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */ +#define GPIO_CRH_MODE11_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define GPIO_CRH_MODE11_1 ((uint32_t)0x00002000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE12 ((uint32_t)0x00030000) /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */ +#define GPIO_CRH_MODE12_0 ((uint32_t)0x00010000) /*!< Bit 0 */ +#define GPIO_CRH_MODE12_1 ((uint32_t)0x00020000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE13 ((uint32_t)0x00300000) /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */ +#define GPIO_CRH_MODE13_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define GPIO_CRH_MODE13_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE14 ((uint32_t)0x03000000) /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */ +#define GPIO_CRH_MODE14_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define GPIO_CRH_MODE14_1 ((uint32_t)0x02000000) /*!< Bit 1 */ + +#define GPIO_CRH_MODE15 ((uint32_t)0x30000000) /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */ +#define GPIO_CRH_MODE15_0 ((uint32_t)0x10000000) /*!< Bit 0 */ +#define GPIO_CRH_MODE15_1 ((uint32_t)0x20000000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF ((uint32_t)0xCCCCCCCC) /*!< Port x configuration bits */ + +#define GPIO_CRH_CNF8 ((uint32_t)0x0000000C) /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */ +#define GPIO_CRH_CNF8_0 ((uint32_t)0x00000004) /*!< Bit 0 */ +#define GPIO_CRH_CNF8_1 ((uint32_t)0x00000008) /*!< Bit 1 */ + +#define GPIO_CRH_CNF9 ((uint32_t)0x000000C0) /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */ +#define GPIO_CRH_CNF9_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define GPIO_CRH_CNF9_1 ((uint32_t)0x00000080) /*!< Bit 1 */ + +#define GPIO_CRH_CNF10 ((uint32_t)0x00000C00) /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */ +#define GPIO_CRH_CNF10_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define GPIO_CRH_CNF10_1 ((uint32_t)0x00000800) /*!< Bit 1 */ + +#define GPIO_CRH_CNF11 ((uint32_t)0x0000C000) /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */ +#define GPIO_CRH_CNF11_0 ((uint32_t)0x00004000) /*!< Bit 0 */ +#define GPIO_CRH_CNF11_1 ((uint32_t)0x00008000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF12 ((uint32_t)0x000C0000) /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */ +#define GPIO_CRH_CNF12_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define GPIO_CRH_CNF12_1 ((uint32_t)0x00080000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF13 ((uint32_t)0x00C00000) /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */ +#define GPIO_CRH_CNF13_0 ((uint32_t)0x00400000) /*!< Bit 0 */ +#define GPIO_CRH_CNF13_1 ((uint32_t)0x00800000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF14 ((uint32_t)0x0C000000) /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */ +#define GPIO_CRH_CNF14_0 ((uint32_t)0x04000000) /*!< Bit 0 */ +#define GPIO_CRH_CNF14_1 ((uint32_t)0x08000000) /*!< Bit 1 */ + +#define GPIO_CRH_CNF15 ((uint32_t)0xC0000000) /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */ +#define GPIO_CRH_CNF15_0 ((uint32_t)0x40000000) /*!< Bit 0 */ +#define GPIO_CRH_CNF15_1 ((uint32_t)0x80000000) /*!< Bit 1 */ + +/*!<****************** Bit definition for GPIO_IDR register *******************/ +#define GPIO_IDR_IDR0 ((uint16_t)0x0001) /*!< Port input data, bit 0 */ +#define GPIO_IDR_IDR1 ((uint16_t)0x0002) /*!< Port input data, bit 1 */ +#define GPIO_IDR_IDR2 ((uint16_t)0x0004) /*!< Port input data, bit 2 */ +#define GPIO_IDR_IDR3 ((uint16_t)0x0008) /*!< Port input data, bit 3 */ +#define GPIO_IDR_IDR4 ((uint16_t)0x0010) /*!< Port input data, bit 4 */ +#define GPIO_IDR_IDR5 ((uint16_t)0x0020) /*!< Port input data, bit 5 */ +#define GPIO_IDR_IDR6 ((uint16_t)0x0040) /*!< Port input data, bit 6 */ +#define GPIO_IDR_IDR7 ((uint16_t)0x0080) /*!< Port input data, bit 7 */ +#define GPIO_IDR_IDR8 ((uint16_t)0x0100) /*!< Port input data, bit 8 */ +#define GPIO_IDR_IDR9 ((uint16_t)0x0200) /*!< Port input data, bit 9 */ +#define GPIO_IDR_IDR10 ((uint16_t)0x0400) /*!< Port input data, bit 10 */ +#define GPIO_IDR_IDR11 ((uint16_t)0x0800) /*!< Port input data, bit 11 */ +#define GPIO_IDR_IDR12 ((uint16_t)0x1000) /*!< Port input data, bit 12 */ +#define GPIO_IDR_IDR13 ((uint16_t)0x2000) /*!< Port input data, bit 13 */ +#define GPIO_IDR_IDR14 ((uint16_t)0x4000) /*!< Port input data, bit 14 */ +#define GPIO_IDR_IDR15 ((uint16_t)0x8000) /*!< Port input data, bit 15 */ + +/******************* Bit definition for GPIO_ODR register *******************/ +#define GPIO_ODR_ODR0 ((uint16_t)0x0001) /*!< Port output data, bit 0 */ +#define GPIO_ODR_ODR1 ((uint16_t)0x0002) /*!< Port output data, bit 1 */ +#define GPIO_ODR_ODR2 ((uint16_t)0x0004) /*!< Port output data, bit 2 */ +#define GPIO_ODR_ODR3 ((uint16_t)0x0008) /*!< Port output data, bit 3 */ +#define GPIO_ODR_ODR4 ((uint16_t)0x0010) /*!< Port output data, bit 4 */ +#define GPIO_ODR_ODR5 ((uint16_t)0x0020) /*!< Port output data, bit 5 */ +#define GPIO_ODR_ODR6 ((uint16_t)0x0040) /*!< Port output data, bit 6 */ +#define GPIO_ODR_ODR7 ((uint16_t)0x0080) /*!< Port output data, bit 7 */ +#define GPIO_ODR_ODR8 ((uint16_t)0x0100) /*!< Port output data, bit 8 */ +#define GPIO_ODR_ODR9 ((uint16_t)0x0200) /*!< Port output data, bit 9 */ +#define GPIO_ODR_ODR10 ((uint16_t)0x0400) /*!< Port output data, bit 10 */ +#define GPIO_ODR_ODR11 ((uint16_t)0x0800) /*!< Port output data, bit 11 */ +#define GPIO_ODR_ODR12 ((uint16_t)0x1000) /*!< Port output data, bit 12 */ +#define GPIO_ODR_ODR13 ((uint16_t)0x2000) /*!< Port output data, bit 13 */ +#define GPIO_ODR_ODR14 ((uint16_t)0x4000) /*!< Port output data, bit 14 */ +#define GPIO_ODR_ODR15 ((uint16_t)0x8000) /*!< Port output data, bit 15 */ + +/****************** Bit definition for GPIO_BSRR register *******************/ +#define GPIO_BSRR_BS0 ((uint32_t)0x00000001) /*!< Port x Set bit 0 */ +#define GPIO_BSRR_BS1 ((uint32_t)0x00000002) /*!< Port x Set bit 1 */ +#define GPIO_BSRR_BS2 ((uint32_t)0x00000004) /*!< Port x Set bit 2 */ +#define GPIO_BSRR_BS3 ((uint32_t)0x00000008) /*!< Port x Set bit 3 */ +#define GPIO_BSRR_BS4 ((uint32_t)0x00000010) /*!< Port x Set bit 4 */ +#define GPIO_BSRR_BS5 ((uint32_t)0x00000020) /*!< Port x Set bit 5 */ +#define GPIO_BSRR_BS6 ((uint32_t)0x00000040) /*!< Port x Set bit 6 */ +#define GPIO_BSRR_BS7 ((uint32_t)0x00000080) /*!< Port x Set bit 7 */ +#define GPIO_BSRR_BS8 ((uint32_t)0x00000100) /*!< Port x Set bit 8 */ +#define GPIO_BSRR_BS9 ((uint32_t)0x00000200) /*!< Port x Set bit 9 */ +#define GPIO_BSRR_BS10 ((uint32_t)0x00000400) /*!< Port x Set bit 10 */ +#define GPIO_BSRR_BS11 ((uint32_t)0x00000800) /*!< Port x Set bit 11 */ +#define GPIO_BSRR_BS12 ((uint32_t)0x00001000) /*!< Port x Set bit 12 */ +#define GPIO_BSRR_BS13 ((uint32_t)0x00002000) /*!< Port x Set bit 13 */ +#define GPIO_BSRR_BS14 ((uint32_t)0x00004000) /*!< Port x Set bit 14 */ +#define GPIO_BSRR_BS15 ((uint32_t)0x00008000) /*!< Port x Set bit 15 */ + +#define GPIO_BSRR_BR0 ((uint32_t)0x00010000) /*!< Port x Reset bit 0 */ +#define GPIO_BSRR_BR1 ((uint32_t)0x00020000) /*!< Port x Reset bit 1 */ +#define GPIO_BSRR_BR2 ((uint32_t)0x00040000) /*!< Port x Reset bit 2 */ +#define GPIO_BSRR_BR3 ((uint32_t)0x00080000) /*!< Port x Reset bit 3 */ +#define GPIO_BSRR_BR4 ((uint32_t)0x00100000) /*!< Port x Reset bit 4 */ +#define GPIO_BSRR_BR5 ((uint32_t)0x00200000) /*!< Port x Reset bit 5 */ +#define GPIO_BSRR_BR6 ((uint32_t)0x00400000) /*!< Port x Reset bit 6 */ +#define GPIO_BSRR_BR7 ((uint32_t)0x00800000) /*!< Port x Reset bit 7 */ +#define GPIO_BSRR_BR8 ((uint32_t)0x01000000) /*!< Port x Reset bit 8 */ +#define GPIO_BSRR_BR9 ((uint32_t)0x02000000) /*!< Port x Reset bit 9 */ +#define GPIO_BSRR_BR10 ((uint32_t)0x04000000) /*!< Port x Reset bit 10 */ +#define GPIO_BSRR_BR11 ((uint32_t)0x08000000) /*!< Port x Reset bit 11 */ +#define GPIO_BSRR_BR12 ((uint32_t)0x10000000) /*!< Port x Reset bit 12 */ +#define GPIO_BSRR_BR13 ((uint32_t)0x20000000) /*!< Port x Reset bit 13 */ +#define GPIO_BSRR_BR14 ((uint32_t)0x40000000) /*!< Port x Reset bit 14 */ +#define GPIO_BSRR_BR15 ((uint32_t)0x80000000) /*!< Port x Reset bit 15 */ + +/******************* Bit definition for GPIO_BRR register *******************/ +#define GPIO_BRR_BR0 ((uint16_t)0x0001) /*!< Port x Reset bit 0 */ +#define GPIO_BRR_BR1 ((uint16_t)0x0002) /*!< Port x Reset bit 1 */ +#define GPIO_BRR_BR2 ((uint16_t)0x0004) /*!< Port x Reset bit 2 */ +#define GPIO_BRR_BR3 ((uint16_t)0x0008) /*!< Port x Reset bit 3 */ +#define GPIO_BRR_BR4 ((uint16_t)0x0010) /*!< Port x Reset bit 4 */ +#define GPIO_BRR_BR5 ((uint16_t)0x0020) /*!< Port x Reset bit 5 */ +#define GPIO_BRR_BR6 ((uint16_t)0x0040) /*!< Port x Reset bit 6 */ +#define GPIO_BRR_BR7 ((uint16_t)0x0080) /*!< Port x Reset bit 7 */ +#define GPIO_BRR_BR8 ((uint16_t)0x0100) /*!< Port x Reset bit 8 */ +#define GPIO_BRR_BR9 ((uint16_t)0x0200) /*!< Port x Reset bit 9 */ +#define GPIO_BRR_BR10 ((uint16_t)0x0400) /*!< Port x Reset bit 10 */ +#define GPIO_BRR_BR11 ((uint16_t)0x0800) /*!< Port x Reset bit 11 */ +#define GPIO_BRR_BR12 ((uint16_t)0x1000) /*!< Port x Reset bit 12 */ +#define GPIO_BRR_BR13 ((uint16_t)0x2000) /*!< Port x Reset bit 13 */ +#define GPIO_BRR_BR14 ((uint16_t)0x4000) /*!< Port x Reset bit 14 */ +#define GPIO_BRR_BR15 ((uint16_t)0x8000) /*!< Port x Reset bit 15 */ + +/****************** Bit definition for GPIO_LCKR register *******************/ +#define GPIO_LCKR_LCK0 ((uint32_t)0x00000001) /*!< Port x Lock bit 0 */ +#define GPIO_LCKR_LCK1 ((uint32_t)0x00000002) /*!< Port x Lock bit 1 */ +#define GPIO_LCKR_LCK2 ((uint32_t)0x00000004) /*!< Port x Lock bit 2 */ +#define GPIO_LCKR_LCK3 ((uint32_t)0x00000008) /*!< Port x Lock bit 3 */ +#define GPIO_LCKR_LCK4 ((uint32_t)0x00000010) /*!< Port x Lock bit 4 */ +#define GPIO_LCKR_LCK5 ((uint32_t)0x00000020) /*!< Port x Lock bit 5 */ +#define GPIO_LCKR_LCK6 ((uint32_t)0x00000040) /*!< Port x Lock bit 6 */ +#define GPIO_LCKR_LCK7 ((uint32_t)0x00000080) /*!< Port x Lock bit 7 */ +#define GPIO_LCKR_LCK8 ((uint32_t)0x00000100) /*!< Port x Lock bit 8 */ +#define GPIO_LCKR_LCK9 ((uint32_t)0x00000200) /*!< Port x Lock bit 9 */ +#define GPIO_LCKR_LCK10 ((uint32_t)0x00000400) /*!< Port x Lock bit 10 */ +#define GPIO_LCKR_LCK11 ((uint32_t)0x00000800) /*!< Port x Lock bit 11 */ +#define GPIO_LCKR_LCK12 ((uint32_t)0x00001000) /*!< Port x Lock bit 12 */ +#define GPIO_LCKR_LCK13 ((uint32_t)0x00002000) /*!< Port x Lock bit 13 */ +#define GPIO_LCKR_LCK14 ((uint32_t)0x00004000) /*!< Port x Lock bit 14 */ +#define GPIO_LCKR_LCK15 ((uint32_t)0x00008000) /*!< Port x Lock bit 15 */ +#define GPIO_LCKR_LCKK ((uint32_t)0x00010000) /*!< Lock key */ + +/****************** Bit definition for GPIO_AFRL register ********************/ +#define GPIO_AFRL_AFSEL0_Pos (0U) +#define GPIO_AFRL_AFSEL0_Msk (0xFU << GPIO_AFRL_AFSEL0_Pos) /*!< 0x0000000F */ +#define GPIO_AFRL_AFSEL0 GPIO_AFRL_AFSEL0_Msk +#define GPIO_AFRL_AFSEL1_Pos (4U) +#define GPIO_AFRL_AFSEL1_Msk (0xFU << GPIO_AFRL_AFSEL1_Pos) /*!< 0x000000F0 */ +#define GPIO_AFRL_AFSEL1 GPIO_AFRL_AFSEL1_Msk +#define GPIO_AFRL_AFSEL2_Pos (8U) +#define GPIO_AFRL_AFSEL2_Msk (0xFU << GPIO_AFRL_AFSEL2_Pos) /*!< 0x00000F00 */ +#define GPIO_AFRL_AFSEL2 GPIO_AFRL_AFSEL2_Msk +#define GPIO_AFRL_AFSEL3_Pos (12U) +#define GPIO_AFRL_AFSEL3_Msk (0xFU << GPIO_AFRL_AFSEL3_Pos) /*!< 0x0000F000 */ +#define GPIO_AFRL_AFSEL3 GPIO_AFRL_AFSEL3_Msk +#define GPIO_AFRL_AFSEL4_Pos (16U) +#define GPIO_AFRL_AFSEL4_Msk (0xFU << GPIO_AFRL_AFSEL4_Pos) /*!< 0x000F0000 */ +#define GPIO_AFRL_AFSEL4 GPIO_AFRL_AFSEL4_Msk +#define GPIO_AFRL_AFSEL5_Pos (20U) +#define GPIO_AFRL_AFSEL5_Msk (0xFU << GPIO_AFRL_AFSEL5_Pos) /*!< 0x00F00000 */ +#define GPIO_AFRL_AFSEL5 GPIO_AFRL_AFSEL5_Msk +#define GPIO_AFRL_AFSEL6_Pos (24U) +#define GPIO_AFRL_AFSEL6_Msk (0xFU << GPIO_AFRL_AFSEL6_Pos) /*!< 0x0F000000 */ +#define GPIO_AFRL_AFSEL6 GPIO_AFRL_AFSEL6_Msk +#define GPIO_AFRL_AFSEL7_Pos (28U) +#define GPIO_AFRL_AFSEL7_Msk (0xFU << GPIO_AFRL_AFSEL7_Pos) /*!< 0xF0000000 */ +#define GPIO_AFRL_AFSEL7 GPIO_AFRL_AFSEL7_Msk + +/* Legacy aliases */ +#define GPIO_AFRL_AFRL0_Pos GPIO_AFRL_AFSEL0_Pos +#define GPIO_AFRL_AFRL0_Msk GPIO_AFRL_AFSEL0_Msk +#define GPIO_AFRL_AFRL0 GPIO_AFRL_AFSEL0 +#define GPIO_AFRL_AFRL1_Pos GPIO_AFRL_AFSEL1_Pos +#define GPIO_AFRL_AFRL1_Msk GPIO_AFRL_AFSEL1_Msk +#define GPIO_AFRL_AFRL1 GPIO_AFRL_AFSEL1 +#define GPIO_AFRL_AFRL2_Pos GPIO_AFRL_AFSEL2_Pos +#define GPIO_AFRL_AFRL2_Msk GPIO_AFRL_AFSEL2_Msk +#define GPIO_AFRL_AFRL2 GPIO_AFRL_AFSEL2 +#define GPIO_AFRL_AFRL3_Pos GPIO_AFRL_AFSEL3_Pos +#define GPIO_AFRL_AFRL3_Msk GPIO_AFRL_AFSEL3_Msk +#define GPIO_AFRL_AFRL3 GPIO_AFRL_AFSEL3 +#define GPIO_AFRL_AFRL4_Pos GPIO_AFRL_AFSEL4_Pos +#define GPIO_AFRL_AFRL4_Msk GPIO_AFRL_AFSEL4_Msk +#define GPIO_AFRL_AFRL4 GPIO_AFRL_AFSEL4 +#define GPIO_AFRL_AFRL5_Pos GPIO_AFRL_AFSEL5_Pos +#define GPIO_AFRL_AFRL5_Msk GPIO_AFRL_AFSEL5_Msk +#define GPIO_AFRL_AFRL5 GPIO_AFRL_AFSEL5 +#define GPIO_AFRL_AFRL6_Pos GPIO_AFRL_AFSEL6_Pos +#define GPIO_AFRL_AFRL6_Msk GPIO_AFRL_AFSEL6_Msk +#define GPIO_AFRL_AFRL6 GPIO_AFRL_AFSEL6 +#define GPIO_AFRL_AFRL7_Pos GPIO_AFRL_AFSEL7_Pos +#define GPIO_AFRL_AFRL7_Msk GPIO_AFRL_AFSEL7_Msk +#define GPIO_AFRL_AFRL7 GPIO_AFRL_AFSEL7 + +/****************** Bit definition for GPIO_AFRH register ********************/ +#define GPIO_AFRH_AFSEL8_Pos (0U) +#define GPIO_AFRH_AFSEL8_Msk (0xFU << GPIO_AFRH_AFSEL8_Pos) /*!< 0x0000000F */ +#define GPIO_AFRH_AFSEL8 GPIO_AFRH_AFSEL8_Msk +#define GPIO_AFRH_AFSEL9_Pos (4U) +#define GPIO_AFRH_AFSEL9_Msk (0xFU << GPIO_AFRH_AFSEL9_Pos) /*!< 0x000000F0 */ +#define GPIO_AFRH_AFSEL9 GPIO_AFRH_AFSEL9_Msk +#define GPIO_AFRH_AFSEL10_Pos (8U) +#define GPIO_AFRH_AFSEL10_Msk (0xFU << GPIO_AFRH_AFSEL10_Pos) /*!< 0x00000F00 */ +#define GPIO_AFRH_AFSEL10 GPIO_AFRH_AFSEL10_Msk +#define GPIO_AFRH_AFSEL11_Pos (12U) +#define GPIO_AFRH_AFSEL11_Msk (0xFU << GPIO_AFRH_AFSEL11_Pos) /*!< 0x0000F000 */ +#define GPIO_AFRH_AFSEL11 GPIO_AFRH_AFSEL11_Msk +#define GPIO_AFRH_AFSEL12_Pos (16U) +#define GPIO_AFRH_AFSEL12_Msk (0xFU << GPIO_AFRH_AFSEL12_Pos) /*!< 0x000F0000 */ +#define GPIO_AFRH_AFSEL12 GPIO_AFRH_AFSEL12_Msk +#define GPIO_AFRH_AFSEL13_Pos (20U) +#define GPIO_AFRH_AFSEL13_Msk (0xFU << GPIO_AFRH_AFSEL13_Pos) /*!< 0x00F00000 */ +#define GPIO_AFRH_AFSEL13 GPIO_AFRH_AFSEL13_Msk +#define GPIO_AFRH_AFSEL14_Pos (24U) +#define GPIO_AFRH_AFSEL14_Msk (0xFU << GPIO_AFRH_AFSEL14_Pos) /*!< 0x0F000000 */ +#define GPIO_AFRH_AFSEL14 GPIO_AFRH_AFSEL14_Msk +#define GPIO_AFRH_AFSEL15_Pos (28U) +#define GPIO_AFRH_AFSEL15_Msk (0xFU << GPIO_AFRH_AFSEL15_Pos) /*!< 0xF0000000 */ +#define GPIO_AFRH_AFSEL15 GPIO_AFRH_AFSEL15_Msk + +/* Legacy aliases */ +#define GPIO_AFRH_AFRH0_Pos GPIO_AFRH_AFSEL8_Pos +#define GPIO_AFRH_AFRH0_Msk GPIO_AFRH_AFSEL8_Msk +#define GPIO_AFRH_AFRH0 GPIO_AFRH_AFSEL8 +#define GPIO_AFRH_AFRH1_Pos GPIO_AFRH_AFSEL9_Pos +#define GPIO_AFRH_AFRH1_Msk GPIO_AFRH_AFSEL9_Msk +#define GPIO_AFRH_AFRH1 GPIO_AFRH_AFSEL9 +#define GPIO_AFRH_AFRH2_Pos GPIO_AFRH_AFSEL10_Pos +#define GPIO_AFRH_AFRH2_Msk GPIO_AFRH_AFSEL10_Msk +#define GPIO_AFRH_AFRH2 GPIO_AFRH_AFSEL10 +#define GPIO_AFRH_AFRH3_Pos GPIO_AFRH_AFSEL11_Pos +#define GPIO_AFRH_AFRH3_Msk GPIO_AFRH_AFSEL11_Msk +#define GPIO_AFRH_AFRH3 GPIO_AFRH_AFSEL11 +#define GPIO_AFRH_AFRH4_Pos GPIO_AFRH_AFSEL12_Pos +#define GPIO_AFRH_AFRH4_Msk GPIO_AFRH_AFSEL12_Msk +#define GPIO_AFRH_AFRH4 GPIO_AFRH_AFSEL12 +#define GPIO_AFRH_AFRH5_Pos GPIO_AFRH_AFSEL13_Pos +#define GPIO_AFRH_AFRH5_Msk GPIO_AFRH_AFSEL13_Msk +#define GPIO_AFRH_AFRH5 GPIO_AFRH_AFSEL13 +#define GPIO_AFRH_AFRH6_Pos GPIO_AFRH_AFSEL14_Pos +#define GPIO_AFRH_AFRH6_Msk GPIO_AFRH_AFSEL14_Msk +#define GPIO_AFRH_AFRH6 GPIO_AFRH_AFSEL14 +#define GPIO_AFRH_AFRH7_Pos GPIO_AFRH_AFSEL15_Pos +#define GPIO_AFRH_AFRH7_Msk GPIO_AFRH_AFSEL15_Msk +#define GPIO_AFRH_AFRH7 GPIO_AFRH_AFSEL15 + +/****************** Bit definition for GPIO_BRR register *********************/ +/******************************************************************************/ +/* */ +/* System Configuration (SYSCFG) */ +/* */ +/******************************************************************************/ +/***************** Bit definition for SYSCFG_CFGR register ****************/ +#define SYSCFG_CFGR_MEM_MODE ((uint32_t)0x00000003) /*!< SYSCFG_Memory Remap Config */ +#define SYSCFG_CFGR_MEM_MODE_0 ((uint32_t)0x00000001) /*!< SYSCFG_Memory Remap Config Bit 0 */ +#define SYSCFG_CFGR_MEM_MODE_1 ((uint32_t)0x00000002) /*!< SYSCFG_Memory Remap Config Bit 1 */ + +#define SYSCFG_CFGR_ADC_DMA_RMP ((uint32_t)0x00000100) /*!< ADC DMA remap */ +#define SYSCFG_CFGR_UART1TX_DMA_RMP ((uint32_t)0x00000200) /*!< UART1 TX DMA remap */ +#define SYSCFG_CFGR_UART1RX_DMA_RMP ((uint32_t)0x00000400) /*!< UART1 RX DMA remap */ +#define SYSCFG_CFGR_TIM16_DMA_RMP ((uint32_t)0x00000800) /*!< Timer 16 DMA remap */ +#define SYSCFG_CFGR_TIM17_DMA_RMP ((uint32_t)0x00001000) /*!< Timer 17 DMA remap */ + +/***************** Bit definition for SYSCFG_EXTICR1 register ***************/ +#define SYSCFG_EXTICR1_EXTI0 ((uint16_t)0x000F) /*!< EXTI 0 configuration */ +#define SYSCFG_EXTICR1_EXTI1 ((uint16_t)0x00F0) /*!< EXTI 1 configuration */ +#define SYSCFG_EXTICR1_EXTI2 ((uint16_t)0x0F00) /*!< EXTI 2 configuration */ +#define SYSCFG_EXTICR1_EXTI3 ((uint16_t)0xF000) /*!< EXTI 3 configuration */ + +/** +* @brief EXTI0 configuration +*/ +#define SYSCFG_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /*!< PA[0] pin */ +#define SYSCFG_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /*!< PB[0] pin */ +#define SYSCFG_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /*!< PC[0] pin */ +#define SYSCFG_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /*!< PD[0] pin */ +#define SYSCFG_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /*!< PE[0] pin */ +#define SYSCFG_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /*!< PF[0] pin */ + +/** +* @brief EXTI1 configuration +*/ +#define SYSCFG_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /*!< PA[1] pin */ +#define SYSCFG_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /*!< PB[1] pin */ +#define SYSCFG_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /*!< PC[1] pin */ +#define SYSCFG_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /*!< PD[1] pin */ +#define SYSCFG_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /*!< PE[1] pin */ +#define SYSCFG_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /*!< PF[1] pin */ + +/** +* @brief EXTI2 configuration +*/ +#define SYSCFG_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /*!< PA[2] pin */ +#define SYSCFG_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /*!< PB[2] pin */ +#define SYSCFG_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /*!< PC[2] pin */ +#define SYSCFG_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /*!< PD[2] pin */ +#define SYSCFG_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /*!< PE[2] pin */ +#define SYSCFG_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /*!< PF[2] pin */ + +/** +* @brief EXTI3 configuration +*/ +#define SYSCFG_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /*!< PA[3] pin */ +#define SYSCFG_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /*!< PB[3] pin */ +#define SYSCFG_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /*!< PC[3] pin */ +#define SYSCFG_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /*!< PD[3] pin */ +#define SYSCFG_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /*!< PE[3] pin */ +#define SYSCFG_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /*!< PF[3] pin */ + +/***************** Bit definition for SYSCFG_EXTICR2 register *****************/ +#define SYSCFG_EXTICR2_EXTI4 ((uint16_t)0x000F) /*!< EXTI 4 configuration */ +#define SYSCFG_EXTICR2_EXTI5 ((uint16_t)0x00F0) /*!< EXTI 5 configuration */ +#define SYSCFG_EXTICR2_EXTI6 ((uint16_t)0x0F00) /*!< EXTI 6 configuration */ +#define SYSCFG_EXTICR2_EXTI7 ((uint16_t)0xF000) /*!< EXTI 7 configuration */ + +/** +* @brief EXTI4 configuration +*/ +#define SYSCFG_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /*!< PA[4] pin */ +#define SYSCFG_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /*!< PB[4] pin */ +#define SYSCFG_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /*!< PC[4] pin */ +#define SYSCFG_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /*!< PD[4] pin */ +#define SYSCFG_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /*!< PE[4] pin */ +#define SYSCFG_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /*!< PF[4] pin */ + +/** +* @brief EXTI5 configuration +*/ +#define SYSCFG_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /*!< PA[5] pin */ +#define SYSCFG_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /*!< PB[5] pin */ +#define SYSCFG_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /*!< PC[5] pin */ +#define SYSCFG_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /*!< PD[5] pin */ +#define SYSCFG_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /*!< PE[5] pin */ +#define SYSCFG_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /*!< PF[5] pin */ + +/** +* @brief EXTI6 configuration +*/ +#define SYSCFG_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /*!< PA[6] pin */ +#define SYSCFG_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /*!< PB[6] pin */ +#define SYSCFG_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /*!< PC[6] pin */ +#define SYSCFG_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /*!< PD[6] pin */ +#define SYSCFG_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /*!< PE[6] pin */ +#define SYSCFG_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /*!< PF[6] pin */ + +/** +* @brief EXTI7 configuration +*/ +#define SYSCFG_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /*!< PA[7] pin */ +#define SYSCFG_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /*!< PB[7] pin */ +#define SYSCFG_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /*!< PC[7] pin */ +#define SYSCFG_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /*!< PD[7] pin */ +#define SYSCFG_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /*!< PE[7] pin */ +#define SYSCFG_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /*!< PF[7] pin */ + +/***************** Bit definition for SYSCFG_EXTICR3 register *****************/ +#define SYSCFG_EXTICR3_EXTI8 ((uint16_t)0x000F) /*!< EXTI 8 configuration */ +#define SYSCFG_EXTICR3_EXTI9 ((uint16_t)0x00F0) /*!< EXTI 9 configuration */ +#define SYSCFG_EXTICR3_EXTI10 ((uint16_t)0x0F00) /*!< EXTI 10 configuration */ +#define SYSCFG_EXTICR3_EXTI11 ((uint16_t)0xF000) /*!< EXTI 11 configuration */ + +/** +* @brief EXTI8 configuration +*/ +#define SYSCFG_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /*!< PA[8] pin */ +#define SYSCFG_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /*!< PB[8] pin */ +#define SYSCFG_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /*!< PC[8] pin */ +#define SYSCFG_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /*!< PD[8] pin */ +#define SYSCFG_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /*!< PE[8] pin */ + +/** +* @brief EXTI9 configuration +*/ +#define SYSCFG_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /*!< PA[9] pin */ +#define SYSCFG_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /*!< PB[9] pin */ +#define SYSCFG_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /*!< PC[9] pin */ +#define SYSCFG_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /*!< PD[9] pin */ +#define SYSCFG_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /*!< PE[9] pin */ +#define SYSCFG_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /*!< PF[9] pin */ + +/** +* @brief EXTI10 configuration +*/ +#define SYSCFG_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /*!< PA[10] pin */ +#define SYSCFG_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /*!< PB[10] pin */ +#define SYSCFG_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /*!< PC[10] pin */ +#define SYSCFG_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /*!< PE[10] pin */ +#define SYSCFG_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /*!< PD[10] pin */ +#define SYSCFG_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /*!< PF[10] pin */ + +/** +* @brief EXTI11 configuration +*/ +#define SYSCFG_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /*!< PA[11] pin */ +#define SYSCFG_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /*!< PB[11] pin */ +#define SYSCFG_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /*!< PC[11] pin */ +#define SYSCFG_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /*!< PD[11] pin */ +#define SYSCFG_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /*!< PE[11] pin */ + +/***************** Bit definition for SYSCFG_EXTICR4 register *****************/ +#define SYSCFG_EXTICR4_EXTI12 ((uint16_t)0x000F) /*!< EXTI 12 configuration */ +#define SYSCFG_EXTICR4_EXTI13 ((uint16_t)0x00F0) /*!< EXTI 13 configuration */ +#define SYSCFG_EXTICR4_EXTI14 ((uint16_t)0x0F00) /*!< EXTI 14 configuration */ +#define SYSCFG_EXTICR4_EXTI15 ((uint16_t)0xF000) /*!< EXTI 15 configuration */ + +/** +* @brief EXTI12 configuration +*/ +#define SYSCFG_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /*!< PA[12] pin */ +#define SYSCFG_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /*!< PB[12] pin */ +#define SYSCFG_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /*!< PC[12] pin */ +#define SYSCFG_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /*!< PD[12] pin */ +#define SYSCFG_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /*!< PE[12] pin */ + +/** +* @brief EXTI13 configuration +*/ +#define SYSCFG_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /*!< PA[13] pin */ +#define SYSCFG_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /*!< PB[13] pin */ +#define SYSCFG_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /*!< PC[13] pin */ +#define SYSCFG_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /*!< PD[13] pin */ +#define SYSCFG_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /*!< PE[13] pin */ + +/** +* @brief EXTI14 configuration +*/ +#define SYSCFG_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /*!< PA[14] pin */ +#define SYSCFG_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /*!< PB[14] pin */ +#define SYSCFG_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /*!< PC[14] pin */ +#define SYSCFG_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /*!< PD[14] pin */ +#define SYSCFG_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /*!< PE[14] pin */ + +/** +* @brief EXTI15 configuration +*/ +#define SYSCFG_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /*!< PA[15] pin */ +#define SYSCFG_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /*!< PB[15] pin */ +#define SYSCFG_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /*!< PC[15] pin */ +#define SYSCFG_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /*!< PD[15] pin */ +#define SYSCFG_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /*!< PE[15] pin */ + +/******************************************************************************/ +/* */ +/* SystemTick */ +/* */ +/******************************************************************************/ + +/***************** Bit definition for SysTick_CTRL register *****************/ +#define SysTick_CTRL_ENABLE ((uint32_t)0x00000001) /*!< Counter enable */ +#define SysTick_CTRL_TICKINT ((uint32_t)0x00000002) /*!< Counting down to 0 pends the SysTick handler */ +#define SysTick_CTRL_CLKSOURCE ((uint32_t)0x00000004) /*!< Clock source */ +#define SysTick_CTRL_COUNTFLAG ((uint32_t)0x00010000) /*!< Count Flag */ + +/***************** Bit definition for SysTick_LOAD register *****************/ +#define SysTick_LOAD_RELOAD ((uint32_t)0x00FFFFFF) /*!< Value to load into the SysTick Current Value Register when the counter reaches 0 */ + +/***************** Bit definition for SysTick_VAL register ******************/ +#define SysTick_VAL_CURRENT ((uint32_t)0x00FFFFFF) /*!< Current value at the time the register is accessed */ + +/***************** Bit definition for SysTick_CALIB register ****************/ +#define SysTick_CALIB_TENMS ((uint32_t)0x00FFFFFF) /*!< Reload value to use for 10ms timing */ +#define SysTick_CALIB_SKEW ((uint32_t)0x40000000) /*!< Calibration value is not exactly 10 ms */ +#define SysTick_CALIB_NOREF ((uint32_t)0x80000000) /*!< The reference clock is not provided */ + +/******************************************************************************/ +/* */ +/* Nested Vectored Interrupt Controller */ +/* */ +/******************************************************************************/ + +/****************** Bit definition for NVIC_ISER register *******************/ +#define NVIC_ISER_SETENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt set enable bits */ +#define NVIC_ISER_SETENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ISER_SETENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ISER_SETENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ISER_SETENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ISER_SETENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ISER_SETENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ISER_SETENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ISER_SETENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ISER_SETENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ISER_SETENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ISER_SETENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ISER_SETENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ISER_SETENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ISER_SETENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ISER_SETENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ISER_SETENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ISER_SETENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ISER_SETENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ISER_SETENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ISER_SETENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ISER_SETENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ISER_SETENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ISER_SETENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ISER_SETENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ISER_SETENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ISER_SETENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ISER_SETENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ISER_SETENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ISER_SETENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ISER_SETENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ISER_SETENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ISER_SETENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ICER register *******************/ +#define NVIC_ICER_CLRENA ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-enable bits */ +#define NVIC_ICER_CLRENA_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ICER_CLRENA_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ICER_CLRENA_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ICER_CLRENA_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ICER_CLRENA_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ICER_CLRENA_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ICER_CLRENA_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ICER_CLRENA_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ICER_CLRENA_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ICER_CLRENA_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ICER_CLRENA_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ICER_CLRENA_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ICER_CLRENA_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ICER_CLRENA_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ICER_CLRENA_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ICER_CLRENA_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ICER_CLRENA_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ICER_CLRENA_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ICER_CLRENA_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ICER_CLRENA_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ICER_CLRENA_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ICER_CLRENA_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ICER_CLRENA_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ICER_CLRENA_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ICER_CLRENA_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ICER_CLRENA_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ICER_CLRENA_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ICER_CLRENA_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ICER_CLRENA_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ICER_CLRENA_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ICER_CLRENA_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ICER_CLRENA_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ISPR register *******************/ +#define NVIC_ISPR_SETPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt set-pending bits */ +#define NVIC_ISPR_SETPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ISPR_SETPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ISPR_SETPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ISPR_SETPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ISPR_SETPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ISPR_SETPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ISPR_SETPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ISPR_SETPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ISPR_SETPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ISPR_SETPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ISPR_SETPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ISPR_SETPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ISPR_SETPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ISPR_SETPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ISPR_SETPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ISPR_SETPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ISPR_SETPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ISPR_SETPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ISPR_SETPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ISPR_SETPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ISPR_SETPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ISPR_SETPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ISPR_SETPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ISPR_SETPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ISPR_SETPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ISPR_SETPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ISPR_SETPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ISPR_SETPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ISPR_SETPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ISPR_SETPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ISPR_SETPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ISPR_SETPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_ICPR register *******************/ +#define NVIC_ICPR_CLRPEND ((uint32_t)0xFFFFFFFF) /*!< Interrupt clear-pending bits */ +#define NVIC_ICPR_CLRPEND_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_ICPR_CLRPEND_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_ICPR_CLRPEND_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_ICPR_CLRPEND_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_ICPR_CLRPEND_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_ICPR_CLRPEND_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_ICPR_CLRPEND_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_ICPR_CLRPEND_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_ICPR_CLRPEND_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_ICPR_CLRPEND_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_ICPR_CLRPEND_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_ICPR_CLRPEND_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_ICPR_CLRPEND_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_ICPR_CLRPEND_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_ICPR_CLRPEND_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_ICPR_CLRPEND_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_ICPR_CLRPEND_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_ICPR_CLRPEND_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_ICPR_CLRPEND_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_ICPR_CLRPEND_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_ICPR_CLRPEND_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_ICPR_CLRPEND_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_ICPR_CLRPEND_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_ICPR_CLRPEND_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_ICPR_CLRPEND_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_ICPR_CLRPEND_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_ICPR_CLRPEND_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_ICPR_CLRPEND_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_ICPR_CLRPEND_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_ICPR_CLRPEND_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_ICPR_CLRPEND_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_ICPR_CLRPEND_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_IABR register *******************/ +#define NVIC_IABR_ACTIVE ((uint32_t)0xFFFFFFFF) /*!< Interrupt active flags */ +#define NVIC_IABR_ACTIVE_0 ((uint32_t)0x00000001) /*!< bit 0 */ +#define NVIC_IABR_ACTIVE_1 ((uint32_t)0x00000002) /*!< bit 1 */ +#define NVIC_IABR_ACTIVE_2 ((uint32_t)0x00000004) /*!< bit 2 */ +#define NVIC_IABR_ACTIVE_3 ((uint32_t)0x00000008) /*!< bit 3 */ +#define NVIC_IABR_ACTIVE_4 ((uint32_t)0x00000010) /*!< bit 4 */ +#define NVIC_IABR_ACTIVE_5 ((uint32_t)0x00000020) /*!< bit 5 */ +#define NVIC_IABR_ACTIVE_6 ((uint32_t)0x00000040) /*!< bit 6 */ +#define NVIC_IABR_ACTIVE_7 ((uint32_t)0x00000080) /*!< bit 7 */ +#define NVIC_IABR_ACTIVE_8 ((uint32_t)0x00000100) /*!< bit 8 */ +#define NVIC_IABR_ACTIVE_9 ((uint32_t)0x00000200) /*!< bit 9 */ +#define NVIC_IABR_ACTIVE_10 ((uint32_t)0x00000400) /*!< bit 10 */ +#define NVIC_IABR_ACTIVE_11 ((uint32_t)0x00000800) /*!< bit 11 */ +#define NVIC_IABR_ACTIVE_12 ((uint32_t)0x00001000) /*!< bit 12 */ +#define NVIC_IABR_ACTIVE_13 ((uint32_t)0x00002000) /*!< bit 13 */ +#define NVIC_IABR_ACTIVE_14 ((uint32_t)0x00004000) /*!< bit 14 */ +#define NVIC_IABR_ACTIVE_15 ((uint32_t)0x00008000) /*!< bit 15 */ +#define NVIC_IABR_ACTIVE_16 ((uint32_t)0x00010000) /*!< bit 16 */ +#define NVIC_IABR_ACTIVE_17 ((uint32_t)0x00020000) /*!< bit 17 */ +#define NVIC_IABR_ACTIVE_18 ((uint32_t)0x00040000) /*!< bit 18 */ +#define NVIC_IABR_ACTIVE_19 ((uint32_t)0x00080000) /*!< bit 19 */ +#define NVIC_IABR_ACTIVE_20 ((uint32_t)0x00100000) /*!< bit 20 */ +#define NVIC_IABR_ACTIVE_21 ((uint32_t)0x00200000) /*!< bit 21 */ +#define NVIC_IABR_ACTIVE_22 ((uint32_t)0x00400000) /*!< bit 22 */ +#define NVIC_IABR_ACTIVE_23 ((uint32_t)0x00800000) /*!< bit 23 */ +#define NVIC_IABR_ACTIVE_24 ((uint32_t)0x01000000) /*!< bit 24 */ +#define NVIC_IABR_ACTIVE_25 ((uint32_t)0x02000000) /*!< bit 25 */ +#define NVIC_IABR_ACTIVE_26 ((uint32_t)0x04000000) /*!< bit 26 */ +#define NVIC_IABR_ACTIVE_27 ((uint32_t)0x08000000) /*!< bit 27 */ +#define NVIC_IABR_ACTIVE_28 ((uint32_t)0x10000000) /*!< bit 28 */ +#define NVIC_IABR_ACTIVE_29 ((uint32_t)0x20000000) /*!< bit 29 */ +#define NVIC_IABR_ACTIVE_30 ((uint32_t)0x40000000) /*!< bit 30 */ +#define NVIC_IABR_ACTIVE_31 ((uint32_t)0x80000000) /*!< bit 31 */ + +/****************** Bit definition for NVIC_PRI0 register *******************/ +#define NVIC_IPR0_PRI_0 ((uint32_t)0x000000FF) /*!< Priority of interrupt 0 */ +#define NVIC_IPR0_PRI_1 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 1 */ +#define NVIC_IPR0_PRI_2 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 2 */ +#define NVIC_IPR0_PRI_3 ((uint32_t)0xFF000000) /*!< Priority of interrupt 3 */ + +/****************** Bit definition for NVIC_PRI1 register *******************/ +#define NVIC_IPR1_PRI_4 ((uint32_t)0x000000FF) /*!< Priority of interrupt 4 */ +#define NVIC_IPR1_PRI_5 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 5 */ +#define NVIC_IPR1_PRI_6 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 6 */ +#define NVIC_IPR1_PRI_7 ((uint32_t)0xFF000000) /*!< Priority of interrupt 7 */ + +/****************** Bit definition for NVIC_PRI2 register *******************/ +#define NVIC_IPR2_PRI_8 ((uint32_t)0x000000FF) /*!< Priority of interrupt 8 */ +#define NVIC_IPR2_PRI_9 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 9 */ +#define NVIC_IPR2_PRI_10 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 10 */ +#define NVIC_IPR2_PRI_11 ((uint32_t)0xFF000000) /*!< Priority of interrupt 11 */ + +/****************** Bit definition for NVIC_PRI3 register *******************/ +#define NVIC_IPR3_PRI_12 ((uint32_t)0x000000FF) /*!< Priority of interrupt 12 */ +#define NVIC_IPR3_PRI_13 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 13 */ +#define NVIC_IPR3_PRI_14 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 14 */ +#define NVIC_IPR3_PRI_15 ((uint32_t)0xFF000000) /*!< Priority of interrupt 15 */ + +/****************** Bit definition for NVIC_PRI4 register *******************/ +#define NVIC_IPR4_PRI_16 ((uint32_t)0x000000FF) /*!< Priority of interrupt 16 */ +#define NVIC_IPR4_PRI_17 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 17 */ +#define NVIC_IPR4_PRI_18 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 18 */ +#define NVIC_IPR4_PRI_19 ((uint32_t)0xFF000000) /*!< Priority of interrupt 19 */ + +/****************** Bit definition for NVIC_PRI5 register *******************/ +#define NVIC_IPR5_PRI_20 ((uint32_t)0x000000FF) /*!< Priority of interrupt 20 */ +#define NVIC_IPR5_PRI_21 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 21 */ +#define NVIC_IPR5_PRI_22 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 22 */ +#define NVIC_IPR5_PRI_23 ((uint32_t)0xFF000000) /*!< Priority of interrupt 23 */ + +/****************** Bit definition for NVIC_PRI6 register *******************/ +#define NVIC_IPR6_PRI_24 ((uint32_t)0x000000FF) /*!< Priority of interrupt 24 */ +#define NVIC_IPR6_PRI_25 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 25 */ +#define NVIC_IPR6_PRI_26 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 26 */ +#define NVIC_IPR6_PRI_27 ((uint32_t)0xFF000000) /*!< Priority of interrupt 27 */ + +/****************** Bit definition for NVIC_PRI7 register *******************/ +#define NVIC_IPR7_PRI_28 ((uint32_t)0x000000FF) /*!< Priority of interrupt 28 */ +#define NVIC_IPR7_PRI_29 ((uint32_t)0x0000FF00) /*!< Priority of interrupt 29 */ +#define NVIC_IPR7_PRI_30 ((uint32_t)0x00FF0000) /*!< Priority of interrupt 30 */ +#define NVIC_IPR7_PRI_31 ((uint32_t)0xFF000000) /*!< Priority of interrupt 31 */ + +/****************** Bit definition for SCB_CPUID register *******************/ +#define SCB_CPUID_REVISION ((uint32_t)0x0000000F) /*!< Implementation defined revision number */ +#define SCB_CPUID_PARTNO ((uint32_t)0x0000FFF0) /*!< Number of processor within family */ +#define SCB_CPUID_Constant ((uint32_t)0x000F0000) /*!< Reads as 0x0F */ +#define SCB_CPUID_VARIANT ((uint32_t)0x00F00000) /*!< Implementation defined variant number */ +#define SCB_CPUID_IMPLEMENTER ((uint32_t)0xFF000000) /*!< Implementer code. ARM is 0x41 */ + +/******************* Bit definition for SCB_ICSR register *******************/ +#define SCB_ICSR_VECTACTIVE ((uint32_t)0x000001FF) /*!< Active ISR number field */ +#define SCB_ICSR_RETTOBASE ((uint32_t)0x00000800) /*!< All active exceptions minus the IPSR_current_exception yields the empty set */ +#define SCB_ICSR_VECTPENDING ((uint32_t)0x003FF000) /*!< Pending ISR number field */ +#define SCB_ICSR_ISRPENDING ((uint32_t)0x00400000) /*!< Interrupt pending flag */ +#define SCB_ICSR_ISRPREEMPT ((uint32_t)0x00800000) /*!< It indicates that a pending interrupt becomes active in the next running cycle */ +#define SCB_ICSR_PENDSTCLR ((uint32_t)0x02000000) /*!< Clear pending SysTick bit */ +#define SCB_ICSR_PENDSTSET ((uint32_t)0x04000000) /*!< Set pending SysTick bit */ +#define SCB_ICSR_PENDSVCLR ((uint32_t)0x08000000) /*!< Clear pending pendSV bit */ +#define SCB_ICSR_PENDSVSET ((uint32_t)0x10000000) /*!< Set pending pendSV bit */ +#define SCB_ICSR_NMIPENDSET ((uint32_t)0x80000000) /*!< Set pending NMI bit */ + +/******************* Bit definition for SCB_VTOR register *******************/ +#define SCB_VTOR_TBLOFF ((uint32_t)0x1FFFFF80) /*!< Vector table base offset field */ +#define SCB_VTOR_TBLBASE ((uint32_t)0x20000000) /*!< Table base in code(0) or RAM(1) */ + +/*!<***************** Bit definition for SCB_AIRCR register *******************/ +#define SCB_AIRCR_VECTRESET ((uint32_t)0x00000001) /*!< System Reset bit */ +#define SCB_AIRCR_VECTCLRACTIVE ((uint32_t)0x00000002) /*!< Clear active vector bit */ +#define SCB_AIRCR_SYSRESETREQ ((uint32_t)0x00000004) /*!< Requests chip control logic to generate a reset */ + +#define SCB_AIRCR_PRIGROUP ((uint32_t)0x00000700) /*!< PRIGROUP[2:0] bits (Priority group) */ +#define SCB_AIRCR_PRIGROUP_0 ((uint32_t)0x00000100) /*!< Bit 0 */ +#define SCB_AIRCR_PRIGROUP_1 ((uint32_t)0x00000200) /*!< Bit 1 */ +#define SCB_AIRCR_PRIGROUP_2 ((uint32_t)0x00000400) /*!< Bit 2 */ + +/* prority group configuration */ +#define SCB_AIRCR_PRIGROUP0 ((uint32_t)0x00000000) /*!< Priority group=0 (7 bits of pre-emption priority, 1 bit of subpriority) */ +#define SCB_AIRCR_PRIGROUP1 ((uint32_t)0x00000100) /*!< Priority group=1 (6 bits of pre-emption priority, 2 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP2 ((uint32_t)0x00000200) /*!< Priority group=2 (5 bits of pre-emption priority, 3 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP3 ((uint32_t)0x00000300) /*!< Priority group=3 (4 bits of pre-emption priority, 4 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP4 ((uint32_t)0x00000400) /*!< Priority group=4 (3 bits of pre-emption priority, 5 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP5 ((uint32_t)0x00000500) /*!< Priority group=5 (2 bits of pre-emption priority, 6 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP6 ((uint32_t)0x00000600) /*!< Priority group=6 (1 bit of pre-emption priority, 7 bits of subpriority) */ +#define SCB_AIRCR_PRIGROUP7 ((uint32_t)0x00000700) /*!< Priority group=7 (no pre-emption priority, 8 bits of subpriority) */ + +#define SCB_AIRCR_ENDIANESS ((uint32_t)0x00008000) /*!< Data endianness bit */ +#define SCB_AIRCR_VECTKEY ((uint32_t)0xFFFF0000) /*!< Register key (VECTKEY) - Reads as 0xFA05 (VECTKEYSTAT) */ + +/******************* Bit definition for SCB_SCR register ********************/ +#define SCB_SCR_SLEEPONEXIT ((uint8_t)0x02) /*!< Sleep on exit bit */ +#define SCB_SCR_SLEEPDEEP ((uint8_t)0x04) /*!< Sleep deep bit */ +#define SCB_SCR_SEVONPEND ((uint8_t)0x10) /*!< Wake up from WFE */ + +/******************** Bit definition for SCB_CCR register *******************/ +#define SCB_CCR_NONBASETHRDENA ((uint16_t)0x0001) /*!< Thread mode can be entered from any level in Handler mode by controlled return value */ +#define SCB_CCR_USERSETMPEND ((uint16_t)0x0002) /*!< Enables user code to write the Software Trigger Interrupt register to trigger (pend) a Main exception */ +#define SCB_CCR_UNALIGN_TRP ((uint16_t)0x0008) /*!< Trap for unaligned access */ +#define SCB_CCR_DIV_0_TRP ((uint16_t)0x0010) /*!< Trap on Divide by 0 */ +#define SCB_CCR_BFHFNMIGN ((uint16_t)0x0100) /*!< Handlers running at priority -1 and -2 */ +#define SCB_CCR_STKALIGN ((uint16_t)0x0200) /*!< On exception entry, the SP used prior to the exception is adjusted to be 8-byte aligned */ + +/******************* Bit definition for SCB_SHPR register ********************/ +#define SCB_SHPR_PRI_N ((uint32_t)0x000000FF) /*!< Priority of system handler 4,8, and 12. Mem Manage, reserved and Debug Monitor */ +#define SCB_SHPR_PRI_N1 ((uint32_t)0x0000FF00) /*!< Priority of system handler 5,9, and 13. Bus Fault, reserved and reserved */ +#define SCB_SHPR_PRI_N2 ((uint32_t)0x00FF0000) /*!< Priority of system handler 6,10, and 14. Usage Fault, reserved and PendSV */ +#define SCB_SHPR_PRI_N3 ((uint32_t)0xFF000000) /*!< Priority of system handler 7,11, and 15. Reserved, SVCall and SysTick */ + +/****************** Bit definition for SCB_SHCSR register *******************/ +#define SCB_SHCSR_MEMFAULTACT ((uint32_t)0x00000001) /*!< MemManage is active */ +#define SCB_SHCSR_BUSFAULTACT ((uint32_t)0x00000002) /*!< BusFault is active */ +#define SCB_SHCSR_USGFAULTACT ((uint32_t)0x00000008) /*!< UsageFault is active */ +#define SCB_SHCSR_SVCALLACT ((uint32_t)0x00000080) /*!< SVCall is active */ +#define SCB_SHCSR_MONITORACT ((uint32_t)0x00000100) /*!< Monitor is active */ +#define SCB_SHCSR_PENDSVACT ((uint32_t)0x00000400) /*!< PendSV is active */ +#define SCB_SHCSR_SYSTICKACT ((uint32_t)0x00000800) /*!< SysTick is active */ +#define SCB_SHCSR_USGFAULTPENDED ((uint32_t)0x00001000) /*!< Usage Fault is pended */ +#define SCB_SHCSR_MEMFAULTPENDED ((uint32_t)0x00002000) /*!< MemManage is pended */ +#define SCB_SHCSR_BUSFAULTPENDED ((uint32_t)0x00004000) /*!< Bus Fault is pended */ +#define SCB_SHCSR_SVCALLPENDED ((uint32_t)0x00008000) /*!< SVCall is pended */ +#define SCB_SHCSR_MEMFAULTENA ((uint32_t)0x00010000) /*!< MemManage enable */ +#define SCB_SHCSR_BUSFAULTENA ((uint32_t)0x00020000) /*!< Bus Fault enable */ +#define SCB_SHCSR_USGFAULTENA ((uint32_t)0x00040000) /*!< UsageFault enable */ + +/******************* Bit definition for SCB_CFSR register *******************/ +/*!< MFSR */ +#define SCB_CFSR_IACCVIOL ((uint32_t)0x00000001) /*!< Instruction access violation */ +#define SCB_CFSR_DACCVIOL ((uint32_t)0x00000002) /*!< Data access violation */ +#define SCB_CFSR_MUNSTKERR ((uint32_t)0x00000008) /*!< Unstacking error */ +#define SCB_CFSR_MSTKERR ((uint32_t)0x00000010) /*!< Stacking error */ +#define SCB_CFSR_MMARVALID ((uint32_t)0x00000080) /*!< Memory Manage Address Register address valid flag */ +/*!< BFSR */ +#define SCB_CFSR_IBUSERR ((uint32_t)0x00000100) /*!< Instruction bus error flag */ +#define SCB_CFSR_PRECISERR ((uint32_t)0x00000200) /*!< Precise data bus error */ +#define SCB_CFSR_IMPRECISERR ((uint32_t)0x00000400) /*!< Imprecise data bus error */ +#define SCB_CFSR_UNSTKERR ((uint32_t)0x00000800) /*!< Unstacking error */ +#define SCB_CFSR_STKERR ((uint32_t)0x00001000) /*!< Stacking error */ +#define SCB_CFSR_BFARVALID ((uint32_t)0x00008000) /*!< Bus Fault Address Register address valid flag */ +/*!< UFSR */ +#define SCB_CFSR_UNDEFINSTR ((uint32_t)0x00010000) /*!< The processor attempt to excecute an undefined instruction */ +#define SCB_CFSR_INVSTATE ((uint32_t)0x00020000) /*!< Invalid combination of EPSR and instruction */ +#define SCB_CFSR_INVPC ((uint32_t)0x00040000) /*!< Attempt to load EXC_RETURN into pc illegally */ +#define SCB_CFSR_NOCP ((uint32_t)0x00080000) /*!< Attempt to use a coprocessor instruction */ +#define SCB_CFSR_UNALIGNED ((uint32_t)0x01000000) /*!< Fault occurs when there is an attempt to make an unaligned memory access */ +#define SCB_CFSR_DIVBYZERO ((uint32_t)0x02000000) /*!< Fault occurs when SDIV or DIV instruction is used with a divisor of 0 */ + +/******************* Bit definition for SCB_HFSR register *******************/ +#define SCB_HFSR_VECTTBL ((uint32_t)0x00000002) /*!< Fault occures because of vector table read on exception processing */ +#define SCB_HFSR_FORCED ((uint32_t)0x40000000) /*!< Hard Fault activated when a configurable Fault was received and cannot activate */ +#define SCB_HFSR_DEBUGEVT ((uint32_t)0x80000000) /*!< Fault related to debug */ + +/******************* Bit definition for SCB_DFSR register *******************/ +#define SCB_DFSR_HALTED ((uint8_t)0x01) /*!< Halt request flag */ +#define SCB_DFSR_BKPT ((uint8_t)0x02) /*!< BKPT flag */ +#define SCB_DFSR_DWTTRAP ((uint8_t)0x04) /*!< Data Watchpoint and Trace (DWT) flag */ +#define SCB_DFSR_VCATCH ((uint8_t)0x08) /*!< Vector catch flag */ +#define SCB_DFSR_EXTERNAL ((uint8_t)0x10) /*!< External debug request flag */ + +/******************* Bit definition for SCB_MMFAR register ******************/ +#define SCB_MMFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Mem Manage fault address field */ + +/******************* Bit definition for SCB_BFAR register *******************/ +#define SCB_BFAR_ADDRESS ((uint32_t)0xFFFFFFFF) /*!< Bus fault address field */ + +/******************* Bit definition for SCB_afsr register *******************/ +#define SCB_AFSR_IMPDEF ((uint32_t)0xFFFFFFFF) /*!< Implementation defined */ + + +/******************************************************************************/ +/* */ +/* External Interrupt/Event Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for EXTI_IMR register *******************/ +#define EXTI_IMR_MR0 ((uint32_t)0x00000001) /*!< Interrupt Mask on line 0 */ +#define EXTI_IMR_MR1 ((uint32_t)0x00000002) /*!< Interrupt Mask on line 1 */ +#define EXTI_IMR_MR2 ((uint32_t)0x00000004) /*!< Interrupt Mask on line 2 */ +#define EXTI_IMR_MR3 ((uint32_t)0x00000008) /*!< Interrupt Mask on line 3 */ +#define EXTI_IMR_MR4 ((uint32_t)0x00000010) /*!< Interrupt Mask on line 4 */ +#define EXTI_IMR_MR5 ((uint32_t)0x00000020) /*!< Interrupt Mask on line 5 */ +#define EXTI_IMR_MR6 ((uint32_t)0x00000040) /*!< Interrupt Mask on line 6 */ +#define EXTI_IMR_MR7 ((uint32_t)0x00000080) /*!< Interrupt Mask on line 7 */ +#define EXTI_IMR_MR8 ((uint32_t)0x00000100) /*!< Interrupt Mask on line 8 */ +#define EXTI_IMR_MR9 ((uint32_t)0x00000200) /*!< Interrupt Mask on line 9 */ +#define EXTI_IMR_MR10 ((uint32_t)0x00000400) /*!< Interrupt Mask on line 10 */ +#define EXTI_IMR_MR11 ((uint32_t)0x00000800) /*!< Interrupt Mask on line 11 */ +#define EXTI_IMR_MR12 ((uint32_t)0x00001000) /*!< Interrupt Mask on line 12 */ +#define EXTI_IMR_MR13 ((uint32_t)0x00002000) /*!< Interrupt Mask on line 13 */ +#define EXTI_IMR_MR14 ((uint32_t)0x00004000) /*!< Interrupt Mask on line 14 */ +#define EXTI_IMR_MR15 ((uint32_t)0x00008000) /*!< Interrupt Mask on line 15 */ +#define EXTI_IMR_MR16 ((uint32_t)0x00010000) /*!< Interrupt Mask on line 16 */ +#define EXTI_IMR_MR17 ((uint32_t)0x00020000) /*!< Interrupt Mask on line 17 */ +#define EXTI_IMR_MR18 ((uint32_t)0x00040000) /*!< Interrupt Mask on line 18 */ +#define EXTI_IMR_MR19 ((uint32_t)0x00080000) /*!< Interrupt Mask on line 19 */ +#define EXTI_IMR_MR20 ((uint32_t)0x00100000) /*!< Interrupt Mask on line 20 */ + +/******************* Bit definition for EXTI_EMR register *******************/ +#define EXTI_EMR_MR0 ((uint32_t)0x00000001) /*!< Event Mask on line 0 */ +#define EXTI_EMR_MR1 ((uint32_t)0x00000002) /*!< Event Mask on line 1 */ +#define EXTI_EMR_MR2 ((uint32_t)0x00000004) /*!< Event Mask on line 2 */ +#define EXTI_EMR_MR3 ((uint32_t)0x00000008) /*!< Event Mask on line 3 */ +#define EXTI_EMR_MR4 ((uint32_t)0x00000010) /*!< Event Mask on line 4 */ +#define EXTI_EMR_MR5 ((uint32_t)0x00000020) /*!< Event Mask on line 5 */ +#define EXTI_EMR_MR6 ((uint32_t)0x00000040) /*!< Event Mask on line 6 */ +#define EXTI_EMR_MR7 ((uint32_t)0x00000080) /*!< Event Mask on line 7 */ +#define EXTI_EMR_MR8 ((uint32_t)0x00000100) /*!< Event Mask on line 8 */ +#define EXTI_EMR_MR9 ((uint32_t)0x00000200) /*!< Event Mask on line 9 */ +#define EXTI_EMR_MR10 ((uint32_t)0x00000400) /*!< Event Mask on line 10 */ +#define EXTI_EMR_MR11 ((uint32_t)0x00000800) /*!< Event Mask on line 11 */ +#define EXTI_EMR_MR12 ((uint32_t)0x00001000) /*!< Event Mask on line 12 */ +#define EXTI_EMR_MR13 ((uint32_t)0x00002000) /*!< Event Mask on line 13 */ +#define EXTI_EMR_MR14 ((uint32_t)0x00004000) /*!< Event Mask on line 14 */ +#define EXTI_EMR_MR15 ((uint32_t)0x00008000) /*!< Event Mask on line 15 */ +#define EXTI_EMR_MR16 ((uint32_t)0x00010000) /*!< Event Mask on line 16 */ +#define EXTI_EMR_MR17 ((uint32_t)0x00020000) /*!< Event Mask on line 17 */ +#define EXTI_EMR_MR18 ((uint32_t)0x00040000) /*!< Event Mask on line 18 */ +#define EXTI_EMR_MR19 ((uint32_t)0x00080000) /*!< Event Mask on line 19 */ +#define EXTI_EMR_MR20 ((uint32_t)0x00100000) /*!< Event Mask on line 20 */ + +/****************** Bit definition for EXTI_RTSR register *******************/ +#define EXTI_RTSR_TR0 ((uint32_t)0x00000001) /*!< Rising trigger event configuration bit of line 0 */ +#define EXTI_RTSR_TR1 ((uint32_t)0x00000002) /*!< Rising trigger event configuration bit of line 1 */ +#define EXTI_RTSR_TR2 ((uint32_t)0x00000004) /*!< Rising trigger event configuration bit of line 2 */ +#define EXTI_RTSR_TR3 ((uint32_t)0x00000008) /*!< Rising trigger event configuration bit of line 3 */ +#define EXTI_RTSR_TR4 ((uint32_t)0x00000010) /*!< Rising trigger event configuration bit of line 4 */ +#define EXTI_RTSR_TR5 ((uint32_t)0x00000020) /*!< Rising trigger event configuration bit of line 5 */ +#define EXTI_RTSR_TR6 ((uint32_t)0x00000040) /*!< Rising trigger event configuration bit of line 6 */ +#define EXTI_RTSR_TR7 ((uint32_t)0x00000080) /*!< Rising trigger event configuration bit of line 7 */ +#define EXTI_RTSR_TR8 ((uint32_t)0x00000100) /*!< Rising trigger event configuration bit of line 8 */ +#define EXTI_RTSR_TR9 ((uint32_t)0x00000200) /*!< Rising trigger event configuration bit of line 9 */ +#define EXTI_RTSR_TR10 ((uint32_t)0x00000400) /*!< Rising trigger event configuration bit of line 10 */ +#define EXTI_RTSR_TR11 ((uint32_t)0x00000800) /*!< Rising trigger event configuration bit of line 11 */ +#define EXTI_RTSR_TR12 ((uint32_t)0x00001000) /*!< Rising trigger event configuration bit of line 12 */ +#define EXTI_RTSR_TR13 ((uint32_t)0x00002000) /*!< Rising trigger event configuration bit of line 13 */ +#define EXTI_RTSR_TR14 ((uint32_t)0x00004000) /*!< Rising trigger event configuration bit of line 14 */ +#define EXTI_RTSR_TR15 ((uint32_t)0x00008000) /*!< Rising trigger event configuration bit of line 15 */ +#define EXTI_RTSR_TR16 ((uint32_t)0x00010000) /*!< Rising trigger event configuration bit of line 16 */ +#define EXTI_RTSR_TR17 ((uint32_t)0x00020000) /*!< Rising trigger event configuration bit of line 17 */ +#define EXTI_RTSR_TR18 ((uint32_t)0x00040000) /*!< Rising trigger event configuration bit of line 18 */ +#define EXTI_RTSR_TR19 ((uint32_t)0x00080000) /*!< Rising trigger event configuration bit of line 19 */ +#define EXTI_RTSR_TR20 ((uint32_t)0x00100000) /*!< Rising trigger event configuration bit of line 20 */ + +/****************** Bit definition for EXTI_FTSR register *******************/ +#define EXTI_FTSR_TR0 ((uint32_t)0x00000001) /*!< Falling trigger event configuration bit of line 0 */ +#define EXTI_FTSR_TR1 ((uint32_t)0x00000002) /*!< Falling trigger event configuration bit of line 1 */ +#define EXTI_FTSR_TR2 ((uint32_t)0x00000004) /*!< Falling trigger event configuration bit of line 2 */ +#define EXTI_FTSR_TR3 ((uint32_t)0x00000008) /*!< Falling trigger event configuration bit of line 3 */ +#define EXTI_FTSR_TR4 ((uint32_t)0x00000010) /*!< Falling trigger event configuration bit of line 4 */ +#define EXTI_FTSR_TR5 ((uint32_t)0x00000020) /*!< Falling trigger event configuration bit of line 5 */ +#define EXTI_FTSR_TR6 ((uint32_t)0x00000040) /*!< Falling trigger event configuration bit of line 6 */ +#define EXTI_FTSR_TR7 ((uint32_t)0x00000080) /*!< Falling trigger event configuration bit of line 7 */ +#define EXTI_FTSR_TR8 ((uint32_t)0x00000100) /*!< Falling trigger event configuration bit of line 8 */ +#define EXTI_FTSR_TR9 ((uint32_t)0x00000200) /*!< Falling trigger event configuration bit of line 9 */ +#define EXTI_FTSR_TR10 ((uint32_t)0x00000400) /*!< Falling trigger event configuration bit of line 10 */ +#define EXTI_FTSR_TR11 ((uint32_t)0x00000800) /*!< Falling trigger event configuration bit of line 11 */ +#define EXTI_FTSR_TR12 ((uint32_t)0x00001000) /*!< Falling trigger event configuration bit of line 12 */ +#define EXTI_FTSR_TR13 ((uint32_t)0x00002000) /*!< Falling trigger event configuration bit of line 13 */ +#define EXTI_FTSR_TR14 ((uint32_t)0x00004000) /*!< Falling trigger event configuration bit of line 14 */ +#define EXTI_FTSR_TR15 ((uint32_t)0x00008000) /*!< Falling trigger event configuration bit of line 15 */ +#define EXTI_FTSR_TR16 ((uint32_t)0x00010000) /*!< Falling trigger event configuration bit of line 16 */ +#define EXTI_FTSR_TR17 ((uint32_t)0x00020000) /*!< Falling trigger event configuration bit of line 17 */ +#define EXTI_FTSR_TR18 ((uint32_t)0x00040000) /*!< Falling trigger event configuration bit of line 18 */ +#define EXTI_FTSR_TR19 ((uint32_t)0x00080000) /*!< Falling trigger event configuration bit of line 19 */ +#define EXTI_FTSR_TR20 ((uint32_t)0x00100000) /*!< Falling trigger event configuration bit of line 20 */ + +/****************** Bit definition for EXTI_SWIER register ******************/ +#define EXTI_SWIER_SWIER0 ((uint32_t)0x00000001) /*!< Software Interrupt on line 0 */ +#define EXTI_SWIER_SWIER1 ((uint32_t)0x00000002) /*!< Software Interrupt on line 1 */ +#define EXTI_SWIER_SWIER2 ((uint32_t)0x00000004) /*!< Software Interrupt on line 2 */ +#define EXTI_SWIER_SWIER3 ((uint32_t)0x00000008) /*!< Software Interrupt on line 3 */ +#define EXTI_SWIER_SWIER4 ((uint32_t)0x00000010) /*!< Software Interrupt on line 4 */ +#define EXTI_SWIER_SWIER5 ((uint32_t)0x00000020) /*!< Software Interrupt on line 5 */ +#define EXTI_SWIER_SWIER6 ((uint32_t)0x00000040) /*!< Software Interrupt on line 6 */ +#define EXTI_SWIER_SWIER7 ((uint32_t)0x00000080) /*!< Software Interrupt on line 7 */ +#define EXTI_SWIER_SWIER8 ((uint32_t)0x00000100) /*!< Software Interrupt on line 8 */ +#define EXTI_SWIER_SWIER9 ((uint32_t)0x00000200) /*!< Software Interrupt on line 9 */ +#define EXTI_SWIER_SWIER10 ((uint32_t)0x00000400) /*!< Software Interrupt on line 10 */ +#define EXTI_SWIER_SWIER11 ((uint32_t)0x00000800) /*!< Software Interrupt on line 11 */ +#define EXTI_SWIER_SWIER12 ((uint32_t)0x00001000) /*!< Software Interrupt on line 12 */ +#define EXTI_SWIER_SWIER13 ((uint32_t)0x00002000) /*!< Software Interrupt on line 13 */ +#define EXTI_SWIER_SWIER14 ((uint32_t)0x00004000) /*!< Software Interrupt on line 14 */ +#define EXTI_SWIER_SWIER15 ((uint32_t)0x00008000) /*!< Software Interrupt on line 15 */ +#define EXTI_SWIER_SWIER16 ((uint32_t)0x00010000) /*!< Software Interrupt on line 16 */ +#define EXTI_SWIER_SWIER17 ((uint32_t)0x00020000) /*!< Software Interrupt on line 17 */ +#define EXTI_SWIER_SWIER18 ((uint32_t)0x00040000) /*!< Software Interrupt on line 18 */ +#define EXTI_SWIER_SWIER19 ((uint32_t)0x00080000) /*!< Software Interrupt on line 19 */ +#define EXTI_SWIER_SWIER20 ((uint32_t)0x00100000) /*!< Software Interrupt on line 20 */ + +/******************* Bit definition for EXTI_PR register ********************/ +#define EXTI_PR_PR0 ((uint32_t)0x00000001) /*!< Pending bit 0 */ +#define EXTI_PR_PR1 ((uint32_t)0x00000002) /*!< Pending bit 1 */ +#define EXTI_PR_PR2 ((uint32_t)0x00000004) /*!< Pending bit 2 */ +#define EXTI_PR_PR3 ((uint32_t)0x00000008) /*!< Pending bit 3 */ +#define EXTI_PR_PR4 ((uint32_t)0x00000010) /*!< Pending bit 4 */ +#define EXTI_PR_PR5 ((uint32_t)0x00000020) /*!< Pending bit 5 */ +#define EXTI_PR_PR6 ((uint32_t)0x00000040) /*!< Pending bit 6 */ +#define EXTI_PR_PR7 ((uint32_t)0x00000080) /*!< Pending bit 7 */ +#define EXTI_PR_PR8 ((uint32_t)0x00000100) /*!< Pending bit 8 */ +#define EXTI_PR_PR9 ((uint32_t)0x00000200) /*!< Pending bit 9 */ +#define EXTI_PR_PR10 ((uint32_t)0x00000400) /*!< Pending bit 10 */ +#define EXTI_PR_PR11 ((uint32_t)0x00000800) /*!< Pending bit 11 */ +#define EXTI_PR_PR12 ((uint32_t)0x00001000) /*!< Pending bit 12 */ +#define EXTI_PR_PR13 ((uint32_t)0x00002000) /*!< Pending bit 13 */ +#define EXTI_PR_PR14 ((uint32_t)0x00004000) /*!< Pending bit 14 */ +#define EXTI_PR_PR15 ((uint32_t)0x00008000) /*!< Pending bit 15 */ +#define EXTI_PR_PR16 ((uint32_t)0x00010000) /*!< Pending bit 16 */ +#define EXTI_PR_PR17 ((uint32_t)0x00020000) /*!< Pending bit 17 */ +#define EXTI_PR_PR18 ((uint32_t)0x00040000) /*!< Pending bit 18 */ +#define EXTI_PR_PR19 ((uint32_t)0x00080000) /*!< Pending bit 19 */ +#define EXTI_PR_PR20 ((uint32_t)0x00100000) /*!< Pending bit 20 */ + +/******************************************************************************/ +/* */ +/* DMA Controller */ +/* */ +/******************************************************************************/ + +/******************* Bit definition for DMA_ISR register ********************/ +#define DMA_ISR_GIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt flag */ +#define DMA_ISR_TCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete flag */ +#define DMA_ISR_HTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer flag */ +#define DMA_ISR_TEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error flag */ +#define DMA_ISR_GIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt flag */ +#define DMA_ISR_TCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete flag */ +#define DMA_ISR_HTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer flag */ +#define DMA_ISR_TEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error flag */ +#define DMA_ISR_GIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt flag */ +#define DMA_ISR_TCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete flag */ +#define DMA_ISR_HTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer flag */ +#define DMA_ISR_TEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error flag */ +#define DMA_ISR_GIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt flag */ +#define DMA_ISR_TCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete flag */ +#define DMA_ISR_HTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer flag */ +#define DMA_ISR_TEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error flag */ +#define DMA_ISR_GIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt flag */ +#define DMA_ISR_TCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete flag */ +#define DMA_ISR_HTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer flag */ +#define DMA_ISR_TEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error flag */ + +/******************* Bit definition for DMA_IFCR register *******************/ +#define DMA_IFCR_CGIF1 ((uint32_t)0x00000001) /*!< Channel 1 Global interrupt clear */ +#define DMA_IFCR_CTCIF1 ((uint32_t)0x00000002) /*!< Channel 1 Transfer Complete clear */ +#define DMA_IFCR_CHTIF1 ((uint32_t)0x00000004) /*!< Channel 1 Half Transfer clear */ +#define DMA_IFCR_CTEIF1 ((uint32_t)0x00000008) /*!< Channel 1 Transfer Error clear */ +#define DMA_IFCR_CGIF2 ((uint32_t)0x00000010) /*!< Channel 2 Global interrupt clear */ +#define DMA_IFCR_CTCIF2 ((uint32_t)0x00000020) /*!< Channel 2 Transfer Complete clear */ +#define DMA_IFCR_CHTIF2 ((uint32_t)0x00000040) /*!< Channel 2 Half Transfer clear */ +#define DMA_IFCR_CTEIF2 ((uint32_t)0x00000080) /*!< Channel 2 Transfer Error clear */ +#define DMA_IFCR_CGIF3 ((uint32_t)0x00000100) /*!< Channel 3 Global interrupt clear */ +#define DMA_IFCR_CTCIF3 ((uint32_t)0x00000200) /*!< Channel 3 Transfer Complete clear */ +#define DMA_IFCR_CHTIF3 ((uint32_t)0x00000400) /*!< Channel 3 Half Transfer clear */ +#define DMA_IFCR_CTEIF3 ((uint32_t)0x00000800) /*!< Channel 3 Transfer Error clear */ +#define DMA_IFCR_CGIF4 ((uint32_t)0x00001000) /*!< Channel 4 Global interrupt clear */ +#define DMA_IFCR_CTCIF4 ((uint32_t)0x00002000) /*!< Channel 4 Transfer Complete clear */ +#define DMA_IFCR_CHTIF4 ((uint32_t)0x00004000) /*!< Channel 4 Half Transfer clear */ +#define DMA_IFCR_CTEIF4 ((uint32_t)0x00008000) /*!< Channel 4 Transfer Error clear */ +#define DMA_IFCR_CGIF5 ((uint32_t)0x00010000) /*!< Channel 5 Global interrupt clear */ +#define DMA_IFCR_CTCIF5 ((uint32_t)0x00020000) /*!< Channel 5 Transfer Complete clear */ +#define DMA_IFCR_CHTIF5 ((uint32_t)0x00040000) /*!< Channel 5 Half Transfer clear */ +#define DMA_IFCR_CTEIF5 ((uint32_t)0x00080000) /*!< Channel 5 Transfer Error clear */ + +/******************* Bit definition for DMA_CCR1 register *******************/ +#define DMA_CCR1_EN ((uint16_t)0x0001) /*!< Channel enable*/ +#define DMA_CCR1_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR1_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR1_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR1_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR1_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR1_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR1_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR1_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR1_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR1_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR1_PSIZE_8BIT ((uint16_t)0x0000) /*!< PSIZE 8 bit */ +#define DMA_CCR1_PSIZE_16BIT ((uint16_t)0x0100) /*!< PSIZE 16 bit */ +#define DMA_CCR1_PSIZE_32BIT ((uint16_t)0x0200) /*!< PSIZE 32 bit */ + +#define DMA_CCR1_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR1_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR1_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR1_MSIZE_8BIT ((uint16_t)0x0000) /*!< MSIZE 8 bit */ +#define DMA_CCR1_MSIZE_16BIT ((uint16_t)0x0400) /*!< MSIZE 16 bit */ +#define DMA_CCR1_MSIZE_32BIT ((uint16_t)0x0800) /*!< MSIZE 32 bit */ + +#define DMA_CCR1_PL ((uint16_t)0x3000) /*!< PL[1:0] bits(Channel Priority level) */ +#define DMA_CCR1_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR1_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR1_PL_LOW ((uint16_t)0x0000) /*!< PL low*/ +#define DMA_CCR1_PL_MEDIUM ((uint16_t)0x1000) /*!< PL medium */ +#define DMA_CCR1_PL_HIGH ((uint16_t)0x2000) /*!< PL high */ +#define DMA_CCR1_PL_HIGHEST ((uint16_t)0x3000) /*!< PL highest */ + +#define DMA_CCR1_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/******************* Bit definition for DMA_CCR2 register *******************/ +#define DMA_CCR2_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR2_TCIE ((uint16_t)0x0002) /*!< ransfer complete interrupt enable */ +#define DMA_CCR2_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR2_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR2_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR2_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR2_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR2_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR2_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR2_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR2_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR2_PSIZE_8BIT ((uint16_t)0x0000) /*!< PSIZE 8 bit */ +#define DMA_CCR2_PSIZE_16BIT ((uint16_t)0x0100) /*!< PSIZE 16 bit */ +#define DMA_CCR2_PSIZE_32BIT ((uint16_t)0x0200) /*!< PSIZE 32 bit */ + +#define DMA_CCR2_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR2_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR2_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR2_MSIZE_8BIT ((uint16_t)0x0000) /*!< MSIZE 8 bit */ +#define DMA_CCR2_MSIZE_16BIT ((uint16_t)0x0400) /*!< MSIZE 16 bit */ +#define DMA_CCR2_MSIZE_32BIT ((uint16_t)0x0800) /*!< MSIZE 32 bit */ + +#define DMA_CCR2_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR2_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR2_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR2_PL_LOW ((uint16_t)0x0000) /*!< PL low*/ +#define DMA_CCR2_PL_MEDIUM ((uint16_t)0x1000) /*!< PL medium */ +#define DMA_CCR2_PL_HIGH ((uint16_t)0x2000) /*!< PL high */ +#define DMA_CCR2_PL_HIGHEST ((uint16_t)0x3000) /*!< PL highest */ + +#define DMA_CCR2_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/******************* Bit definition for DMA_CCR3 register *******************/ +#define DMA_CCR3_EN ((uint16_t)0x0001) /*!< Channel enable */ +#define DMA_CCR3_TCIE ((uint16_t)0x0002) /*!< Transfer complete interrupt enable */ +#define DMA_CCR3_HTIE ((uint16_t)0x0004) /*!< Half Transfer interrupt enable */ +#define DMA_CCR3_TEIE ((uint16_t)0x0008) /*!< Transfer error interrupt enable */ +#define DMA_CCR3_DIR ((uint16_t)0x0010) /*!< Data transfer direction */ +#define DMA_CCR3_CIRC ((uint16_t)0x0020) /*!< Circular mode */ +#define DMA_CCR3_PINC ((uint16_t)0x0040) /*!< Peripheral increment mode */ +#define DMA_CCR3_MINC ((uint16_t)0x0080) /*!< Memory increment mode */ + +#define DMA_CCR3_PSIZE ((uint16_t)0x0300) /*!< PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CCR3_PSIZE_0 ((uint16_t)0x0100) /*!< Bit 0 */ +#define DMA_CCR3_PSIZE_1 ((uint16_t)0x0200) /*!< Bit 1 */ + +#define DMA_CCR3_PSIZE_8BIT ((uint16_t)0x0000) /*!< PSIZE 8 bit */ +#define DMA_CCR3_PSIZE_16BIT ((uint16_t)0x0100) /*!< PSIZE 16 bit */ +#define DMA_CCR3_PSIZE_32BIT ((uint16_t)0x0200) /*!< PSIZE 32 bit */ + + +#define DMA_CCR3_MSIZE ((uint16_t)0x0C00) /*!< MSIZE[1:0] bits (Memory size) */ +#define DMA_CCR3_MSIZE_0 ((uint16_t)0x0400) /*!< Bit 0 */ +#define DMA_CCR3_MSIZE_1 ((uint16_t)0x0800) /*!< Bit 1 */ + +#define DMA_CCR3_MSIZE_8BIT ((uint16_t)0x0000) /*!< MSIZE 8 bit */ +#define DMA_CCR3_MSIZE_16BIT ((uint16_t)0x0400) /*!< MSIZE 16 bit */ +#define DMA_CCR3_MSIZE_32BIT ((uint16_t)0x0800) /*!< MSIZE 32 bit */ + + +#define DMA_CCR3_PL ((uint16_t)0x3000) /*!< PL[1:0] bits (Channel Priority level) */ +#define DMA_CCR3_PL_0 ((uint16_t)0x1000) /*!< Bit 0 */ +#define DMA_CCR3_PL_1 ((uint16_t)0x2000) /*!< Bit 1 */ + +#define DMA_CCR3_PL_LOW ((uint16_t)0x0000) /*!< PL low*/ +#define DMA_CCR3_PL_MEDIUM ((uint16_t)0x1000) /*!< PL medium */ +#define DMA_CCR3_PL_HIGH ((uint16_t)0x2000) /*!< PL high */ +#define DMA_CCR3_PL_HIGHEST ((uint16_t)0x3000) /*!< PL highest */ + +#define DMA_CCR3_MEM2MEM ((uint16_t)0x4000) /*!< Memory to memory mode */ + +/*!<****************** Bit definition for DMA_CCR4 register *******************/ +#define DMA_CCR4_EN ((uint16_t)0x0001) /*! Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD RTC_IRQHandler ; RTC through EXTI Line & Tamper + DCD FLASH_IRQHandler ; FLASH + DCD RCC_CRS_IRQHandler ; RCC & CRS + DCD EXTI0_1_IRQHandler ; EXTI Line 0 and 1 + DCD EXTI2_3_IRQHandler ; EXTI Line 2 and 3 + DCD EXTI4_15_IRQHandler ; EXTI Line 4 to 15 + DCD 0 ; Reserved + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_3_IRQHandler ; DMA1 Channel 2 and Channel 3 + DCD DMA1_Channel4_5_IRQHandler ; DMA1 Channel 4 and Channel 5 + DCD ADC_COMP_IRQHandler ; ADC1 & COMP + DCD TIM1_BRK_UP_TRG_COM_IRQHandler ; TIM1 Break, Update, Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM14_IRQHandler ; TIM14 + DCD 0 ; Reserved + DCD TIM16_IRQHandler ; TIM16 + DCD TIM17_IRQHandler ; TIM17 + DCD I2C1_IRQHandler ; I2C1 + DCD 0 ; Reserved + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD UART1_IRQHandler ; UART1 + DCD UART2_IRQHandler ; UART2 + DCD AES_IRQHandler ; AES + DCD CAN_IRQHandler ; CAN + DCD USB_IRQHandler ; USB + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler routine +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IMPORT SystemInit + + + LDR R0, =__initial_sp ; set stack pointer + MSR MSP, R0 + +;;Check if boot space corresponds to test memory + + LDR R0,=0x00000004 + LDR R1, [R0] + LSRS R1, R1, #24 + LDR R2,=0x1F + CMP R1, R2 + + BNE ApplicationStart + +;; SYSCFG clock enable + + LDR R0,=0x40021018 + LDR R1,=0x00000001 + STR R1, [R0] + +;; Set CFGR1 register with flash memory remap at address 0 + + LDR R0,=0x40010000 + LDR R1,=0x00000000 + STR R1, [R0] +ApplicationStart + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_CRS_IRQHandler [WEAK] + EXPORT EXTI0_1_IRQHandler [WEAK] + EXPORT EXTI2_3_IRQHandler [WEAK] + EXPORT EXTI4_15_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_5_IRQHandler [WEAK] + EXPORT ADC_COMP_IRQHandler [WEAK] + EXPORT TIM1_BRK_UP_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM14_IRQHandler [WEAK] + EXPORT TIM16_IRQHandler [WEAK] + EXPORT TIM17_IRQHandler [WEAK] + EXPORT I2C1_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT AES_IRQHandler [WEAK] + EXPORT CAN_IRQHandler [WEAK] + EXPORT USB_IRQHandler [WEAK] + + +WWDG_IRQHandler +PVD_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_CRS_IRQHandler +EXTI0_1_IRQHandler +EXTI2_3_IRQHandler +EXTI4_15_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_3_IRQHandler +DMA1_Channel4_5_IRQHandler +ADC_COMP_IRQHandler +TIM1_BRK_UP_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM14_IRQHandler +TIM16_IRQHandler +TIM17_IRQHandler +I2C1_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +AES_IRQHandler +CAN_IRQHandler +USB_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************** (C) COPYRIGHT 2017 MindMotion ******************** diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.c b/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.c new file mode 100644 index 0000000000..ddcb40c867 --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.c @@ -0,0 +1,662 @@ +/** +****************************************************************************** +* @file system_MM32L0xx.c +* @author AE Team +* @version V2.0.0 +* @date 22/08/2017 +* @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. +* +* 1. This file provides two functions and one global variable to be called from +* user application: +* - SystemInit(): Setups the system clock (System clock source, PLL Multiplier +* factors, AHB/APBx prescalers and Flash settings). +* This function is called at startup just after reset and +* before branch to main program. This call is made inside +* the "startup_MM32x031_xx.s" file. +* +* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used +* by the user application to setup the SysTick +* timer or configure other parameters. +* +* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must +* be called whenever the core clock is changed +* during program execution. +* +* 2. After each device reset the HSI (8 MHz) is used as system clock source. +* Then SystemInit() function is called, in "system_MM32L0xx.s" file, to +* configure the system clock before to branch to main program. +* +* 3. If the system clock source selected by user fails to startup, the SystemInit() +* function will do nothing and HSI still used as system clock source. User can +* add some code to deal with this issue inside the SetSysClock() function. +* +* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on +* the product used), refer to "HSE_VALUE" define in "MM32L073.h" file. +* When HSE is used as system clock source, directly or through PLL, and you +* are using different crystal you have to adapt the HSE value to your own +* configuration. +* +****************************************************************************** +* @attention +* +* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, MINDMOTION SHALL NOT BE HELD LIABLE FOR ANY +* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING +* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE +* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +* +****************************************************************************** +*/ + +/** @addtogroup CMSIS +* @{ +*/ +#include "HAL_device.h" + + +/** +* @} +*/ + +/** +* @} +*/ + +/*!< Uncomment the line corresponding to the desired System clock (SYSCLK) +frequency (after reset the HSI is used as SYSCLK source) + +IMPORTANT NOTE: +============== +1. After each device reset the HSI is used as System clock source. + +2. Please make sure that the selected System clock doesn't exceed your device's +maximum frequency. + +3. If none of the define below is enabled, the HSI is used as System clock +source. + +4. The System clock configuration functions provided within this file assume that: +- For Low, Medium and High density Value line devices an external 8MHz +crystal is used to drive the System clock. +- For Low, Medium and High density devices an external 8MHz crystal is +used to drive the System clock. +- For Connectivity line devices an external 25MHz crystal is used to drive +the System clock. +If you are using different crystal you have to adapt those functions accordingly. +*/ + +//#define SYSCLK_FREQ_HSE HSE_VALUE +//#define SYSCLK_FREQ_24MHz 24000000 +//#define SYSCLK_FREQ_36MHz 36000000 +//#define SYSCLK_FREQ_48MHz 48000000 + +//#define SYSCLK_HSI_24MHz 24000000 +//#define SYSCLK_HSI_36MHz 36000000 +#define SYSCLK_HSI_48MHz 48000000 + + +/*!< Uncomment the following line if you need to relocate your vector Table in +Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. +This value must be a multiple of 0x200. */ + +/** +* @} +*/ + +/******************************************************************************* +* Clock Definitions +*******************************************************************************/ +#ifdef SYSCLK_FREQ_HSE +uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_24MHz +uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_36MHz +uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_48MHz +uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */ + +#elif defined SYSCLK_HSI_24MHz +uint32_t SystemCoreClock = SYSCLK_HSI_24MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_HSI_36MHz +uint32_t SystemCoreClock = SYSCLK_HSI_36MHz; /*!< System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_HSI_48MHz +uint32_t SystemCoreClock = SYSCLK_HSI_48MHz; /*!< System Clock Frequency (Core Clock) */ + +#else /*!< HSI Selected as System Clock source */ +uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ +#endif + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +/** +* @} +*/ + +static void SetSysClock(void); + +#ifdef SYSCLK_FREQ_HSE +static void SetSysClockToHSE(void); +#elif defined SYSCLK_FREQ_24MHz +static void SetSysClockTo24(void); +#elif defined SYSCLK_FREQ_36MHz +static void SetSysClockTo36(void); +#elif defined SYSCLK_FREQ_48MHz +static void SetSysClockTo48(void); + +#elif defined SYSCLK_HSI_24MHz +static void SetSysClockTo24_HSI(void); +#elif defined SYSCLK_HSI_36MHz +static void SetSysClockTo36_HSI(void); +#elif defined SYSCLK_HSI_48MHz +static void SetSysClockTo48_HSI(void); + +#endif + +#ifdef DATA_IN_ExtSRAM +static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** +* @} +*/ + +/** +* @brief Setup the microcontroller system +* Initialize the Embedded Flash Interface, the PLL and update the +* SystemCoreClock variable. +* @note This function should be used only after reset. +* @param None +* @retval None +*/ +void SystemInit (void) +{ + /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x1; + + + /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ + RCC->CFGR &= (uint32_t)0xF8FFC00C; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ + RCC->CFGR &= (uint32_t)0xFF3CFFFF; + RCC->CR &= (uint32_t)0x008FFFFF; + + /* Disable all interrupts and clear pending bits */ + RCC->CIR &= 0xFF62E262; + + /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ + /* Configure the Flash Latency cycles and enable prefetch buffer */ + + SetSysClock(); + +} + +/** +* @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. +* @param None +* @retval None +*/ +static void SetSysClock(void) +{ +#ifdef SYSCLK_FREQ_HSE + SetSysClockToHSE(); +#elif defined SYSCLK_FREQ_24MHz + SetSysClockTo24(); +#elif defined SYSCLK_FREQ_36MHz + SetSysClockTo36(); +#elif defined SYSCLK_FREQ_48MHz + SetSysClockTo48(); + +#elif defined SYSCLK_HSI_24MHz + SetSysClockTo24_HSI(); +#elif defined SYSCLK_HSI_36MHz + SetSysClockTo36_HSI(); +#elif defined SYSCLK_HSI_48MHz + SetSysClockTo48_HSI(); +#endif + + /* If none of the define above is enabled, the HSI is used as System clock + source (default after reset) */ +} + +#ifdef SYSCLK_FREQ_HSE +/** +* @brief Selects HSE as System clock source and configure HCLK, PCLK2 +* and PCLK1 prescalers. +* @note This function should be used only after reset. +* @param None +* @retval None +*/ +static void SetSysClockToHSE(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + int nTime = 2; + u16 i = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + /* Software delay needs more than 2ms */ + while(nTime--) + { + i = 750; + while(i--); + } + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state ,bit0~2*/ + FLASH->ACR &= ~0x07; + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* Select HSE as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_HSE; + + /* Wait till HSE is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x04) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_24MHz +/** +* @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 +* and PCLK1 prescalers. +* @note This function should be used only after reset. +* @param None +* @retval None +*/ +static void SetSysClockTo24(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + int nTime = 2; + u16 i = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + /* Software delay needs more than 2ms */ + while(nTime--) + { + i = 750; + while(i--); + } + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + /* Flash 0 wait state ,bit0~2*/ + FLASH->ACR &= ~0x07; + FLASH->ACR |= 0x01; + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* PLL configuration: = (HSE ) * (2+1) = 24 MHz */ + RCC->CFGR &= (uint32_t)0xFFFCFFFF; + RCC->CR &= (uint32_t)0x000FFFFF; + + RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC ; + RCC->CR |= 0x08000000;//pll=3/1 + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_36MHz +/** +* @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 +* and PCLK1 prescalers. +* @note This function should be used only after reset. +* @param None +* @retval None +*/ +static void SetSysClockTo36(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + int nTime = 2; + u16 i = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + /* Software delay needs more than 2ms */ + while(nTime--) + { + i = 750; + while(i--); + } + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + + /* Flash 0 wait state ,bit0~2*/ + FLASH->ACR &= ~0x07; + FLASH->ACR |= 0x01; + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1; + + /* PLL configuration: = (HSE ) * (8+1)/(1+1) = 36 MHz */ + RCC->CFGR &= (uint32_t)0xFFFCFFFF; + RCC->CR &= (uint32_t)0x000FFFFF; + + RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC ; + RCC->CR |= 0x20100000;//pll = 9/2 + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} +#elif defined SYSCLK_FREQ_48MHz +/** +* @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 +* and PCLK1 prescalers. +* @note This function should be used only after reset. +* @param None +* @retval None +*/ +static void SetSysClockTo48(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + int nTime = 2; + u16 i = 0; + + /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + /* Software delay needs more than 2ms */ + while(nTime--) + { + i = 750; + while(i--); + } + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACR |= FLASH_ACR_PRFTBE; + /* Flash 0 wait state ,bit0~2*/ + FLASH->ACR &= ~0x07; + FLASH->ACR |=0x02; + /* HCLK = SYSCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; + + /* PCLK1 = HCLK */ + RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; + + /* PLL configuration: = (HSE ) * (5+1) = 48MHz */ + RCC->CFGR &= (uint32_t)0xFFFCFFFF; + RCC->CR &= (uint32_t)0x000FFFFF; + + RCC->CFGR |= (uint32_t ) RCC_CFGR_PLLSRC ; + RCC->CR |= 0x14000000;//pll = 6/1 + + /* Enable PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; + + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) + { + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } +} + +#elif defined SYSCLK_HSI_24MHz +void SetSysClockTo24_HSI() +{ + unsigned char temp=0; + + RCC->CR|=RCC_CR_HSION; + while(!(RCC->CR&RCC_CR_HSIRDY)); + RCC->CFGR=RCC_CFGR_PPRE1_2; //APB1=DIV2;APB2=DIV1;AHB=DIV1; + + RCC->CFGR&=~RCC_CFGR_PLLSRC; //PLLSRC ON + + RCC->CR &=~(RCC_CR_PLLON); //ÇåPLL// RCC->CR &=~(7<<20); //ÇåPLL + + RCC->CR &=~(0x1f<<26); + RCC->CR|=(2 - 1) << 26; //ÉèÖÃPLLÖµ 2~16 + + FLASH->ACR=FLASH_ACR_PRFTBE; //FLASH 0¸öÑÓʱÖÜÆÚ + + RCC->CR|=RCC_CR_PLLON; //PLLON + while(!(RCC->CR&RCC_CR_PLLRDY));//µÈ´ýPLLËø¶¨ + RCC->CFGR&=~RCC_CFGR_SW; + RCC->CFGR|=RCC_CFGR_SW_PLL;//PLL×÷ΪϵͳʱÖÓ + while(temp!=0x02) //µÈ´ýPLL×÷ΪϵͳʱÖÓÉèÖóɹ¦ + { + temp=RCC->CFGR>>2; + temp&=0x03; + } +} + +#elif defined SYSCLK_HSI_36MHz +void SetSysClockTo36_HSI() +{ + unsigned char temp=0; + + RCC->CR|=RCC_CR_HSION; + while(!(RCC->CR&RCC_CR_HSIRDY)); + RCC->CFGR=RCC_CFGR_PPRE1_2; //APB1=DIV2;APB2=DIV1;AHB=DIV1; + + RCC->CFGR&=~RCC_CFGR_PLLSRC; //PLLSRC ON + + RCC->CR &=~(RCC_CR_PLLON); //ÇåPLL// RCC->CR &=~(7<<20); //ÇåPLL + + RCC->CR &=~(0x1f<<26); + RCC->CR|=(3 - 1) << 26; //ÉèÖÃPLLÖµ 2~16 + + FLASH->ACR=FLASH_ACR_LATENCY_1|FLASH_ACR_PRFTBE; //FLASH 1¸öÑÓʱÖÜÆÚ + + RCC->CR|=RCC_CR_PLLON; //PLLON + while(!(RCC->CR&RCC_CR_PLLRDY));//µÈ´ýPLLËø¶¨ + RCC->CFGR&=~RCC_CFGR_SW; + RCC->CFGR|=RCC_CFGR_SW_PLL;//PLL×÷ΪϵͳʱÖÓ + while(temp!=0x02) //µÈ´ýPLL×÷ΪϵͳʱÖÓÉèÖóɹ¦ + { + temp=RCC->CFGR>>2; + temp&=0x03; + } +} + +#elif defined SYSCLK_HSI_48MHz +void SetSysClockTo48_HSI() +{ + unsigned char temp=0; + + RCC->CR|=RCC_CR_HSION; + while(!(RCC->CR&RCC_CR_HSIRDY)); + RCC->CFGR=RCC_CFGR_PPRE1_2; //APB1=DIV2;APB2=DIV1;AHB=DIV1; + + RCC->CFGR&=~RCC_CFGR_PLLSRC; //PLLSRC ON + + RCC->CR &=~(RCC_CR_PLLON); //ÇåPLL// RCC->CR &=~(7<<20); //ÇåPLL + + RCC->CR &=~(0x1f<<26); + RCC->CR|=(4 - 1) << 26; //ÉèÖÃPLLÖµ 2~16 + + FLASH->ACR=FLASH_ACR_LATENCY_1|FLASH_ACR_PRFTBE; //FLASH 1¸öÑÓʱÖÜÆÚ + + RCC->CR|=RCC_CR_PLLON; //PLLON + while(!(RCC->CR&RCC_CR_PLLRDY));//µÈ´ýPLLËø¶¨ + RCC->CFGR&=~RCC_CFGR_SW; + RCC->CFGR|=RCC_CFGR_SW_PLL;//PLL×÷ΪϵͳʱÖÓ + while(temp!=0x02) //µÈ´ýPLL×÷ΪϵͳʱÖÓÉèÖóɹ¦ + { + temp=RCC->CFGR>>2; + temp&=0x03; + } +} + +#endif + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ +/*-------------------------(C) COPYRIGHT 2017 MindMotion ----------------------*/ diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.h b/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.h new file mode 100644 index 0000000000..45e948367f --- /dev/null +++ b/bsp/mm32l07x/Libraries/MM32L0xx/Source/system_MM32L0xx.h @@ -0,0 +1,2 @@ +extern uint32_t SystemCoreClock; +extern void SystemInit(void); diff --git a/bsp/mm32l07x/Libraries/MM32L0xx/change list.txt b/bsp/mm32l07x/Libraries/MM32L0xx/change list.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bsp/mm32l07x/Libraries/SConscript b/bsp/mm32l07x/Libraries/SConscript new file mode 100644 index 0000000000..6b7f0385f6 --- /dev/null +++ b/bsp/mm32l07x/Libraries/SConscript @@ -0,0 +1,18 @@ +from building import * +import rtconfig +cwd = GetCurrentDir() +src = ['MM32L0xx/Source/system_MM32L0xx.c'] +CPPPATH = [cwd + '/CMSIS/CORE', cwd + '/MM32L0xx/Include', cwd + '/MM32L0xx/Source', cwd + '/MM32L0xx/HAL_lib/inc'] + +src += Glob('MM32L0xx/HAL_lib/src/*.c') +CPPDEFINES = ['USE_STDPERIPH_DRIVER'] + +if rtconfig.CROSS_TOOL == 'gcc': + src += ['MM32L0xx/Source/GCC_StartAsm/startup_MM32L0xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += ['MM32L0xx/Source/KEIL_StartAsm/startup_MM32L0xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += ['MM32L0xx/Source/IAR_StartAsm/startup_MM32L0xx.s'] +group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) + +Return('group') diff --git a/bsp/mm32l07x/README.md b/bsp/mm32l07x/README.md new file mode 100644 index 0000000000..98e710362a --- /dev/null +++ b/bsp/mm32l07x/README.md @@ -0,0 +1,109 @@ +# MM32 MiniBoard Rev.D2 开呿¿BSP 说明 + +标签: MM32ã€Cortex-M0ã€MM32L073PFã€å›½äº§MCU + +--- + +## 1. 简介 + +本文档为上海çµåŠ¨å¾®ç”µå­AE团队为MM32 MiniBoard开呿¿æä¾›çš„BSP(æ¿çº§æ”¯æŒåŒ…) 说明。通过阅读本文档,开å‘者å¯ä»¥å¿«é€Ÿåœ°ä¸Šæ‰‹è¯¥ BSP,将 RT-Thread è¿è¡Œåœ¨å¼€å‘æ¿ä¸Šã€‚ + +### 1.1 开呿¿ä»‹ç» + +MM32 MiniBoard Rev.D2 是为了用户快速上手ã€äº†è§£å­¦ä¹ MM32系列MCU的一å—å…¥é—¨çº§å¼€å‘æ¿ï¼Œå¯æ»¡è¶³åŸºç¡€æµ‹è¯•åŠé«˜ç«¯å¼€å‘需求。 + +开呿¿å¤–观如下图所示: + +MM32 MiniBoard Rev.D2 + +![MM32 MiniBoard Rev.D2](figures/MM32%20MiniBoard%20Rev.D2_1.jpg) + +MM32 MiniBoard Rev.D2 开呿¿æ¿è½½èµ„æºå¦‚下: + +- MCU:MM32L073PF ARM 32-bit Cortex-M0,主频 48MHz,128KB FLASH ,8KB SRAM +- 常用外设 + - LED:4个4色LED,å¯ç”¨äºŽæµ‹è¯•GPIO功能 + - 按键:1个å¤ä½æŒ‰é”®ã€ 1个WakeUp按键ã€ä¸¤ä¸ªæ™®é€šæŒ‰é”® + - SPI Flash W25P80,容é‡8M bit,速度50MHz + - I2C接å£EEPROM芯片,AT24C02,容é‡256字节 + - 1个旋转å¼ç”µä½è®¡ï¼ˆå˜é˜»å™¨ï¼‰ï¼Œç”¨äºŽADC测试 + - 能耗测试开关:待机模å¼å’Œè¿è¡Œæ¨¡å¼ +- 常用接å£ï¼šMicro-USB接å£ï¼ŒRS-232接å£ï¼ŒUARTæŽ¥å£ +- 调试接å£ï¼šSWD,支æŒJ-Linkã€U-LINK2ã€MM32-LINK调试器 + +更多详细信æ¯è¯·å’¨è¯¢[çµåŠ¨å¾®ç”µå­æŠ€æœ¯æ”¯æŒ][http://www.mm32.com.cn] + +### 1.2 MCU 简介 + +MM32L073PF 是一款é¢å‘电机驱动ã€å·¥ä¸šåº”ç”¨ã€æ¶ˆè´¹ç”µå­ã€ç™½è‰²å®¶ç”µç­‰é¢†åŸŸçš„低功耗芯片。包括如下硬件特性: + +| 硬件 | æè¿° | +| -- | -- | +|芯片型å·| MM32L073PF | +|CPU| ARM Cortex-M0 | +|主频| 48MHz | +|片内SRAM| 8KB | +|片内Flash| 128KB | + +## 2. 编译说明 + +本 BSP 为开å‘者æä¾› MDK5 工程。下é¢ä»¥ MDK5 å¼€å‘环境为例,介ç»å¦‚何将系统è¿è¡Œèµ·æ¥ã€‚ + +åŒå‡» project.uvprojx 文件,打开 MDK5 工程,编译并下载程åºåˆ°å¼€å‘æ¿ã€‚ + +> 工程默认é…置使用 Jlink 仿真器下载程åºï¼Œåœ¨é€šè¿‡ Jlink è¿žæŽ¥å¼€å‘æ¿åˆ° PC 的基础上,点击下载按钮å³å¯ä¸‹è½½ç¨‹åºåˆ°å¼€å‘æ¿ + +推è熟悉 RT_Thread 的用户使用[env工具](https://www.rt-thread.org/page/download.html),å¯ä»¥åœ¨console下进入到 `bsp/mm32l07x` 目录中,è¿è¡Œä»¥ä¸‹å‘½ä»¤ï¼š + +`scons` + +æ¥ç¼–译这个æ¿çº§æ”¯æŒåŒ…。如果编译正确无误,会产生rtthread.elfã€rtthread.bin文件。其中 rtthread.bin å¯ä»¥çƒ§å†™åˆ°è®¾å¤‡ä¸­è¿è¡Œã€‚ + +## 3. çƒ§å†™åŠæ‰§è¡Œ + +### 3.1 硬件连接 + +使用 MM32-LINK 或 Jlink ç­‰è°ƒè¯•å·¥å…·è¿žæŽ¥å¼€å‘æ¿åˆ° PC ,通过调试调试工具供电或使用 Micro-USB 供电。若使用 Jlink 等调试工具,还需è¦å°† UART1_TX(PA9)ã€UART1_RX(PA10)ã€GND 接到串å£å·¥å…·ä¸Šã€‚ + +使用MM32-LINKè¿žæŽ¥å¼€å‘æ¿å¦‚下图所示: + +MM32-LINK+MiniBoard Rev.D2 + +![MM32-LINK+MiniBoard Rev.D2](figures/MM32%20MiniBoard%20Rev.D2_2.jpg) + +### 3.2 è¿è¡Œç»“æžœ + +如果编译 & 烧写无误,当å¤ä½è®¾å¤‡åŽï¼Œä¼šçœ‹åˆ°æ¿å­ä¸Šçš„4个 LED é—ªçƒã€‚䏲壿‰“å° RT-Thread çš„å¯åЍlogoä¿¡æ¯ï¼š + +``` + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Dec 11 2018 + 2006 - 2018 Copyright by rt-thread team +msh /> +``` + +## 4. é©±åŠ¨æ”¯æŒæƒ…况åŠè®¡åˆ’ + +| 驱动 | æ”¯æŒæƒ…况 | 备注 | +| ---------- | :------: | :--------------------------: | +| UART | æ”¯æŒ | UART1/2 | +| GPIO | æ”¯æŒ | / | + +## 5. è”ç³»äººä¿¡æ¯ + +维护人: + +-[Henryhuang](https://github.com/huangzushui) email: huangzushui@mindmotion.com.cn + +## 6. å‚考 + +- [MM32L0xx_nç³»åˆ—æ•°æ®æ‰‹å†Œ](http://www.mm32.com.cn/getfile.aspx?id=615) + +- [MM32L0xx_n系列用户手册](http://www.mm32.com.cn/getfile.aspx?id=611) + +- [MiniBoardStartKit资料包](http://www.mm32.com.cn/download.aspx?cid=2545) + +- [keil pack安装包](http://www.mm32.com.cn/download.aspx?cid=2546) + +- [MM32 支æŒå·¥å…·åŒ…](http://www.mm32.com.cn/download.aspx?cid=2547) diff --git a/bsp/mm32l07x/SConscript b/bsp/mm32l07x/SConscript new file mode 100644 index 0000000000..1b1c7506a4 --- /dev/null +++ b/bsp/mm32l07x/SConscript @@ -0,0 +1,11 @@ +from building import * + +cwd = GetCurrentDir() + +objs = [] +list = os.listdir(cwd) +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) +Return('objs') diff --git a/bsp/mm32l07x/SConstruct b/bsp/mm32l07x/SConstruct new file mode 100644 index 0000000000..44567aea78 --- /dev/null +++ b/bsp/mm32l07x/SConstruct @@ -0,0 +1,39 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map project.map') + +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/mm32l07x/applications/SConscript b/bsp/mm32l07x/applications/SConscript new file mode 100644 index 0000000000..6452d39145 --- /dev/null +++ b/bsp/mm32l07x/applications/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +CPPPATH = [cwd, str(Dir('#'))] +src = Glob('*.c') + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/mm32l07x/applications/main.c b/bsp/mm32l07x/applications/main.c new file mode 100644 index 0000000000..68a4a7dd2d --- /dev/null +++ b/bsp/mm32l07x/applications/main.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017-2019, MindMotion AE Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-13 henryhuang first version + */ + +#include +#include +#include "HAL_device.h" +/******************************************************************************************************** +* led_init(void) +********************************************************************************************************/ +void led_init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); +} + +int main(void) +{ + int count = 1; + led_init(); + while (count++) + { + GPIO_SetBits(GPIOA, GPIO_Pin_15); + rt_thread_mdelay(500); + GPIO_ResetBits(GPIOA, GPIO_Pin_15); + rt_thread_mdelay(500); + } + return RT_EOK; +} diff --git a/bsp/mm32l07x/drivers/Kconfig b/bsp/mm32l07x/drivers/Kconfig new file mode 100644 index 0000000000..91e0d6b6f1 --- /dev/null +++ b/bsp/mm32l07x/drivers/Kconfig @@ -0,0 +1,18 @@ +menu "Hardware Drivers Config" + + menu "On-chip Peripheral Drivers" + + menu "UART Drivers" + config BSP_USING_UART1 + bool "Enable UART1 PA9/10(T/R)" + select RT_USING_SERIAL + default n + + config BSP_USING_UART2 + bool "Enable UART2 PA2/3(T/R)" + select RT_USING_SERIAL + default y + endmenu + endmenu + +endmenu diff --git a/bsp/mm32l07x/drivers/SConscript b/bsp/mm32l07x/drivers/SConscript new file mode 100644 index 0000000000..6cbaa4bd99 --- /dev/null +++ b/bsp/mm32l07x/drivers/SConscript @@ -0,0 +1,20 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Split(""" +board.c +""") + +# add serial driver code +if GetDepend('BSP_USING_UART1') or GetDepend('BSP_USING_UART2'): + src += ['drv_uart.c'] + +CPPPATH = [cwd] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/mm32l07x/drivers/board.c b/bsp/mm32l07x/drivers/board.c new file mode 100644 index 0000000000..e3b4ec8255 --- /dev/null +++ b/bsp/mm32l07x/drivers/board.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2017-2019, MindMotion AE Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-13 henryhuang first version + */ + +#include +extern uint32_t SystemCoreClock; +extern void SystemInit(void); +static void bsp_clock_config(void) +{ + SystemInit(); + SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + SysTick->CTRL |= 0x00000004UL; +} +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +void rt_hw_board_init() +{ + bsp_clock_config(); +#if defined(RT_USING_HEAP) + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif +} diff --git a/bsp/mm32l07x/drivers/board.h b/bsp/mm32l07x/drivers/board.h new file mode 100644 index 0000000000..ffb1ce31ee --- /dev/null +++ b/bsp/mm32l07x/drivers/board.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017-2019, MindMotion AE Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-13 henryhuang first version + */ + +#ifndef BOARD_H__ +#define BOARD_H__ +#include +#include + +#define SRAM_SIZE 0x2000 + +#define SRAM_END (SRAM_BASE + SRAM_SIZE) +#ifdef __CC_ARM + extern int Image$$RW_IRAM1$$ZI$$Limit; + #define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ + #pragma section = "HEAP" + #define HEAP_BEGIN (__segment_end("HEAP")) +#else + extern int __bss_end; + #define HEAP_BEGIN ((void *)&__bss_end) +#endif +#define HEAP_END SRAM_END +#define HEAP_SIZE (HEAP_END - (rt_uint32_t)HEAP_BEGIN) +extern void rt_hw_board_init(void); +#endif diff --git a/bsp/mm32l07x/drivers/drv_uart.c b/bsp/mm32l07x/drivers/drv_uart.c new file mode 100644 index 0000000000..f7e54d1eda --- /dev/null +++ b/bsp/mm32l07x/drivers/drv_uart.c @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-11-15 bright the first version + */ + +#include +#include +#include "drv_uart.h" + +/* UART1 */ +#define UART1_GPIO_TX GPIO_Pin_9 +#define UART1_GPIO_TX_SOURCE GPIO_PinSource9 +#define UART1_GPIO_RX GPIO_Pin_10 +#define UART1_GPIO_RX_SOURCE GPIO_PinSource10 +#define UART1_GPIO_AF GPIO_AF_1 +#define UART1_GPIO GPIOA + +/* UART2 */ +#define UART2_GPIO_TX GPIO_Pin_2 +#define UART2_GPIO_TX_SOURCE GPIO_PinSource2 +#define UART2_GPIO_RX GPIO_Pin_3 +#define UART2_GPIO_RX_SOURCE GPIO_PinSource3 +#define UART2_GPIO_AF GPIO_AF_1 +#define UART2_GPIO GPIOA + +/* uart driver */ +struct mm32_uart +{ + UART_TypeDef *uart; + IRQn_Type irq; +}; + +static rt_err_t mm32_uart_configure(struct rt_serial_device *serial, + struct serial_configure *cfg) +{ + struct mm32_uart *uart; + UART_InitTypeDef UART_InitStructure; + RT_ASSERT(serial != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + uart = (struct mm32_uart *)serial->parent.user_data; + UART_InitStructure.UART_BaudRate = cfg->baud_rate; + if (cfg->data_bits == DATA_BITS_8) + UART_InitStructure.UART_WordLength = UART_WordLength_8b; + if (cfg->stop_bits == STOP_BITS_1) + UART_InitStructure.UART_StopBits = UART_StopBits_1; + else if (cfg->stop_bits == STOP_BITS_2) + UART_InitStructure.UART_StopBits = UART_StopBits_2; + UART_InitStructure.UART_Parity = UART_Parity_No; + UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None; + UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; + UART_Init(uart->uart, &UART_InitStructure); + /* Enable UART */ + UART_Cmd(uart->uart, ENABLE); + return RT_EOK; +} + +static rt_err_t mm32_uart_control(struct rt_serial_device *serial, + int cmd, void *arg) +{ + struct mm32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct mm32_uart *)serial->parent.user_data; + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: + /* disable rx irq */ + NVIC_DisableIRQ(uart->irq); + UART_ITConfig(uart->uart, UART_IT_RXIEN, DISABLE); + break; + case RT_DEVICE_CTRL_SET_INT: + /* enable rx irq */ + NVIC_EnableIRQ(uart->irq); + /* enable interrupt */ + UART_ITConfig(uart->uart, UART_IT_RXIEN, ENABLE); + break; + } + return RT_EOK; +} + +static int mm32_uart_putc(struct rt_serial_device *serial, char c) +{ + struct mm32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct mm32_uart *)serial->parent.user_data; + while ((uart->uart->CSR & UART_CSR_TXC) == 0); + uart->uart->TDR = c; + return 1; +} + +static int mm32_uart_getc(struct rt_serial_device *serial) +{ + int ch; + struct mm32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct mm32_uart *)serial->parent.user_data; + ch = -1; + if (uart->uart->CSR & UART_FLAG_RXAVL) + { + ch = uart->uart->RDR & 0xff; + } + return ch; +} + +static const struct rt_uart_ops mm32_uart_ops = +{ + mm32_uart_configure, + mm32_uart_control, + mm32_uart_putc, + mm32_uart_getc, +}; + +#if defined(BSP_USING_UART1) +/* UART1 device driver structure */ +static struct mm32_uart uart1; +struct rt_serial_device serial1; +void UART1_IRQHandler(void) +{ + struct mm32_uart *uart; + uart = &uart1; + /* enter interrupt */ + rt_interrupt_enter(); + if (UART_GetITStatus(uart->uart, UART_IT_RXIEN) != RESET) + { + UART_ClearITPendingBit(uart->uart, UART_IT_RXIEN); + rt_hw_serial_isr(&serial1, RT_SERIAL_EVENT_RX_IND); + } + if (UART_GetITStatus(uart->uart, UART_IT_TXIEN) != RESET) + { + /* clear interrupt */ + UART_ClearITPendingBit(uart->uart, UART_IT_TXIEN); + } + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* BSP_USING_UART1 */ +#if defined(BSP_USING_UART2) +/* UART2 device driver structure */ +static struct mm32_uart uart2; +struct rt_serial_device serial2; +void UART2_IRQHandler(void) +{ + struct mm32_uart *uart; + uart = &uart2; + /* enter interrupt */ + rt_interrupt_enter(); + if (UART_GetITStatus(uart->uart_device, UART_IT_RXIEN) != RESET) + { + UART_ClearITPendingBit(uart->uart_device, UART_IT_RXIEN); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); + } + if (UART_GetITStatus(uart->uart, UART_IT_TXIEN) != RESET) + { + /* clear interrupt */ + UART_ClearITPendingBit(uart->uart, UART_IT_TXIEN); + } + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* BSP_USING_UART2 */ + +#ifdef BSP_USING_UART1 +static void UART1PINconfigStepA(void) +{ + /* Enable UART clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); +} +static void UART1PINconfigStepB(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + /* Configure USART Rx/tx PIN */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); +} +#endif +#ifdef BSP_USING_UART2 +static void UART2PINconfigStepA(void) +{ + /* Enable UART clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART2, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1); +} +static void UART2PINconfigStepB(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + /* Configure USART Rx/tx PIN */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); +} +#endif + +int rt_hw_uart_init(void) +{ + struct mm32_uart *uart; + struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; +#ifdef BSP_USING_UART1 + UART1PINconfigStepA(); + uart = &uart1; + uart->uart = UART1; + uart->irq = UART1_IRQn; + config.baud_rate = BAUD_RATE_115200; + serial1.ops = &mm32_uart_ops; + serial1.config = config; + /* register UART1 device */ + rt_hw_serial_register(&serial1, "uart1", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + uart); + UART1PINconfigStepB(); +#endif /* BSP_USING_UART1 */ +#ifdef BSP_USING_UART2 + UART2PINconfigStepA(); + uart = &uart2; + uart->uart = UART2; + uart->irq = UART2_IRQn; + config.baud_rate = BAUD_RATE_115200; + serial2.ops = &mm32_uart_ops; + serial2.config = config; + /* register UART1 device */ + rt_hw_serial_register(&serial2, "uart2", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + uart); + UART2PINconfigStepB(); +#endif /* BSP_USING_UART2 */ + return 0; +} +INIT_BOARD_EXPORT(rt_hw_uart_init); diff --git a/bsp/mm32l07x/drivers/drv_uart.h b/bsp/mm32l07x/drivers/drv_uart.h new file mode 100644 index 0000000000..5f0d14b485 --- /dev/null +++ b/bsp/mm32l07x/drivers/drv_uart.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2017-2019, MindMotion AE Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-13 henryhuang first version + */ + +#ifndef DRV_UART_H__ +#define DRV_UART_H__ + +int rt_hw_uart_init(void); + +#endif diff --git a/bsp/mm32l07x/drivers/linker_scripts/link.icf b/bsp/mm32l07x/drivers/linker_scripts/link.icf new file mode 100644 index 0000000000..be35a1f63e --- /dev/null +++ b/bsp/mm32l07x/drivers/linker_scripts/link.icf @@ -0,0 +1,36 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_IROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_IROM_end__ = 0x0001FFFF; +define symbol __ICFEDIT_region_IRAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_IRAM_end__ = 0x20001FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0800; +define symbol __ICFEDIT_size_proc_stack__ = 0x0; +define symbol __ICFEDIT_size_heap__ = 0x0800; +/**** End of ICF editor section. ###ICF###*/ +define memory mem with size = 4G; +define region IROM_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM_end__]; +define region IRAM_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM_end__]; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block PROC_STACK with alignment = 8, size = __ICFEDIT_size_proc_stack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +do not initialize { section .noinit }; +initialize by copy { readwrite }; +if (isdefinedsymbol(__USE_DLIB_PERTHREAD)) +{ + // Required in a multi-threaded application + initialize by copy with packing = none { section __DLIB_PERTHREAD }; +} + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in IROM_region { readonly }; +place in EROM_region { readonly section application_specific_ro }; +place in IRAM_region { readwrite, block CSTACK, block PROC_STACK, block HEAP }; +place in ERAM_region { readwrite section application_specific_rw }; \ No newline at end of file diff --git a/bsp/mm32l07x/drivers/linker_scripts/link.lds b/bsp/mm32l07x/drivers/linker_scripts/link.lds new file mode 100644 index 0000000000..c7b5f1be0b --- /dev/null +++ b/bsp/mm32l07x/drivers/linker_scripts/link.lds @@ -0,0 +1,137 @@ +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + CODE (rx) : ORIGIN = 0x08000000, LENGTH = 128k /* 128KB flash */ + DATA (rw) : ORIGIN = 0x20000000, LENGTH = 8k /* 8K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(4); + + . = ALIGN(4); + _etext = .; + } > CODE = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > DATA + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/mm32l07x/drivers/linker_scripts/link.sct b/bsp/mm32l07x/drivers/linker_scripts/link.sct new file mode 100644 index 0000000000..6fda39799c --- /dev/null +++ b/bsp/mm32l07x/drivers/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00020000 { ; load region size_region + ER_IROM1 0x08000000 0x00020000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00002000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/mm32l07x/figures/MM32 MiniBoard Rev.D2_1.jpg b/bsp/mm32l07x/figures/MM32 MiniBoard Rev.D2_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db9f57a18df507d562b071cc25df85e441f2827c GIT binary patch literal 1313048 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 ZR`cbT7~X-O~>*YBL=fs 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²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

RD%#nqM9OT;;YU8P;eEASKdHO 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%0Djw_w|?{Qd^d8nVgRmQKyn(wI%s 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�LI3~b=(^*n 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

    )4)2)ua%Q!Qd5{Q|!%P>pQ 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

    ;YKf6yjej*>uGdRvcBUDLbb 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 K@h9xv{{RV}!w~uzGr!V^0Nb1NsmG%|w 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±j*8= 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

    vm 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≦!*&aTh4_BkScN|ZV-fu9j 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

    8lW=T6 ziU~qc85ina6)j>+MZ3lEv6F0a)5!-kT;EH?>UnqJMC`#Q2T~J>R2)j0mRyxB%0{Y* zvcii4WVs!85!$$e@VMuTh0;G!o%ky*kq3E$F;Gki_b8rQ>mNz~0B4U4tipLR%($=V z1f*5wrIgN=p{i&INDke$k3wN{czapLP9$LbaLUp#?7M{I$ryquYGkT!gryaQ0FZ7@ zm)Mx|<;^H*3V<*z?;OO$v&kTS&Vu|-{v{+_aa7bnDDgt=&# z!3rUmxb%NW^u~PTTZY`K=6tu3xo5*G>6e@G+{I%Ps;lPARPO~zI>=IpLwK7c0Uk|G zqB%76^(M)hl_Iy#XKJ!pNC|e**cb%TQ#p$>|$2@scX{)BT6;(M22~6{{R6y91V;jGTm{w4g%qI^|G1M~EmomCU zsgkM?RVe{Wbd>-dNOpMg!Z|eA*K#>z%CbU{e?lj{0W|pHiaGQuZk0s!$HPo~e z)HP=el2l!D6hd?*CeEPG-aU=WrVY=ZK72gK_#MjfayJdKmJd#eSi!8QG>fP!PN64M zxoemKNx9Mo{L%EQI$;&q_X9Jo5tK1ROQTL&QKDTe!7f*ZsYH!EtQtOhd>`ajWBId* z`BIe4tW3)NbrTeq6Hq0vN}HvOdt;luIacW4*KWsQ2s$smDz8IHS(#I zI!;#0qHSF?paU6`)TAd;L-hcA$FGMiya(V8Ld9`z0q`3ugrmXnmQnkqUP{5^6pm1{DVA4>*Rm3Opw_nPcuiW!40@vn(^ zg;~KTaL#UwlZevH)+b0`hp3Q40zntM7~FDCBkvEADdPQ7= zclGM zlO}@Nb5#ZZ0R15m=scbA3e7nulp5Yua#sszXk=GlbLg>bT14^}QiUk3Qxu&yQNLcX z=I#_#s*8#lYOw{CCm*9&KB9UIdFL5INx$a>Qn<79ufTf4JAs*IbkZHF60bG2c*>62 z6c(lvQdsN~W2ta5OrgPi9Wv!=LMKj8akI@?AJ#i$y=)MrFdKyRk2~d^)%L405Pyiu z18C%E)=ade3(_9(#-uRv$0LT2q!b$fZa|3mIw!H%D3oQTC1w3%lcJb(vt8{RRT`41 zX-HRFnB?iy$_3+-IxbFLm1|1_)-n(X0ELfH7_=${i4l?uh6kqY87rdDK@SEM31M^h zh5_vupcKDIA;4xZ0|R(q=JB$i5_MQJ#3YvtV7PW@4b&g33JoeJtP+wM*NEXeUEq>b zbiji9!D0sYh^E>0f;AChU$jNITag`)cyLRx-=rxPzv3c60k@14u_c+h?+z3;CMgOa zS_oKszTHd=mvm@_-M_RZw+#OPSArMN!i&JirQjWzpVA;Bs-hmy3>tkl-QX0y!Whom_jyV?qc<)S4gc%I~W4Ahf{;RMUs&W5Op~g_lU4g$u_(IiBlJ0?FAjh15wgCk-H_#AfLLZ0+e7H7N{KY)3&FPS{5kh?bn9orhTB=Kz%u9lfKJ ztv69(;Iq7Ov;4%8U);vgmQ<1exPs@Xiqupb3paRSazO`ZCde=$yTJrMSWfzqq7{;_aUbcB*ec%e5jXeB3qtVdQ0d{RpkGi*#U$WlXZ?Fxgc;$@ES5D*el zl{gzf70nx$5s!#6sMjrx#>B<56{$tbH*T=CATCi#lFm1U1A>{QE*|?dP*^xf1HJc) zaU~g26)+)6DF(tYC~A{XpB7S_9hkgwl2&PKjM+#bTEPT=hBIXWyAPm@BrK(tQmgJG zK3WJnhV1dow011My)!{4VAqc0g{Y{4)*a)g<+)xZ%CFY(+i=mPU;ycg%5xHydLOi0 z2p+LbI64isivr4n5wvrnEsG*V5UbWhAh*&XMu`h8D@gOL%rpTFy1_z{pa@fls(h8t zPLwH+NHo&SglKd3iVLjP{*eg{<%rsa;%VsHb&6$Qz^uZqTYS2$3Q|8DLNZUNAFORl~FPN5{B(jK~vd zF}xyuEZJvcsRR$}8QMXx>AVz~s90RG#U;dagyjh-N0drZRL_B#{{SlEoHEWhhYDt) zRMl7(BQ~0PW+LlKR9O0kjtHw#wWWud&7<4@02+P)VfiDBxCa>UdOJC)9)Zj}FU{sc2D|G?zAE)<4v~&GiU%PLGRHxodx_+5Tto-m#^6PNO_;*KeS+ zSw*F(hhJEQ0#ZXF=FbIE(j8?%+VC|gB&4A_chY-D-9Bn#5D<{;@m$oQA=Cr)aRpMq zNK~|vjhnPqwJAw5*1^75sL<&MC?CWC9oj2V)Q}Q~V9xPcNeXfa0>z@_pePj~Ma9ZU zjc_1 zVpv#0g@mnvykrc)CrKyMv{f-r`7D(=?+!`;1)Pqr3n+>z4v>&T^(_zMNKC&l+q72Nixh@EAkUXB$wB}psffTt z)2)HGt)4HHIlPNVDe4<&qEb?^q=V)DXk{xyBrE7n@dyGmt5w`Ws$hLUTXJE{*>9yr z$8iWHjRA{VDqyX16rvE6fZMcK9Z3!gK$eGDIvAd&9IHo|J^Mkjh)T7PK(|(aw533| zLiask=1L(YX?y-*CM*P~C#ysu5jZ7oLlg54ShxVrrEEJza!7KN+>72ECi;>~HpT!T zCrKo~TL=mo07y1yV3xImcZ!y;I008B+679&N(p0sq*XCMD5)rO?r#N0&!~&-dqT@1 zX%f^m2i(Lqkt78dD+b}O0YOV7B|*9XkM9?WX-3F){{RdsWtA*FgV+HWWxdR4^i|lu z>98CYoXx7Ns1oJMP02C#zmWbDo)&N;3BZ3wCC*hcRZ-<(sNDYmSov@8{^2yPDswGF zYUgT^hA+fak{u+Fukw$y*;fu$4TVzBO8@~Z1t3T9AMrD(d);O|9A42@{;&Oy=swBl z)G$jwuE#Y^P5NX6xOTfm!v4^=Cc&T93u?CB(fqBSui$7_cMtf200oC@!2!C)K`!vY zw^Ctm65{^=XrQsfSo?@%9^GQFT(kSdh^~P%5GwJ(U-}J9IIyaA}y9q&$pyfl1G%1rti`+B_t7c^=RrA z#qun7{6*;sR>mokk*U+OcX+q}6?Hef2}P&?bb{r}z!%@AtS}GML;|SvC-VbPH)n!T zsQ&=0K#&6j{$iB~N!1J#l9wXhu&O}~Xp0Japr2QP6{Z3Jv1aQEH@F0QLj^G0`$82E zMa&8nX#>a$`^9QPfF!AhQen#4?a9M_WWAEdg;|@ zBGzH+5o9^<2w!2^1fVFB6wOq`mT=dx>lP@K-~RwGie{2*Rq7*1$y&%iDneXr@lwfG zPO$4bg~TGajRaLOMgCZ#azgH*Z+OXAb7;q&3S5B^n>gykl#t>ERqDoJcg%0sSgDPGNIdkP=xQyyXMzlSgS1u4{-VJb)oE-Y;C9HrdmmyadcMZYJ>{${!KP2HikV!S$q+3guJl0{6g zFR5S-+s6)>p(fFtMO38CK}(e-K>lEv8r;FfWeFIR`6Fb_Q2fVuGd4!htj@7|@z>Ke*<<}wBYAC8HLPeO&mZU$?-Z^5mk%_B; z>;C|bc?!(D6I|6a;ldgrF&)2)H~nM5@$X-cr4*bqjQlLaWX;qm_)$eHUvMYSV;%~Q zE!#AeB0(e&z(9yY7`_S}M#r=Wks??i-tbghz=;<20ZRhp!AglNOe{!u1J+*%JnNS- zPagBFMs3FA;q(=JCdVXBs+^_?bW7X0U~L|B!PhBOsZu8uOEoLfP%Z|t#l54gqH5Bw zBFbD4be+d&zD6T9oDT(BbnIR_#m4T)?v1^~?6J#zFAizzvd&<}XXeEy8k$*@Z6FS= zqSqde8p2wQGISzmm(WHW>}H~R_0O24p5;)#y;ckO3G_W-8A2T{*raC*g( zD@>E5=_hwRJtK+zdcJ14w*4Z0@mpyUlN#@jsa2hq4qUmj(kILb0NfJxj`EE4kduHe zj;94uCzR<57fH6{ciJ@w#Hs-WgAR}tiPWeNRzN+Y6ZdnCGjW`e-PMlJOqr+!OGwQ-V8t#>wJM z_{oj-4W;te+JpaM7*}MCa60 zW00lGdAhbitfI@fjM-^Uqc%+>#Uu{y14jEXB6rQ4?KUYbbmDa7r4s>SN!~dbd8(3i zIg+4-%t&t+TaZ039SL9qMRi&)}~Tc*FMp!F-*ZziQ*Hhr>WIBWlB*l z{{VRAGfyi#&17u9Rhx5<0W*ddh0uU&F&g~6Q7S}`NC2s7KuEa*ezDNCD5z>z-ZhQF zJRv71$=DHHBsx)4gx<~!Ij@l^0ZTf8`GC7c+#=wo6}b7FCFC9sXsA%? z2^*400VC9qBfj$k@c8EYm8^?R#Ev@fcB=uwYU|TQDzNA&L4QP%iG{6*{EvD7g6HNE?&(Zjmh5}zlS_=n0r?C;j^A+&k=5LkWBxRl!aRUj$YjJ$rDNDiR z;P{`4g{ddZg)U-H5}~KB8i#PMWgnT8VN`sWDiSHA&W)N+}zwO@su8+R@74SpGLEg?V-;IsGsA1vGkr5 zeOjfL{uJ4%r<9bC8_b0&F_YoQ)$nwRPAS(X%WSvsg~aoJGMQhMiXJM=!gC#F3H!q~ z&BgGc;o+g!i9s_5je7v$+1@>KEB04%YGlk^M?IC37A2h$<#72RYHK>bTx|Z4tv)VX z-sPHKiKZ2scsq;(SCum5J`;;oP^p2QnX8zf;>YI+KGF2g;rYcZAB&u~&{o&y>Rd-0 z#(z;Zr84TlnIlm;P~8ec4Z241#&N`^wnWF;=HmB0FY^2FaL+ty=aV(^iB-jlT3k0K z&rrp)WdW zkQ}JX2@7vce^}UG3Z4<+{GoGI#{LpGdGHC1ZHu*_Q&sd<%{dWk+NlvtGqWp**L zYWR2X!{&CkFz~}Kev1*zc-=ijx|~IIQU4QOwRY zz?@4HRedE9O#CAdS^`y3OE79eln3(%W9kfPg%UR&(bY80U?X6E5DkkY!PRS%_J~9I zh=3Ld0N9ujBOoru#vt9lqzHkY@uUu8E9XpqC|0Ku%hk)LsFt9qb5NoRNRH^fZMgKX z1pXl6MT?CUvk`y%Bu2E=YjlQnc8w`X5|P}quOGOlpDBeFVa?UkT z$wag{QS1PW{C6ei9Ic^Qmn>ow9wK!hR#L8Bq2J5|Ykxps5vbd=M9o@8l$Q{?!`Q>r z3UarS=}Qgwi+8#MBC@hj(<-iN2V|^>tx8hVR<)8&kO2oBk8k_D8vILHn@nxse!2cu^lbm03jf39sw*# z34)Ri!W6Ub05S`mN)I0I;4jDHn|@z-ErbBsKqkNNUoYkS0;-n=rcFH#Av&Ci$&{Uv zLll-BT09<-1&{QGDgw{+ikxbi3e(v7ABcX^7dzEdJ_QlODdr!VXX%ilJ-mbZMxf@0 z<0Z~dG<-Oy;YMlB=931*6QdN9Mtk#1gD zG>x9|*mzf(^2SBa*miBsd^)4ecx@Ezbs2vUs+lH5SYpXqrI4TsZ{eoZxI9$au_jjZKG)LW8-Dc2Me%;;CZb$E_A0V zbbquIo^+4!l}agb?;d=be(4<}I-_^-t3UF=oH??}`R|sFB;wfh4g&SKjwd?`nBSo1r^e6Pl?8&1re5YDDt?PdU`nIGc~u zs|U;!bLsO9TBNFajI|`4N&@6+XFVP~veHVMUJlX9mdNuC5mG9ZGxe$}s#M~s()pTV&L>|ta~Mz z9_!|2DfcAJcSVtNM6MfC497__owLGsw%HycdZd zu9;K+01{;`SHuc}chVGOfFt3`8DzFc+Qpg?k2{(n7;a&uuANOyRam72l}?f3mQ!`@ z7w|I;&G=4ssl@U|9xH06lBLq9c}VL0qtMtF33ByDFZ5w1R(guGWGW?i^ku|oDJh23ueiv;O``P1BSCj zWSNVXk7t^BrllyD7RF*G%r|C^-OMk;Qhz`ENuSIgJG|iK+`ow~M7nG{0m@j7DycBa zBo8d1HhtEsl@%}!OnOvhJx{!z(Myk+<$FSxCy#JnjISQJmBP6kx@Vb~Mp>q;lPZ#C zXTmAWm9A1#pm?Lr=;Sc;j9wq{Q=1+_GX`hNT&`eB&KO2ADe7isyfX(ifj}csAf+n_ zE}{rmXxLvCEQ`qJD}0*do>lo|%-BX{#)f5HA&F!1>nZCiRD{b=S(`RcWNTE!vQojN zfYy%zzrRsXGICJaq5#z2} zpPaL9a>r!gxB?32R47QKl9J$QNKCnUluPJdxGUpywlnRW#}$N#Z6BE!fsd2k=a8 z-;Cuf+HZ+h6ZOpAu8~3eDwWN86GN3N>jRsp%al|Ajct-@MHXt+G0$1{v779 zlPhr?OsC0Ffmc#ZW4N16v=7MD3z~^M z6TlFZs%SLfN|-v5=KlbA?dVyUkP|BDv5tkx?P$fhalr8etJB!QZ7Qk0U%s&8Q5?IML|1{G+>4&X1?ti_4ap@6>7yCpW_7L8t1r(F9fpT_lNGc9? zfH(CWpidz;w`eIO+z17jzVQ-N3r0vy`Edm36u{4f?CHja8xbnaNxVKnC zZ@gGs+AC1G*gyen8ux%-a|MQ%9pDrGumCY48^j*8cNn({a}{k$;D!Y2mT+H{$buYsjQa)Pk80A z1!_=zgmDvCtH>C7$3$iFarG!kt`l{u<+4Jp88VU*k0|%NS5kzL;vfJ)?*>H0C@}-+ z10~PW(8EyxkrjZgMa|9FL*HN+7^tJAL>C<*uADiq0Z-*`78*Q7vHut6wL0{!Bug0BpOi@Us8Hp(HKzRwj*Qb{1E-J?r@aYaZq zI!W2wcec^ha$P-TEgb54*(#Q?TRgEJ%dF}AG`vQ+yqVEiLq<1|>b?wc+al zDc1hc)H3YCC7~n>0OjMh;i*dW+`;Y+a+zAdChj8Ok+6y+sH6a%*Nc#K20h~!WKA|$ z99T3E7;O*+8$^thks?HZCfh@4Bw7ZdEDSIupTBsjil`36-|rBqjkbdCVjw76)$bLR z*$<;n{4o} zc7Cx)xip`|dxCXbdF1yn;g~HNCgT};S;cVBQsnqxm85lYol)_gWeooS-NL1E$d;?S zYdXAp0 z7lTPqC6tAEY!3E@nzmV4Pm~SX5>dDthw54lK{CgHq8WhtMuAkrsVolW8fw-MC8wiW z6aojBdv%8d09;wDK#EZkQV&*sii;E3NgeKNVM+>!Qa~555X)1f0FiB)07WDK=r8@D zP@^`?UAsh<6hTUk<*s0qB_M>p-^!-60RazSM@ERszM#j_Bcvt9-mo>3{H6elF3EHL zaS*`iU=L9RrJJacXK~&Uaul)_-j ziFyM73&AsW2h$3G4bn)z-XkD%okd4(&?l6iIv(3R5<0iu6`biGFHrqp10>%_HzDEH z0+3xMDoPBnK|xZ&yiyx@wooWWl3DgI09ddT2+}mQo-xV_Rpqc??DxOHlYum}d1kAMxRnW2O?1)|HEG!?QD7tJy$V9mCMsW;3&y17 z3x+sf3-~jG;COWimY>ofsVvM}tZpiFgrFwF+CR&Ed#OvRbzHia*TQk&C>;e-+xF}Cum@7<9|UP83`L9(hs z%q4;b(LY&Ohw$X2tEQ;EGUc!U2kzTMRInRSzgFo3R3y6Djs;o(C$Y3%y16Psd@B$) zihLB*E5k~gxiBhl_0io5*DUTwLllJ-vkHMPc;c%`QnaXh#(e3C^CW&_j;T>5=Y8X9 z$kycvl*NPZ87N9qVDA)$vR*Q2)2J~``-2;@7fKpN%@%;=gjR$Rwc^=iIA{UDwS+@> zkv4*0f&<_~KJg+H zr>ck2BnonF`%Q!O{(a zngtb3Hur^VUL1~xbJ`TJuz)IG%;RXHX-OrC`$e;q$=`UWsVYbb0lMBb6mu#eK`i$5 z=?I_)TX&0Az&69YRri-@l4{v!Y@$j1AE02LlUj~#$MZ(dN8U$l#;ZK z{?W!ySV=nmw~k7&Xh>pP>9ldRDH8#f2yxac;L*iYnQJFe4DpJ;2`bWwWTm{p_l%09 zXjYIc{S0D~QayJJBTA?mznZ>RG6yvr9<1SpcA`?K=g&mtctwyf9%ko1m<(T-ej`%T;j6DQauNfc zraf9kCnsDUZ9|G*GhbmjD-OgIJW5Gr67Ml3WhGvl#kht+!jQ5g)5?~T;8R;VDYAwN9{m zGD-f?#u2QP*{MH<&u4sng&Mf!!%5V0O44{;NR+Rlk}4;FW5IFlkBt5#ylWTWhBtDW zz75dL3sAWxqIr)K#}~7sT%eAfVkk5LzU>64t9aLf0wDxg#087NQi_YjRX`CUM2oN_ zNRUXg!mI#0+C3BS!sRCeQE;Z?|oF5IK$z9jIHmZq08 zU`UX5rnk9Qa%FEzZ{kXgI-|IG-w#lN&0V zOG`RdtqLn31t(HRM{o_J#N5L0Pafs7jQIBlvlVoTy37X%4r$ z#^_anV>OsWx`8wFwJVe2X>EE`L;fRT^23(1hZOVX5y3nMG>k4*X2+?i=1!UkmV!wd zh!-|HM&|`6(sXl8rfx5cE-A^jC(M;Bj!!bq7lu*OVM&#b$-wBm3N=*)ACV)<;Vcf2 z1Bmiuq&(JGv5%=7==>FUJHW18GhY~y#p>z!wpqhv&XpsOw-K@z7df)dJVW7*Tc^UXOj5ZsXlW^Bgi9krL0AIAQh`%?#^(4;a;cTM z%i{HRMdFQA=~ylmgc;+(Br0OHFixioH!-+yBu+b;0xmnc!?iYkc*0G2;VOGKk3D)4|3)DjP~JbWr!qHq$)3Q62|kEP!S z&P(}g=4XX?-e~3moXww4P?S;l^^+ybNOf4~P|KSu=}Sj|Zl%q`@&2Ph5(iN*}{oLao#l z0zE`}ALCide+7AO;;vPd!2G-V3LIN43aaJHQq?YG(LQ9br&5jC0>V5`fZ_Fcwl`0O z;l<}qoF&R~*EWk7sl{KDF5@HX4>|t;8+^6Jjt1uL57A_q)7O}AS=4m%=@a}UsbPsA zfWQmxOUKD0Els6KAf(;n?PtT|l^#nmZd5YT?9`4E<+S1XYNBkV;XV~C$x><);ip{LdiP0QqT=17o<7LU!5he% zN=A3XN1Tb=m~oz`JfQf)shT(`@^{H~mPNb#QN{Br!#x;|+H71NjIc;a>rfi}Vby-5hb}{SUho{8{ ziJXn_`xfEGO~NT_>2Z8THHKYG<)kKVohRfDTmklvI&%e-^Bzd!Hf78CuPIdEb;!mi zE@l^3N~tTSN|scV=umJNhV+ih$sIj3&S)}aZFHeBMGikrQ#MkiYYR#jsft*>!qM3% z$!?6>OxnETbC1m5I~b)e6f-QT^ohv|T*?VFGNvR^c)CKC6hpt2H+R}RqdH>eOjPNl zscTVElugMynEeLx0Z)}VfZ;ZI;a>!}D~M)1&4^)BQ96Qy4MrcPc9t_0HlU#eGR??x zqRas%KR>wc6XSeLuE#!x3RE1GKUjYN-J@R zR6pU{ z&4VNSIk=gg=q4#iz^Uph5~P+V!lCg?f8quQ!wceUIn=;$o?W zcM-3-dCYvnaHl-s98}*GniV0FMnRNOBbJ4YrQ}<}ZrJIJlQH6?ZgG3#JI*%|IDVY3f^%DdVKP@vP_ada zPEA<`*H{E3`lJZeW^wI{Tk>T%Cv82CT5yuhuKnt1>3;Oen5w>Wye9 z24P&ZiC_ZuD!*9yy~`G6XEqLA%GP z`L5;*<2#IS>3L&_{4?TqU!eU6MSXQ1UM)2x45F#B93{iJ1UIBfx=481@NCkIPi-CbJmBrbrd34XH>g9&N!s z1Q5($cv=*}5)YK@3_QAd^OO-HnqtY=B_zXPLI6)lfd%g!=PB~f%#MAeMSe!*?>u8t zCI^>03Cfj~C|9zj%OJ-#zDIf3m;V40lfEgX_SM7uNPqSSClp#|HOLPqRs8OAAA@jL z{h(eEL0Yvd5X7aSE14=H$jw_GgpB8Rrr{GwW%5~Au<#R1b0F)tA<=7sC!z!m&;{O0MP*%S4&s;&}H}-b; zU6<#}#qg|Rs--dn$#c#vjrgPyViK9UOZzl@$Hwu#1XFQy8l>U3EEQRYF3!Z3oC1py z#jym`i7v<=z*r=m*tw6mUlKpx{LXWIkoj{t)GsJWp-=DpDqN(2T~?JUVJj@<0U;w! z)-k!0kvL1shYB%VUkS?CRTdYO@Tt{vCDUP&<)_1xg0(Xaz{izjN_ zv=tac{zc^ARTW6nNl{TZ8u4Wlu>y4R6n>2zKLh3Wj+vIF6qpAHvjt4atYxBB6*Q9j zZX@eXarpf3-vq*jIhQzfB?*~%a*i046Wh+Tf%bUli~XcrdUT1VhkzI|(C~*=dKP;F!ern$mJiKY&NI(Tma6p7KL4Muo{g+)M-nfq-RdxhdeW;CQV-i z_?uP|T3D>gwbN7d*C>ehPA&UF9LLK2*;y}^oFZTEp{odxf}*Ol>nH|T5}i(Y>nWh8=o zN75gMPc#{ioPJ&_c)^=6F@{x2trAg5CZohcl3wqnFKv@-U{AS-^G|gnPZ~?P8wU#F_BO1SD?Z}f2I2k#h0W556R{l4PcKr*Z8}7x}vLBlCgq{^O*aQ-%~6ZBA9e@mhJ*vPQIuidia}iKtmhTpcM;E!I6dUBbQ=WiC;w z@~(BtI7TN=S%%K=scR_{F*9b&Nz=G2K_dMcJX^}{2)ce#Ilar0P!lT*s>UglfTB{C z!h?YQ1WZf0HvBb407_C47(YiQJI^otN%&g)L@+Ae5%9Z|+%E|;3f_ApB9`M-+HBBR5e| z)vAjEt*RkYC<+v!WrU~@bp-(b0P>FU^@}!U9uj0uO|gz)^2aX}Kc<_O=3)ab(BKl4 zI(ahOAxT0@n}@fl#}H|)g3^cz+r2@p>xkV^t?dj=ZH02;POG6a-{_>SFM~SVzLoeOH|1rC@Vk; z3Q;5ZZM)gyGMiGQijr#V{OT02a9{$(;_B&=Csod$ODjaB&QhhL{3#@`iem0$WPn3N zW3fy_EofyZSnUx+gSSYaWTnVTL!OcLo8gnoM=89N{5tD7>*Mba@a%IMpDXosIE{RS z&RsO6D@3Y!FQ_5Pk_iFHRrUaUTBcG{Jt|+zv5&Q13%+kTR^mq@^7%>U12NIy*j-gR z=?u(vXX)u{X~`nfl*vkmcLWd!yjKS(TJ7LF8=bx%D?IS?g;dxQrP7)6 zaQezgWoecaq=khgASooEvGm$B4>sH=(8!ttR*i8V-_ zLS_Y|sXsatWhgNuUH1{%Gp8B(Q{5Ra0A1W=&HD4oN1!G;p9bpeaNREojo@zR&icO6Doo0gMH zm6JAf(z&>|`zJ`MwLkLfQV0XtAo|Bstd?aRm}!; zP4=h9CdnUZWC+xgrOc<8x_QVcS`<>ScLZ37NS(30h?_>zo6grbbLDtz=6gK=dZ#ng zr2WF)Fe*8?=C-jWT~{+)L70_pmFFtr57Wht_sJi_o0(30r{eQCAw`2pqQLYg5XAEZ zd67<)uHgWs3sQ>*ES3YTdSe^?oc?t2%D>(+_?N;-N5DWd_+}?s5*aMuevzED%iPAA zjdEX&o)5%0(Z)Plca4hiXERjH{{S6EJ5aOtD~u`G<2qH%{Z(dj#iq?q%DJ`k6i3vm zJ#Wg#!7G_wVR*fp_)VL$9vhPvlNOnHm1SJ7)fvlE=rX0HXevU0aI#0X?Z2u20A?dQ z%#ku``NP5;C?--R*Na-uHr%gCb3>kC=GIY|R+?Pw(t{vb#WJeyVz=X&#!M zFofxaI#ji3>It-ZtA$?(US@ca&OLu9RcVoiPr;g_8q9MgnUvJ@B%L)0OM$7r-)cFQ9u0~CO7xS;+|d`@iF2& zfT!^eA2@&Gp^~rf9$et&DN}-Rb1LIBYtuH5GEmNxdnq*tP(N`VrTF2Zp&t@#&S1pVGS;cZQSJp`4(o>Rm8N|~f<)1*J7eNp%~d^`Dfk6lpPUsp6R2$8xzptcxufeGmRUt`2fKrZ~M6*Y^c|`ca=RQ%m zGlOsfk04W5VK_Yb(-k=q!j(J4Sy>-)W6_!!C5zxW<8h3>Bhg$IM!sxLo z+(4u_M4!=3m8kk_nt}C?F=iQI8Jf8OSYi`L{;p%5Y4_w*YAThVq@Gb0iF~bPc_crF zLn%W0l8D(<$HPKaU(7bzHGe26K;@q-%M)Kk6(~}>yub8~oiRk|Kv7`M0gpT7o`^Nt zjD)F2$_akDjB*rcGMQ)b7!=`aI&_hJ$=*3SGz~0(%@Ld2=P=LW%L^&na~!=I0U(DR zPIBN~g$l6A0)^=daa9fWhO%2*T( z5IVvm&1Q!iG#EjGOZ#>ZB1B9CHpD>%)e8gy&(bthGl$a;QpqR^sC5d}^~hVf8Q0_NffnpubtAnugd{cQ@e9QE{o78>WL zScC!{x9lJQ;3bN03k>16{6fGI1K(rzf=D950WJK{0eFxBB)4tg^nfHr9pV7pViVo~ zks?Gp?*LC|0KK5^XbCPY^|SzDM2OdSfFw)4(IRz#BuJ4U2>l{NyTrd(s0yM+(5vZd z7j<_TL}?*rHB^MmMxrh^jw(hGB9UuS2`XBhM8`8QIAE8II;lXbNqe4=N0SC} zb^sO;fmoHlko(6YIXXO@qXM|;Luk8nin${=n$SXuihQxe)RdWofD${$D~U|kAf*G$ z((qvyriLl z>hVBcl{f*%P&bE3Qj=>pMtI9a1oBqD5iAc@idJ67`o)t-QndpWFXpiKih;#qA*!8V zh7I+MHBA#1;E{Wn%f*DUr6);uyO_ae)2!*z7_@Ve+^D!ID@z$l-(ag4%%@OFQiTGW zcZ?CL!6$E)GLfoWjbQ|>t^-Fl&8^YT;7bG$g)!(}JC+clWv9NInCQ83d76+_EG1Fh zFru)8GPeQ@9g3JFAP}c5c)1|6ff%%R0XM0to|Se$WfsP>V&N^>MefMHG_5>j2wpK=ps58x4%<0>|wDm$&8w z79i~l7C_rXJKR8cj!0rmLJ-7>0K57{PKec!UiN^JAQbg6HXHsUNrs1a9W5R#_}6eC zX6_eYJbuC`O6ssR8XR46(CYm<&y_^_D1YkF?GzWaql)5ILBe>o!tBAq>~dICoNEl5 zAv%CMR#I4p>hblu7gC={>e#hW{{Tzh==Oh+;_5m$>-2NOFDvu#d)r~c75PPnZjoY;fYQj%MF&w;mPcU16f03+t-28wcw`5EcmW|N zQ9oD^vO*HIdC4Qv9bOs>CsTX%id3gAlFi-@rN5QiurLW*E>zTl5iFDJS)v_fRtYIR z;*BgkNAi<#88YT9snZ$Y(^O*3K`R=V5zrW8q&5DLWYkMZB!cAL@s3WUv;9boEy!95 zlV zbS$Z0nWTg@w=mMu73DrsdWebutRthiv>8YaQ~>(KZ8Tfhg(O^B*StE&2?|-aSS-o~ zRs>y)RXi<2%B_ygyhK7KVo7IU1>oun7CY?GRG_m^OEs?+ETIZ10J-P}@k>RDvKc|! zYr?5XaH5vE+6RfPBsmt`LNXehuselkeQCM;X>h}OI)<5kgqRh+5}_EAvRJ%PhkxH zB3VJ61&^NP`ovKQNn*t90sy9AwukKj1;|R#>I=AsM8Tr!{{X#cTPZifWyl`|3wdRut0X;3dHu>$vu{EPAubd?!j zs#zfjy8&|^lK4k(x{EyV(ytiCDU9Swl1eojB`GD3)QIy|F+8IU@KlwB&QMAc3zAws zsC+0m13{5EK_foS!&U)d((kvgSOEmRC5R2`U?{M^ zPO#GnAWO4uAy&YbfE7TH$=(zO021)}(xas|?*Q7sTdV*Il#;<9{bE2MlVK77TKCxWHg%B0A2>2>m!iC#w7^QZ-qV=#%<%cmz34V?{#?gT_ty^vAAq!lPe$dNN zCH6huD_Vkp0PVSoR4SGMC@w7+)5vcO_1L^zq6r|F$DWoh;fRdcS%q4?C^FPTh~t!^ zUf1@F%G0W6l-LW#4MMyyR+I+n#thPQan-Xll>!SpGe#MhKx8~+RTa)9Eadc#m&Sf2 z;oKg}6uFABK&n*yW{!wR3Svy@$d>;AK&SdfxI*mnug2D&^}h{V?KmkxQZXz&O19(m z2_O4(d_1El@TKTcw6WzoZ69lXI2=^S_-`YbuZD85nJUCFikeAu(oDeWQYXuprXGPN zJ|=$g!(^?3l))fdsc83T{=;XJQ2r!xl#>F~nt8Jjgq065j>(sXPQ%g@jN(gDLWv2M zt=c*rMm-=C;M0;C-{%-g#KhsM;CsilN|hYcwmUv(#HlCLDAJOoYAm7t80!`D$BCw0 znEfK*i0hOkJN9!Jv(RQJg#6EVi({L+IEunmQnEu{J0AyeDHu-@uzW(P0Z5lr#1Z}^ zl#lBi7BML@u?3+3HHdF$$jR#{%@}zMKi?(X{{Y?*=Z$;sywm$9vOY4Hr8QMA0VpKO zN=&W|Q7_Bb&YS@M0M%o}vF#s=ZV5VGN9FG_&r2?U2&rjR?=E81{{Xkgi=&j)O`@&| z5+q1~ks?HZBuJ3~Zjn$VFi~b7NLZ1p+yy7h3}@gJ6ERF?n+}sLN?hs5LK1|zB%XpW z0JsJ@e5Z>{z_E!qw2GClt_UNV&LVJ; z98uz*74qf-lQ8-zClQrPT#-^~LQ<94MTeE`t5;y{9{_Ml$@Cb#HFY}l%$GSOD*DIR zURwBp$iEQyYn^jv5&5mg@H`*=ke^MMGMyeBPbQkAOp;I)rmj@OHeyskLZt+&P!8hJ z)_B%LoVH&jXOT)#e-HLPY0?KO$pF0$k)5+3gt5XFfT@*TdM*+=7bm7i@<9;QL@Sdi=c3qcG zO-Y7M#N`A|nJ!F(O4Ou_2h#D}xgz7Q47dxQ>GMW>q^MD)#p!EhR7pm*M4d#-00(sv zJuMr>Zac3YOv~Xu*5Di&;qD#4tZR$B_VWpc=A5Bcj6(&Y%N2N3uME#hiVzf~lBtv4 zSy0lH=_h+UetI(p>Bc=!%ZbF1&*$mW1Oq96O(zGpxzg zlkkiK6qdEfps1*DXBSt7f&ttlr~*JYG4dX^wN?0>+)Yx_gF2y8N)xhNy9niuITW9E z#Jn;6(ES8^ zm*MU4QklwrOfn9G%PNMa6i9fY9e0cQnbWl!~lq znTVK>g)KzWDbr?3T#lo?{(t__R~mBH7PHq5Wo29nhYqB}FuJ)?Y3ZnZ35iCuBn1Ki z0BJ0e1712GD4!e7GV;+~h8%k+$j7KKIvKKX%1_n!MGIZrt4Xtf;S-&>n6EOPRPM;5{ULQVqnKG0vib|6$WLr`} z0Q$!p@XC`KVjN83USyk!<9M|1 z61uvefT@L;SO5S3006K8InDy{8#Qo;JyBK$Ne46U~@`HkbE@b&SZHci5o zl~b!QRhbG&u}PYy+C6{ApN_{mJXhf|_zQ*SifSranP#4^9iZ1LqM}(0KqR!c7H|Q) zc!wLqm4?!x52f}_Jrs^k^ zxarHLFU6eS#vVLp?BkH-VHs11*sc*>iRYX~dMj%eO)V;yBApU|N|c~L2@QUc)$kvN zUQ))SXZ{RxLraGcRM9S+q??UIBz@zW;Z|kKxoe%?Sf%C+!A&Fmncxy=ab+rU zK$AH#>RwvAA22LquY8<;o`ySPXH@t=axuaVEaXh*$K2h9V$}Ga1&gl^%T@R;WUa&J z(ya+PrY2=P)E6!V+*@e$j|sU{&a_xIec~q)c-x;doqZ-x#wBFTy_hovP9Y+msdTdw zEkngxyh)D0TF)In;A@E0R&u4EaPrHPjOkRWWFvI~m%r4;=Hag~HF%OUPE5h^JU;}@ zxn~Kg#f26*HBx2Fr<8>s6$=R|A;5Rp?;Is5xid;JRC%-GD7uVS;aSUv5ix36E5&6R zVK`LCO4(B>9cd|0AcsJ3Ls~v+%j0hl@EHc-kF)_y zAtTr#j76&Wr*r2tvE#m$+eTQz)BP!;cFH_{{{Y;!b*hej`P!;Mmp7ZvB82vnn(ER2 z0IbXrk3r2BI(f#iG?-U0JXFOh74pia%=m=mpQ2`xW4Nc{tMLH?Oul35B>Kp~Xb^ts zrxC>BzY*?yv6_)nRn5k9Lcwq;F@@8o{{SqlBk>waexJ|8n|hwS_&P6`+Rk)xC3hbr zXXVS4jVRJi%~)+_l_=BAzlk_@_3Iwk7{I{(CVbiES!ATk%6VZS9d-Vkv2UP{75o|b zw&nwiyyoQ04~)EV%o&nI%t?L?J}rqZVnT$a9f`bpzlj)$!+s~6-po3RX}D#AR)jUb zg+Z;%a@2PzHS+z@(;asG;$+(8W4!oe{B?CxW=&N+TEGu=DAfK<6J(tdjl)g>4 z$|fm-czKFBS5j%$9tbH#?sZbQx;_?sGqN67;^#bEDB#~*$jTo>h^ zig^>2EMGcfSmzhNNhY>dGbh85hs%*u`hXHuEhKg3*#Cw9&d1&lyq2y zZDMkq>Us3@X#|q5kqeP;mra(+W^o*k9l4F=7nv-_!79!p=iI}CVc9bv$-whk@R|vU ztrHL?5#TGsQVS_U=b?(Zv*tgQEN_<{A9A0`@y>Y06PI%>PA`dLIle+g0MtM$zeL5& zE)tTEkj}N(Bnu7A;$rSu6R*fM7Zd4+z`|U){DZ1wlzEejCS1$^05U-b^BX&wENK`I z5cq9`N<*g@#-_-qEo7xA*8c!-BUF41F*V^Fm}6K@A`>W#c~hjyQv%BxzXYGOa{mAj zULi`#8Lx&|twOX)IE`2FPRW=PEwAe4B3=1fUZ+R@04&>F(eWcS)^Ixo!!SHg!<+ul z)6z%9U&*{9;+{*)dC!ci zti`b$DRbxLiV3J$lS-u^wAo2brc5duowgCKej3x~)Ns?8d5oc=v=+Vi`*hn~2ZHDKSbP)X1436>A_W zQ3qHBhzxd(>zz4^$(S!Gb^LGT2Zz{hV8gJi0abV&34zfjj7%u{J<@Vq|>L->>CPMWyftQ-YMg*)q{>oG zloje=%*SZ%{73kf{42Q+;XXG($>vMJ6^-ILmWm9&gqaGcoOUy2ln*F=<$z!!KaL; zU2^5mQc`}xIypy)GmEY>53&&7NSa&N!`heaG(;=Q?m@R zWZ9EakubiH!YU^2n?xJAFhU0J7TW_$1xg9(WAE3)x0DW2^S{FPE>Ll|hqz5n8(T>^ zSiT`TKuqAHF!{vM=1Q+(4Wr;Rf{AmIr3-a2^wTYTQF6lm7IeIoaDOJ|ENh9_tk2TZ z(O~owCmB*Tg|2Au(o~{S7$gF2{Uf4_c=mo#V$zoWhrGGN=4XT72<}j_AEd+&2%k;Uk3!hD;7SvPXp(RIW zH#>r4$&2MF3W>0(#|zcVb8OiX59m&odUaDtSI3Su4~p ztE<8_?e>g#03d@5kVvqFJ)Rj3rCWZ(tO4~u_GhW+>T&)rP~tSHo|@dhNh(~Ge=r7c zQhkoG9q*I=O880ej>?&%pMH92sAlF`dfC!)W(P#C)rv0=t457BGv*6w*$L_$Pt-qV zD-T6ReBvEZ1o#+ypt0N={{Ukif#ClDIUEG|wBp=JgCyua{kk&Xso9HOf+(bVUP>^(U4Y?OxaCIu`dN>JP&A0U2-j|1|B z!F-eOnE0Yp;9T3zlQRXUz-uREJjP`eOPC88bAm&Vy#Z+>p>ZETI5o}ZApFpABQ<9p z3E|4E&U5hDboiz*RYtiprqjzlK#?(yfqjETntiKni637lz&T#=1l3wP(7D~C*8cz(e9Os(H^)&&%Fa-oM~qX{)Ex1OCS<`)TUJVc;Y(78OAxmy z01{)#Eu;cb`Gi|$8m4___y$sDoZHDKAF>`yn=oS)RC8tEo*eNgrmk%o(JY0Zlwe1LC(T zzZc9`Eo2}AKwp7^zRw9DR3rg9>lRas*iA-sa+FYWklg=hd#AnOWD)?zj zFnS-<)HsCrzHzID98CDRNij08zPrXVaV>H}UuP#{hVd znh}WL`9CYkP6sVive3B_ooEOuLP1agBX=?K2Z_{c!+4FDC?+M9CmE?h2cu0;kE36+ zEsn{;`IFALZCvz9m06Uvc#9x5iHE8G0K8-8zc3XzeRmwQg=P~{nbfm0C1RvaM$18* zrXnP^$m`@=xc>k?M^7Xkkq9Gk1QIrgOZ4dzV<3qIzvw_PXc8nyktiIFPn;?9ZWmBj zq)WtPt5;@NG4B5W+7-ZQ@NRK3&Sj>j0Al<+!`D7wA2QRe7xmJV{v*M8esU@C+9~rB zsVJ+Kr6;%w5%dG&t;`~GUmp>{MdhqDXu&YdE^09ul;Kqg6DVZNC`$hTl`gxEq(@v) zZL0oo8~9n^`f1Z?DZEK4C=(Us^@OOZ#HM`pO91-s2C912l%i4qN;U#3nOjpiB3!~4 zbkZZ*--CeiCDte(1xnNhn25uwOv!6Hlw117OsbmcD*ghGT*77Co0 z+(O4G))`2~Dght+@loZTHwtX)8Fwl_Mf{LdOsVB(16@H@xl$=mr~d%nE~K+^5jIJHt|SZtA%N>wc(B4Y#4h~%hA z)*WqV;$+PPfC;yxXVNWcT2zx6syZfiJThjakSwI0@ygQ9appHM!(nQYq}>c&<~d3h zE*q}#i5oeZDZ#Y2(W5VI%wbTeMMK&%QWE3L0rie_Ry45IYdl&uv?34_*JHnUc*~#= z&v=9lht?ytz=$`vcq*_*?+}tjpy_o)PzfvyQtpL_J)%T{As!eI(6Cd#ydL0(dqfAI z{6q;Z$NEIjPe_afDlE=^kl{cV5P>8Puu=#c#!6fYM@KL<+_8$?y2J`@uoPGitQ3LQ zq$*aEVp<8(1E%Aw1rbCJjv)=s%??#&0?-KRyH+lYjJq0mBhCH~hnSbhe;L+6t3!!|MQ(@}I$h1!i|>4F>-Jh!6y{LdM1j|;KwP*Hcmei`rVBX* z`$dJ`0@QZ2X%8h66m;sh)-fk3Oh^I!BPOp>nJ;bHF=m2GGeH9mrB17xMg}J@T!keQ z7?EhroU&Bz-$=u%R-vRDn9}5j4N)sZoh2=$uJOdwC8n%3f|@y+-BRT#0fw!Qv5qRS zBUn>0Bg{QxqU6g)B9Mf+00-Q~YVwj&qv~2ELedml+A31ZX(jtbA!eYU{r8Iklt={I z(8W@THg@l5bj&ZMob_P^$SnuUW`Y;|u6>~rL1H@nA%Id&-$#myi%^rlPe^b_m;neU z4LVB*8(f0k(L9iafU`wPB#WM##fv0@(L&Y(`J22{4l@;7&LK)&UXO{HGrt@TYmB0aKNyHAhQ8xG12g8vc$j~JI8av7EGX0ri$H~I~5zE zKvMTNi_(9^cZw+rRVXK`UM@*3r~Ae{nS7QZx}UUI0Bc1+q;-c%fZgIXW`_sTBmvyP zaQntU!=MlqyNC}GEtbO3Ez%%S17QK7u-K4Cp!d8-V`Bm#2w*t^@NCft1T+91?Gb?i z$KC*R?mf&x#O@#nt=R1g3{=|)QeN?-2$I(V9$i6|IWtmhl>-&1c7gyYAfKdYj?bB& z8qQv&WezgZahomC5l5S(cy*cwlvE@DPhjD`(cv>abf_45QKeE;Lc_bB@%I;>E(gu# z3zclal`yJAO~vrZ2EPi_hf$d>`cvvfzOnHBy(Ud``IG1;CTdhsJZNH-q_GA+(BI+b zR$W7)EHZx{ExvW*`+djrA8GWT({&E?wx0h0f0Dl+P4zHvVZ2nWAZrXF+DdACLX~sC zQc7+TvA?8HxqryC0AA7i+uZ!srdX9AqU9j^#ALI9w((hHs3i&_EF=W^91t(-6a=g! zpABpd?FL#{rB)p-VlgZ=2PWXffJ;hBTt!;|PEkjdAnxr7kl~x|cZ*OIe8kzdP=K{1 zw1&B2$7rRpjV`YWyB~uiUsE~bnMPbkl-TwfVAH_=VINza)LMu=V zKQO2YQii4%x1?AUiHZ649Y;tWMD}8A!T?n>TzkAK!jhW?^ou3{0~Q0TouO2sgn(R@ z=wmz;ssdD0bd`X?;fj(rQ~JeVt@MC)`okhr;-KoZWr_e=0?nJfqA($e_7G+TAFQ$C>N`s$w(k^8X^Uhm1p#o;CC<{Kf;Mf;2}QF6r62e{W3!#i z32N$5ac!Ygy+kD)3zA@^ND1Bi*1Q1H+@CluV!<&X3JeEx)WvfOk^>W{?E+~!bsh}uZhcV~I!--q)!na2DV1x&vlo<%}cGFvz# zxF2o)k@n|<*)oeHEJb=$7aR8dAdk@W8v5Zt#lKJKRJ`Do83z7`vB&iAf}p({T)vHvX`V zNpH*$Npi323t(+mW`h7&0#D`)N+k{~m}G&_eIXI)7A1v`)+wQfa(>X_$!Juuu@Lc- z3z3ili!;T6GZZv}!Vss!yG4i~jmGdaz-0jLZ{6alfQK8fizY1s#^=&1n!7L!^@_P0 zm=)v{6(07qakVKbK4%ZOjQl{qkgRXB#~V9QvP%)PbcvVAB&SNfI!0AEbvfT~3}ef& z`J*O7t7Z-PjUZl+pZy}#vouzl4I~dz3_4Fi+juZHv4|h6N3#eZfE>giB3O&N^oZc? z5*EM+V_+djd$IaMm`z}Z>(VMHr9~>$)!<#3pS_^6jn4bT0k`YDqJdVFg29KUctDZZ zS{#xc(jTMrgtCp40rr3*!w*5cCDg$;FJd9c(`WLM>bxYvO8ly~NC8PvQxHY&;uU4b z%>AOpEG>eEP2#oKyZyug1-d04V&0I(0m7~a?D5ODw=?j3ti(OLeF@rXa}Kv$uXqNnA7zEWnZX@&tME) zF(5yc-@H<M%Y zAweJ(>E1b7gQeS`jvBkfs7lr1kXz-8Wo;dIGhy?qDP~eDG=AE#FiFf9Eox^VD0sAU z(C9b&$DFy~A4<6RFXw=F|jy#hZys!xpMq>akb)_wRyK(ku!gji)*;)3xds14Gdo`NsRG?Qzy zP8mlae-d?klq1}%0T`H)g6kGS^#@?C@tu=vP92)Cyg?unBN34>1L&}0ieKixsbASW zrSWs9n_s}*UNIF*QV}yF%t{iV#4?foap8^Q-+vq;a9lTnIU1IjB9jluB4m{Wx0!2V zKFA+<@Fa4V+hs|pkl3_Hks<;_i4p*jB1DToks@ww1Pif^AQU@o4w6z_KpRAjES9pwWVtdA&x45K-mo*ZU4wqFwQkIvrEI__h#;n`0Lso@qSoTe-q+H7i?no@j5X=;}- zN-fsmKWOV>@ZG(^AQG~4f}a* z=@-B+fU zz=pB7F*yV&C7=+IyTk+oarKC`I~Z&N_VY!w<&_kNI|22JB}~vTukMsjT};>%ThB`nyFRwwN+@R@Tuq1_zNjq$4F2PLxLTx9BxeHXOWyPvZn`~ z@yX1Jz$xg(B_0cc=BaeblS?c#xh7$nxobj4@}^oxU?b%{4kL_I%}pL0nbRh$fSFPy z>r#(K0A4#CM+Z3ZiOMxA;LdHBke4$Pmg-r%k`Wgo#^mMQRur8i*9Sk$b{UtrQO1nP z!u|+x%DXdV8VpJB>}fSbCbGcmAuN?B5=Njd&Lg1JV%dVayZ4o5X{no1#XdaRg%vTe z8j0DX8wtyqhaSfy<&3|8*H+?n6TB*XHj_N671ibGxIF1ql<5ExW=dK@kQjpM192Nag`W!Fh_4&W@B2RGCpAnGR#LgR ztch4^2?dUoRxVIixF!;uYTIb3O3lCVa`=nzbD8Y1lX-6ClP=7|@*YRjY39vAK%B6F zEeS$R!cdSvJ#|Nh^_30dymJ%FPaFAB;vCKta{-ZNW$b=kGAb8`%&n0;iE9p(Yml{| zzoCwbmm5bU{R-~)IXt(R4gp)@&Y+W5PcbDE>1UPm=UD(CQt*Z!BvpBNDDf)=# zsWTQuUPfM9tjH)hw~ww?J1)9lUZ3zPS#*)=8X}5sW)8a%ENu3Pr$J~4CCiwJ?hj^s z5h-dax$MZba;7k&#O6#;ebQu1PxWZ}SImYT%@+ZFCR|M8Zx6X9#(1@r_=l75+7-yc zW@t$8Y11i5TGoY2(pg}n+=h>fJgoBtnK^OdP9MbVqfm)hmK9W))XSKBs%_G*LJ1#O z`XayDWaGtB6E2$|<=RxHT13Q2Ql=?n3+_?Z)-Fg&QcWw^)ErW2`kkL7a>>t5LFN`; zF`O0nN@KY$ffEelgN*+GhOV6;r_Mx$OhH53unp-Ib1Cu5%a|1&W8i-rIYh;&v5E2( zM~&c>)u9sBg%2`ToeWY(VnGHqo_qbJ4q_{?x%7EsBjJ=)iLh|azfecwJjqp6DxyS*a_Oa@%a+PgcTsb56$L3jDQ{@n z$BjM7-6p8|FT?);kADz2OO{uc^2aM#6AP!9y+)r5)gd8W*abfEZw>gX&sWC>ja0lc z%2=*i%Gg#}NW>N6(ixJe$t(yBs$$6nhm>1*`NmXKT|}RF^j{~u#9}-R$+)g7!|WER zIhI+zBTI;`NtY+gNn|s#Y)eO2LMi+TnJu+XgX~^f_+orQFsv$r2C4XlVYzaSf>1=s zIeUk4wa*<&moj-E$7tclEIA|L-OGO$GiG+?3l+`Sj%33t@hoc`%sw2YDtGCM0uYpv z&OiV;xoG&qBjR<-C9~9O)@ZSIJRUNcdlw(Qyj7Rkc&`&8 z$R^Kj&_Dtm(ncu`n!1@|N@tKeLd>5waRqZ!eapar&KQ`_bf1#a4y7jPQ68`sxr*~G zWS*}Or0fl%X+7a=3LX7>7>pgd!D0&$Xe|E#&Fv5YCCfQ5&;Tvd=>`CaORXRQb02EH z5Lr`#+>!h<^9Mhft1TkC7@Q~0tg4ofXBjf)_)@9RraD1UA5}TpJ}b#nOiGV<`?c`B ztL5vAUkNnw=f$oiP+;^`vMT6tnZLa0fIAFu?KMd9f|2t83trpDk3Jwj7A{)(Y~}i| zlK%jQW)($Bnbhl`tHy9a;mM?yY_%a^e-&!;4Ntix;AgmP-7~cE!j!U-oPP`gvz3pF<d9 zfWW5vv^?(#GiC`3DwY;P6rjY1v?85B<6BXH08YX#q^GK%G^UE0WW}K+WJ*C%2^S={ zLEblqB%FhB-=92R9?M)6#B%K+%al^;@hQ235L|@lSy&o0OIcC!7q9}?j$aw%KREFA zzE&Au#*8LSO;S}VykXL3DF{I`MOHez z&4dXQs1=?M>FQGYCKpPzC(K-WM^xkk3FFrkxy;Ly90bKF=yP@>jIOSpy0ELllm?~D z*QVtpIBu^A#9mBt_FKc{uORWRMl*;5{CX@)3KS{n@-N1i74->?vB)0}_}9uta!)q1 zbG}N;NXt?uPQvN&dZANOk54ElO%*(uO4g+;mIMnD3lRm98_US1_C4*-Z^Gx9zlc_K z%2hnUa~qH{QnKa@s!3?Va9Pz8DrS{B=4qKSS-U3Mt@Vzd!ry}z4|zJoQ=IZ$EM z)JU67YAbN+SriJCwCO2SmCag-yMwQAEgEMW_<4L{`QOdT=4*JSD@XOfI2_=W6Mz9_11g<~-i} z8<%f?<+0ncaeKt)6YvAb`I@e$F=oGsu1AwPrh4YoPEHRhYpFz%Nj1p7(k#IK27HX+ zn7F6Ue-})fK3YpmrJ$vurJMf%nq_>zKk~;{neYSVS1+lvFCBORK#&-!er2sc`qem$ zoFm|uu5zfehdi7FqM4@1!>W}%VEZU0F+D~Y{i*&&0X0Gcvcu z0-9bFq5Mr8Ka*BS>eB?!2iiHqQKp~z&3{j*YvF@C#|MwVuax?_s{Raf12-sMq3kY&({(fPktPr8Wn~I+~vo#X{%M zV$zgU?%_(5knh~ae-!g?z(*C#k}*y@@b`)so+^qtbdoCbMk9+%SA{HTNCh+Y0y{oG z$o~K+yj!eR9m@wf8M;O!g#Q21+K22F;_)BGNve> z{2-Ga=Hw@Woal0mhGwoV<2;uvLS5h+4`AzvjTl?YiXTBQY*kV3X2q;CFFupTRO znaxFBSHO6~g>d4YqX|wXw9?>0dL}RB@Y0gBungqt5ubk*!?pD)#^t{U%zVSa9xde@ zK1MB@I9-j{>YQ`!?bNu=%*Ot{-EDl1e;DwO_jDcxXrXl&vfW ztbL{DHDpv{}-d5yxa<)%3G4PtqbxwOw;V&s&fZZF3v@Iu&F5uV+3U z<8?DDCjS7k6%_RIH8U&1UF_XhMEB8Y80>w`GxLJMwE)HzGApF`Ra0d>(K%@&*v2_- zkWW>v)Zf^G}*_E-Ycorp6IhB21YpNDoGed1Pb#m+lM4u|78PgpPTtryDA(Dd6*_IqGPo5A7a|4JKwv z;&~)ZAllu)jEPjTNGp5BJh7=j1ij-aQrAa^BCc>t%u&*txDo7CPa z;CGHXZ~n!p1X??f4>G;6Vb2I9D%X>z*2wE#cGPcmjdP(D7B0!NmZL|;ssbGnlEUelJH4U z3`AB-D}Q)&tRyfm3Ih$cfT@}W+johrBV^tdVu1`pzVRxD0ex2{BnfOrk!WHX$L$b- zE}+2up>(-$kz?K=P(L?F1orxf5LE^+8KNEbh{f6fh1$@ka1U5x+7y!P0Q$fME&djW zKo{!@3ld2BK`L&5z;Z*_#7|;9-~l$o0ca^nJN@7+Y9NiEg*$`N1o9Sp z0klN1vp@uk9inPcQ#%M0VWfF~tOH`;d%~AD0Porz$g_Q*2pn|!L}Rz+B9B5our~}$ z0MQ{qEppKT0?%^*HIJ+SQf>H&uviIQfbc93HWOIDkk6 z!^YA@@^JO*Gb#&$$=TzMu29rKQ7;^|YIQ8TTdZ)Hf|7}aGgcB+VEtoB8D zwo8BjJCa%oR0sqgXh4k&5~9s<)Wv{;96+da?PCn<79c-&gh(K;OdE><0tG~~n4x|e zx9N8gV$V${-QyZ|pwiMlpgwxGnqgQsBj=wPI` z)-q6pw^%)3IX45`L5K+wBuLUmTiB5zM2ldN2nNO^NTep#g-`%Heqii6J47TK7|l~O zor*_z8^I)!%>w2sD5@QQq$H_^Vu)sCGsTLxcIM1j0hFOwpkeu<1_g&{zuVoy+G zr@N9#R{>d&P0%x+GhKZaj_5AJ8h_JcyT-8M-tiaW30@;*Y- zR>)aXQv?#H4jqB?j9RHeT+M0$l&cqvc{MX6)_#!4n8*yZp5v#aauey~u9Ph+`Gv%P zrIm7z)bnDbzx2J3`6@RD`3abhN&Ce~m{6?=AS7=U2f1?oeI&VS9`Nb# zWq_bmR1bKiButiUKqIUKvemh@tYJoI%bY=FFuwibvngplDj0*ln2AtA3P^UlmsC#QB4`W86fOD2atWF8%EdFfAxLMb6|!VS0cpY<7xMB(ecWANsUottm)w zrw7s(SDRAEBW>X7($+WJ7$rspT3j~e_IL>jQ2rwZ>AW&!pO}$z)(P^4Djz`<3IgSk zq#JK&bdsZ_c?rGx!ktR8g^08DfP|-VE{( z5?bW5J+A=4HDmxo8`w7SQC!8OsYn)9;_U?MJE64fU`tw&@}chc8yFf&iv;2l$N(|w zH;APn!X>Lod)^Xc(xsKP_9P2HLRG6s^0~Mtcn$|zzyS-=TdYvDku^$4cJ+sxG?q!& zSb+p2CdzVI$ZnMwj_-{yTCos zZ|QU-tf058;Q~q&0tJZev^wf08D>hXI&T%}2^!W58+lA%v@e1Vr7x%au_hljg23(! zSb~BSfRZhJMg-YuNC5}Uu(t6G*-&1T5>U<3Ex>SU{M(x_ysd@Os(i`ys0)&i?vi4O z(u(A*VUnPo+BavzBZWBE6uF5;Cs83Lo`@kpgt!1bf~vjsUWPBGgvSYy{RQ72(an75yWM@Bv4_}sAOpgmXPI| zIi#c^AtFD_S@KIRM>or7_3TiNI4Caz6vQMBjS}0R%tB94BZ4}BGrM2B67J;mgqY+F zC9iT}g2KL2^no@A8n-a)pmjalXstSwE(jj5L1N!miY#yj%?GPOrB)9SB$Y9Rg2Xn^ z!*_qYDqCUKa}1Gwtq%ckFx1_m#FZETr%#l((j$^spR2}9mIV^!SA*hdm+J_VW;?-W zEFfua1QjhnBz1{VB}m`2I!=NJ-_${zLeuKeS0augu#|-WZa0h-Zs+<&ekG+TbdAe7 zjyhzJZ21O8Bb%wt60PVa3cmS(*eTR4i5&#AZfG!@;518BwK%%Jx z0;Mb6ghrRqOi!lq3Oq%AAWT6(WRiWv0GeLT$FoIhELg4K)Orh_vp^~UF@O}S+uTGT zi?kgfTQGXC+ETmCOWnbG&9(B&KGRtE^)Xph-aUdI-uZM;(b^^p!N~!>3b{ii8lfgo2d= zxH0gX<4eQbr^7yPYVw{>%XIV!pG_jFe7b3RbuDtzR9mIo$J&l&IIoHDXP4~j#at?h zGwSm82|lhwr74|hLWq9X5&7og2N!e49<%Nt#!e^W3&e4pPHv+zYMe_>!6UE%fF6bQBnrvT*nbqCK0J1w`lE{vK2idanfdu z$pZ1g)k;*=l`H^HMre}V1kMpelW`f?1oTj1l(>w-59#U=FsHjI{{Xa8ipfnqSA>wv zkXz{#$keH!0bANU(WqqgHup!ozBC!k@k58)3*u5K(1cgy`LfvohNLM3jlbp*;HdSN zI#|VaJ;-k^*oGrCu57t@?Kmg=GUv)de*j05V-sDoXxAwc2@L`x#7|-pBuJ1zkaVlG za=8~Jl`|#;CsK<7r5gd<$I~tve#}P{Ge%jb$8*Ov*>4D) zI!b0LlMTz$tCE)wr^GX5hx$Ra6>Omu?|v z1Y>o0_AH92S+a_S66z?7u*eB2cC)xP^BDQV@d)^GaQorw#w@9pFy1}V=X!i~GiObv zO(G=D!@>%5iJ>zWt5evrUrDrY8-(ZDh}5F3qh9bs;bG7J05Q2bMt|VfEx4{PgH(s6 zubGHaQle0Q>v7thbpMd*jf|!{ZmKK%=hsH#<)PN zlfewJja1$NA{A~C){6jf;;f5*2-YoD+P9K6`(!|_GY@EeI zQ!-StK-Z#7<&ps*+T(cg@dJHc@%OGzGg(udie55sTZS3Nw-w>#7DK~u(}~r|SBXCm zubin0n=8ZtdJN-xJ)8zh(Rqw8lK{y5kN z19_uQE4(t{{Hi<$0LGsq$lknua*H>-~gVH}+yO?F6}hzy2UJSaRkN6Z)Kl08{n`ycp%Varl(*i-LF#RHdtxf#5j4 z5l*^{#ZmgHbyaxoBvx%TZ>bWCl@J{4ECu`K56*`Kc)^MBXFKy=GQW@%p zGU4B-!*MEX9MY{*0?HLD!V_ldF2oRTt7!A48Iv=9Gnu61oF^(`by&?z@g_zSB8Fn> zW=uOFGJw=o=mW>!eo43$PsG|D1@j5T3_Vr#`4@!~>rpznI+rf4a}7*xRuF{^znVJd zFPV!k;aFc5elC1*F-}%5X?GJ}9!Pk^NVtHPd$DV6= zr<=0kr&lgimF3F%R7)T!l9S^}nCd5>k7oQlz9<;)#KVdCgNFH!hV&F!c2x;gItpgY zoRkotMABu6WESXp?HUg;aR(LU&z8KefpG5!sKu(XzcQG@sqp$r71WBl3Tc%IQPV9d z@`SA|ZNrVCN^-8($Vn%D4(o^h&zHjfeL2UdxVgot)DqFEblguBp^}h0mZC`m>l{T_ z!H3}Go|pc`@XL*v#N+dX)KPwuGtV`p;d%qC^xr!u?(;g)LQRX$jz%UPcm zLS@RFl`3?(xOCkjU`(_Gs1yO!%x*Ba-Tr||H&l3+Ec^+1>*5y+s(87>yaNHPq?cV& zPfvqS#?vakYGqAQ90jE^&aEyEun7A{mw3s*zAtk3oTl*q0F8MA5zBbIlHVWN zx-yiN(z9mezE(aFl=#*cmH1D}p9}N8VaF&xT}^`FxO}?hqDXB@TBoSXmH{nw4`}fx z#=C@klhbn8yz#&eU$A_Qn=-c$q+mGZCJTp4q(T!mo_xh2NR#|E-cm?Vez%VQ0L4sO z;&aNaEe{*GyTGapp-q+&gr;D{sVZcqNmx#mnF>)Lk^}dTCh_l#SU(%N5#o;#vj!ti zFB{CtV~oM~JNd0NNwjga{-kjYc!dG6;@# zc#$JMK!Z?e?oJNH+>*=WE zcvE~JS1wva#T2CPf9xZ5a>?=3#(9g|ZT;h;-2{Q-wk4+qlWnezpbGu}$&J1$_;F$^BF7fn3;IW#XaUbQl&6#(HWXD=NkiBAQ2LOClZ z$khDA^YzEvr|~h)+{IUAs=T+2O~h40Hv+^$f~C{SK$R^s7~Rr@l0}Q!(e#Jl=gwy^ z{Lofn@-ytJB;dGAqft7lQbe_+tf+(ll!UMeH#d(S{?blP%J@$`8AVxR50;!$6Uh|Q zv2;jFs%-Dn&O%88`Lv}Y*a-B#A&=ny01JgA`v`L;YD3LVpF$$5d;mXF0G92%Jc@dn%9(Uja#b>H<%CL>gu0ZXSO7YbW0KEV z4>$1FGgM^U^MXyou_|3YH7w?Ig#baZAc6=sh}by0vpt|`OLjdYymH;Z%*o7`8uH%- zvdr-!qaVd(QW~|RQfbno=9opDk_m3DA6n%8%FN_G8mWn&K~F56 zr6Odd6pwOYIi*%=F>>JexTKSJa|#kkW-<1E)HpoUGY~ zgdh#c@ac#3kDc6H#l9RI7vl~)lQNG1b54K4FxsOgixjBhKj|e@u)3N}AuR61D)E&o zR*K-)Cz&P4oiOQ_ESKp8bhFUE4q^&O=woJa1B!gOW*KXf!_HLy0NLfNG^vv_&1Gtk zd$N*{eVRICoF_KosqrXsb!_xEl**%+u#xTrSh%&hntl!^^ovLUs5#l9Orx1E=OI4k zJ0=;z4m0K=lYwxPGS+H7QAdDOOn+@CG1{`vC!E@1^+tU+Em^8yke?A!u}lhmI%Xtv z9w0$ivP;G9#!6Bg9W)+lbqoL*Vx`dCFZj z9-d9HTnb$(0tCDdAk|7U2>xZPp-NHpCOt*)cjSJaR~%xsTz9r^}q8Wvoh= zrIdehP|840sF;Z1aSjG@L(G>9Gp7h>_y?D8shCv+**KJnToy!`w5u}RD?;U@3s{9D zwWF84b-}LBnfa=*xG^Im7^am&j8;)eK1nrG5QjYih!Kq7SdsURoTCIJ3qgRxa($v| zPk3+wKIcu)oxburxAF^@WJ4&PvFisPMm86;>`R)qf&!O z62(T4zRnZ}vZGOLs=C~5XQA=_9DD#VoHYxV%O)VHRNh&Mq`@)jd4&4u(o}s+bDTBc z{{X@Avk1fT=0W8GUIe_|S5=4Q`T2tmoi=_UK2)VlT2f~za}bb}ljbSfHP#!*Kg2^3 zt^M_mafc(ST8UDrQAs^2L*I0kf23-POlysN8~B@WLxVhb;yopPAB1Cgo*_*xT=e*K z;(Y|fx~-```Oi1ZkOPEtjv<7(`Fn(o=mYVD6X26p&^1mSpW#H2*YRN zHORxH&yy`mN|YBqU`l+cDrY@QF!hX#;!<;VDp0VXaVhLlToK|bIOLTBsC0}czUL-= zi}*NJ?zn6MQzg{Vpo(IF@L#{T7_fZPzwxzih};->?$ z{(7yGB3kIGae1pUX?23=62T}}eMK*QnU+Fgf#gx3(ELy4qTwbu=+{~ zs?cgsg{EY|sJYdkDE2CkO8hW+jo}6vjb_}l#@;E=VKUQN4Fz3X?LIWLqews|#DWZY zvO-HEk=hcCBxyg1#|QGIPaU%F4e}QVa?V&naH+FusdBa+i7T6^r^0oxduqEz$KYov z{IK%B%mD2`62ET@c#?Q-x|~wCBVt(4#4*fTZCYt6Y5WA0OO~UdBngTx#kw?b{NV9( zf%%7=EDwzJTtJs21Cv)zgv+QD%O-Ldr&}`s=H%KjzA5~0%e8g+S1xkVov{345y5zE zm?UCn45&=SQ^=kvk{?O(tIE4?Xz^rny_wY}-o}LIr{jOc?lEy*ZVSRX-wOkxnKGVS zg`ll9McY{bj@I{$1uu)7bk8`n%vUt#PYpFg_>z?=3GIldlgw-y347AQd z^%c$zQbzm7ElZzserC+n@?_!*nJ~-=N@R;O-qF0eNLO-7*OqS{e3Fukn|ttjcAiAp zS$*Tvd-hd1L(z^Q52u2vsKE_$XN^p%;3 zNcVFepKe*5E$saSRxEh!o_fqV_G+>DORJP-8zdrZuQ2r%j$Z)c=Mivv8Ms`Evq?oT z{{Xzo2tvF;(|2gvoMquR26%jl_-13k>&`DgzYdzH&rYeT9nzB9#*eH-s@ck>pjuS7 zD)6SMijQdJ?qyr94!E@#Gpb6c=g$%O74z;l zQ8N)#%tcweOPxq%k#7kzW%!9x^|hm4%1ZPuq`nbCyRb-5!3$%_{4s&XqAmYpIx4lA8}PXuyoBimwux5@nEo znQ9{CN7gY&YY`r)B&i&cB74M%7)+z5%mbdW?LUr%2$jyA1|ckhn%sec%}MSBDpCIc zw#SNY(e9s)mIE^n<`;*U@=&!%#W+ueu2j+sD5F{r*UCQexIc{t_8H?0I-kdwOZ>6* zbM}2XapBH%$T_!+ygf}2+JHkK3Q@&%3le$IXg}dhx2X2 z={5L*Qk7=>DP=?wHKwvswA;H!S?2Q+p~g9-;wCGGObe%}&RB%W3msBw7D0{C@M+-~ z;~&H?BVpB2Wz3|(r%%Oe1mytYOtKKqx$zY&x1?z05l~ql`Y`&2(HpXm-*_SV2mp?v9G@+O60)Uaa0SdN z!-J)aFaQfg@|)Y%HfXG&gPZq->gl)EF5hwWFs4ve*1QPOQ=Q%;!xVk8I*=Gl;> zfLw@=>k0!BUwAM9bN7cS8g(%q(O8DpeaV3Us0X-r_kvj6zc8vTU|TgL6Ga^z9J0NE9JKu0GKTJBMftHr^m4eIQMcz&UrZ z=@`{hC&``&Kvc3WBOt77KJbeHKzCoTZt-GJaO+9Ns2E zk>NQ7+;)xNn2}!w2sF4+w6dQMQc)p`kl@&i{ie6i?Q+}3; z%o1G1l{nMtULKsh(4tMnqOeIiN;Vy#<;*16EJRenk|o@fsh_ks1O{?nxr}o$TAt6* zj51cW5S0f#T-qtCG9{fVZ9iCGT(IdCr1_c0vqg?U_w<1QIV9K{HN<0046R@tn{DGF zVQq-_?-o5k>i3T4 zge%CDAe%6`j*~*ACScT|zT!KE12J=Stf`vD(5-?yUL7?urIcv|t9Z>xNQNOj3^_71wUA-T-YZC9V+1Rqg(FCD zV!&L%B)dW++f*}18P@Mfqi9pXSG!!`RrB^yt96TGv?|%(e(?Ztv`vN2`oISFiMgO1;uwc}KrPgm&;cOz-WA5JJw!240f0W{ z6#Br+3RR@pKUi9dT1;Aoeg}z5Ov-x6MpWr)4hS}e(plOg5IuT9I%I0m@b{dK3svwN znJm@9`idpfQ_ik6I8^12Dyi07F&zfqNY^z}KXpnJDh?C5J!9!t#*dfzIpc;{Pam@O z7L#9>XBuo~a#M3mvt=J;H{L#C&#J4d(krB&C_Ws(#3*~m`e)egt^WWR=$P_9wI7CG zRp;+ppUHaeiDjgDl$Pjf?m+TsY=u@Yr`U9LUca=05N#B8!J%g zF%ixe0IICTF2Gj9#82ubh} zZOg@Km`YYkdTb(_3f8g!NjBedLIGe+hz^*rAr8#fHfUJ1RH%qdO4PqKtoLYL)H1ehx^b}gF0p;YefZPTPM3>d=%6JqbuC=@7Z19R#j zjatN`DqMtx4uT<&vPjVFydvZ-TEx{Tk<Gcz$kTVMP}>L0JnG*5lKn9WdQ>}r>KO&2FJtEmi*DcDyCu0gFr6~v{nO^My)D+26B<*Ir3OSMz${#M|dc|`V zr7R&J4yD90CMiLZqJ4YBoRkHH5<-tdvC|EKHeXg#rj}kxaQHA1cqPUeMr6a*@-tWt6o})&qD2 zD{{%wJG?R+0zeMkViFi?ODOImBx4Cy)U=amB%o|qv{$Sox!b$#2{vHxwI)*}7bKm; zNjgPHs=lQXWu~58Ihi(Vg#>nwr~d#5zFuWyUKuNhSe+`rS&7WoB}+>(9I*Vy&W=`i zSzX6IGg9Cbgszrc*57#+%;BZ!gg86f&lv(=o?VBPlNX`@~3O0(T>{b7^Yu0#y2*g`ab z0XFLd0M;K^1PSs@q*>1K7>fbc5ejQGI$5pvXlxl`Jp?*@!~CM4OWG_# zgS1BMc-V1Z!WcORt^2~iMuHSJJt7zZC&g}!c(f>|W`6NXH5s~F+R_7>ih#QV85b zB$6&*7AK=b<%hVW5x9Ur4q6z3<>5+StXlv-F2)n3i~2*5HYxhT5ToTC;*bmpyeSMv ztTKTE{NOW{x}&j7_FpO`=e?fqgfETEWGoerY_ z5)uyW?Gg|xPj%4Zj4nyRg*`xmK#n@8VF_RubbgVYRN*8fUG5q<>e8(slYd)Ap5;uytJJe{ zPi8TUsf&_>reO*@gLuiPzm$B;?HCnxSbaDssI5X(*UT70fXzG4q>)j{XBMT)m#It0 z^@KN7Y5xEy{PE@LiHX7G%Sy-_D0Fcje7+#O!ti^B{Iusxt(h}TFsQ~b3W`Y*jPO)f zF)S=E9|9?Hj5dP|6w<+3{8bV`-OZ!dq`leY%&v_2MN3%ookyV;jP*^Ykev#X^9#L% zb%o;-)i9|ZQM!F1iTIsN#Hl7~i|!siigdR;%YPwE5b~0tQ*(`q&{y&`%hfg-hD4f7UtPCZnI~WVtnuZD^sh6kka-W_EV*k6 zQYT}&{T_6Z-D)S61FKIq=&o|xa;?VHg=6AK<4;=n(Hz~Yog6K zV#+FLr-`zZ3tUInpNFr;cL~g>qsTm8#ii4!DNK;5>GG&E17RNq zBcql#3Ybc2R}kaTkaj63%I&sHvw+`4#lFJ|fKd)8(Z=6}`w&w?VTs zd?Mi14_n7RIAFLoZpW%>DlvNCiki9WD_eV*_7yL{i{k;EC?{lW$xDM__);c?co?>O zk|}2>Y@nHCdYjZnnBxy4+{pYjxaE_P$2k}@x%j1WSBFl(F?7`;XiCx)8~{P{4aZpL zj&R3x?6Qoe(`frgmU#&HX<`{m2&UpMEt0baGb;?0Pd>SLjZcd(AuI=yVr}UiLz%uy z{vF&P;Jz)Kcz4N$34vDN@+MRx5Svvv&ScA4iMoka&2!c|&Nao%=Rt_iz$kIaw7v$P z<49N&2+|8&7}R{k@iRMd1BUssmZvgSE|(9%XH8V8%Ooi}3QL2zxR1i?J+JAST$gfk zy4&kV*p7oF;Z%(e$nV4#f!q+{hIPX0a&Lu)X0&1Q>7~eYp(>}ICIvHeB%h>x8P7iy zkA{B@bG(ix<2+r$re_MADKt~-DKM(3)1=dd6?jTixk>D%2;M*%^YpYI1#UrE_~`2n^iKE3IMW-bfroF>XF_nCH%6N@2;e8cVHYbZ>IHfw|ORJwMm<1^^rv$8n zJUeN-ZFu@ogXeBlxz5jZGjYxuVR_dG%QXK0roia&sVkKv8K3bMnQ9DDbbtv52-My!Ehi6%`UM)|KDuLMaNm=@9{e=(2mO|Czl~UyZK%w0yj((l zDK1(jP#Hnf;iVrURjF1lw0OFPrv?o>$tLL?utHw)n&kDpCoY_xWLzF*IfHT`!Q3)z zfvGhK%Jh>aBiF<-LY_Wb{9rS$3$l+fcm@TMu&fgR!fW!$#BoD{(gY+;6DA-8r6Hfl z7)PVCW@DX?Vii?Ctf@0p8f?QcM_2tA`T6l{!lck=oS{`Jde*tP48%;-E}b*g<^29* z^Sv9cV%Bvdtm&J|5csr3~Up$e*=&E%Ao+1Tzu5%haB{0BZ1d?m!N%3dUMEyQY7RDu^v zjAm>;nH5F9m8n9v=nQ_hGRB_#pF10$jtbA`oVki8Sni`5 zgE9Omeg%0y1*!dRdB$c>@KvIsXAu%slGbD(2litff0VptMjy-WUBa@>Wck=71p2xh zHgx&A*D_q0%19)zbL!nAODnOSp zV2!PRw0tP$1D)*QmU!(q6UZ2qbh)?&I=Qq}RSt>8K#)m0hXjuC^n*OrnyFG2nQPLd zE5!aFb8YV*8F_+QYPiFXR7fDEW+gPGN&as!zr1+5Cs$hSW=u7_P}Jg4f|5NU&fmpv z9Omnk%$dtf{vRg{R$s)^Ux{K$uQQEI)FEg_kWiA5{6!OU(maz-jnzs339LrS>mOUb z5x)%o0EZ_Zc~_Cd{x|U2uQ%o*W-Ar_PGPH~mq0i!o?j{p0j@<0hhyCvS31v%nt@jy~sXFOB(EC)MNL zCJ|GZX#~n?>vV~MZjw76^N+gtpEV21NfMQesIGVON!;3rf3ZmxpTsnvb`g4<4E1#q zRJpnVF46LOhO^wscP-z8(~2**V_y7SxuTVrc{I*hUWX~v1!C0n@{MgxNm7snOr;kA zz}ddB@d9BbM)r96*YPmKX3ynYG2zp}mbtXjtWqvSwtXoKsx`Yj1&Ad_%NNGf*yY=2W!Tdq) zeLDCw{6jcF%FhV6m6bT1j8f3ePFbH-hAOIhP%9^-FHDq@E~2HR0dsw$#=N3)Rawhd zGZ}x6)YVfbj586LHl~3x%DibyDg_&MSKLRgz6sp7a_^h@dgC`S+-~7k7n`ecP76M_ z3!uko1o~tqO*F~G_-gW~sHMEX?H-HeKbS6M_~FG)8t~^VaqdP9fM&iIFEh`ez;b>W zDqbF>&G1u1f~g81B<^?Y(biK@l$u{tn_DIL8t;qW8om-`?sW3UG8{R|7^OZHitzeY z8=CO^Ll2oxJ#&*)IcYjn;b;MNI}l^hb-xzQKzMJFYB<}&ZW!e$d6N>Q6AapOOHV$0 z*0N@n@d5V+JQvKj2{RWp{K03QE@K%18HRRT&x*;lC|)>ZOr0`9P>FL2P*539a5~2q znf@OYd0RbY{H&fbqnGE@OP9Gk(tcIIr*enNrCa zZTcNMjGR{D4>DZH%jXY^+3zainC2^tQyeQVVHk>Midhm?lP*StIZcuWa!EUw**_L; zGV!OL?j~SzByi&&$=MGnVQ8nMRx6ilgqhVU1I4KFNH(xY^h@XAiPPNq{TVI-H@`$pX0hC2j7VmPJ^j7m|X z#^z;e`U+XgN%JC7>ZKq~Zs>UEAcWn&G4;cq9DR9@;3vb(&77r-O1}=zk|~?j|yrPEHIf}hgMD}-&Io>;=8;fW|SIwn1rS5 z@w+iDbZRQoqYLF*f|zkhvZQeSRMYkG*DxQnado`k@dkJaq2Z4TD4Oq2!W;!e{{Zb; zMa5m?V^-1E&%@?;^os~s*-Qx#v+C#7PE}1* zj|#4Wr4#9 z6~kOUqYuOJ8g$K&m9C<2RLu&r*azM|OZ+zZzvJ&3xxmO6Hyt>=m@_pR^DKo+PAgHZ zC{x>~__W8<9%D0|P8acRuEKEX%aT{i;_8;9skKa(h=7Ci3O{(xUga(Q4dSMs)W-O* z;`mn;IR5~`u2iypein=q5s@~dIMLA3Bo7TFcrvvoZSvM}$1_T1EaS+K6Q#jZ5nvR4S3UMAz_uEF-#M?eb;y)UCYC3AV{DH}qTEXRtrAeil zj8GC-und_1lk8%QU*mJfd@~D`Q&Y>9ABIVo=tWgZY7&L3{!*j>Po#OHlcnHP9L!}L zZ#d4TmxSTD$rI=PtwX~~MB?PVtz#ai_^V(%;bCDsan3wuz_S+%X7LFM$@qQ;K41R3 z(n*;iGeRXNTD&w6e9B@C?;f7aYDrh>WjS`;ol_6^$aAHOV{$N@t%G4x=hw{Bhv5_$ z59(@Wld@8PlBGvKhw=*F*?5ywB^^+Wj~6C z9XOMP&{O{M%6tVl&ID%Dg(5{vye^etU>%E}$&CfZjw^&}4~fE)f%7CnuxhhodQE>C^@AGwar{M_ZfB4a#Q$EQ!K%eaJr zPMLaAl*(F7fJhd1`$oa%J$N=vpulqmTEWVz=i-T_N|W;}tqNc}>?6(p0JH9~{>pKR zqrwSF=g=e$kNig;c=cZ}cmd2=gCnMV*=dtYk0POBY22j?0DZ`gSrU#$kyX5Vn_nXE zgNFPR}UZ9&Gq~QscOnHC)DJyjE(` zC1A7)GBuJVc(kfeZ=w7~-{u#JnEr3!fBm0ebQ2B>ht*4$TVAvgDrG{H;#yA1YsW<7 zCS~$wY$#RW_-#;9ktS^9rE-%w0RI3KBsy5wxFko_-dg!) z;_TFT?sT*JZq3Y|O8M zBAh0Z3`E7u0ce(gosvL*lx@6w--Vg0hn(H!EX{%O7m~bN2B5>L)lDlB&ly<~rD92P zlDRs;Doc-I2#$%$CoUX5TvlVB|4K#YGGM`@;au>QUVmRK-d!qQ{TTx zFglz5BTd-=0DVF|QShSATx_Z4E{B2qG3FV03RYqh7cR1X5S&6tsFsaMX$zQvsDMMi zMq?gX1;fXoeifMQHd*JpB4gEgPZY+HPhT_r&j+J56#$tl0%A}uLP>Mz@ne1g^p7TE zpAkMZ@glP)@bBU;j#Xgz9O9gN5Uk-%HV{G*NIn8)p?)R74o|Fnr{+(LyjJ6ebE@LM z5i_lJFPytHu^`x{Npa3cLXUhRFny|IpY&jijZ%xduvS;q@w#vn=kCq%lx0v5s>J=0lA5 zGFpc`PY3)@sd337^z#p#xmhbldUdMn}fD)7!A zX8fN!4N$~tvg*;{sCkf?YYLd3!hX@=*W7e-uS3`q^5mpsJuT3#igKXQ{Sv-W+@Wu7OAR9 zmSxOS36{J1!OmIwgM-vk^FA3SME-!uRna_#eY$TS0vR=0l(6?Yem4G5`YGYT zg7Ubec8(!&!w2O1Jz=>oDq-~a-D+u(H!w>z2l#Uo97`kvanwga;}67(nhgC&ysv?0 zx{SGlERp&w7HO0e4{|PJMPj(#C5qP1#PKPLnNv|UQzy?-iCT#+T$tmOb(aM1VDb8G zKTgx&inVXl{PulbOtNpmpNeK&a}%vKn3iG0D(aM6�?XluvgiF2Xp6n=;);>Q`Sf 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

    T^j+`ctp7JrO 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%0D|X;%cthGB;L9LX9t3eI=`h?MGSZR=9H>0#Jj-}= zJ*-hb5FAQ{mFNsACfF*QA~s9hY$ZG-M{sTERAoB^ zO%lMnCunst0ZLGv@C+nXQUx&lIM``HT$9U{%PK`hY|oFH!w9r{GoOth=>B!-trzM% zpYA5IAm+%Xc?>bM0ac!Ubo~{PrEofsGYaS%d_R3`NaK+YQsRn|hG>_U4DSEz9Tt+@i*1fM;bLL{k4x#i z>^i5vI@^c^>SjGZ0X#YW-XEz6m0H#T9-HP1X|7S{BYL-Y=*pD>OnLDu6%4gbwVYNel zdasr-xyp=KCmFz$`jqXtk9%%?cys&2$lP{1kOO;HwgBaesLEUgq);2Xoklp*$voO} zs50pww&*|5qNNg$B)#@6*oHNk$k6cdKU2lsx!`2mVI`_)eIf<*;<$WcY)o7@!14CA zXo)GUCC8TN6_I-^K8}r$7Vm1k9lpR3#>s^`{Bj+9vrm;Mgo=^|db!?Smtp`T+x?uF z={EA~q*3@*oX1C81`o;K7K^&nAL#o);{?{)$=J9LLL{-tR&KMfi>BcVRNVPW&!pPg z^k1&%|d3r_9g&!H6Bw znOm|j#HEU8kA4Af8n5Tk<3Bt`?hmvsPTeuP;BatX(*lVc`Hk^$V&_?7+q;xY0W}ys zGS}<$x zfR{pWnId9HO!ik0{sgV)$@<%0M3#7AVQorT*_34$F%Mz-MMY89%|*S)r;(`Q_ln_% z!Yu=Vrp|xY1qu^fk)jBtoEss3XCYKOF6ohZWul2j$GzfePS^Gizev(079E1lG@_BI=FroR#pUj?MN!v?CG~fojOh{vE8W^qaTP9iZ)lws)Y38> z0V_VO!*k(DkzYRg<2>xgJEJ==afO9|stoVTt$UM>AG0a+KJJ- zeH0k4{o23`e0sDM$iQ*oN+h4OnUrEbvwGyP&z66EiJsqWBhN#8!uU{Td23L7rGX1G z69@=!6_BC$PtwfcIT=yStTYbhYY3hLa{44b0c}xdSm%AR>7EW&d|g@+cwb3-EZKp? zZr>Ws3)6eTw*!(S9FWsJq87(X#zrcrl}p|>*CnV_ik$rxAzH5F3uPFpb9y`Q*}+1O zO>#Nj@=&IWVavGJZ%cbp34!2`=JSL4SnJU+; zOB6Hn%;zAlB%DUS?AaPZHys4rNP{x;GTy%!n^R>8dxW4vAG`zp5fbjs>b+s0XI4Tq zCvjGnn1jPdYa36v`a%k&u{$*5fv_wVM(i#XGG)^5jlO>})O3^is-Fch9(sqRJzq59 ze}M&_=lNb4zKSMEkW1m&92Vap%K^498ZaK%zrQc2R=qu A82|tP literal 0 HcmV?d00001 diff --git a/bsp/mm32l07x/project.ewd b/bsp/mm32l07x/project.ewd new file mode 100644 index 0000000000..52cc221b07 --- /dev/null +++ b/bsp/mm32l07x/project.ewd @@ -0,0 +1,2834 @@ + + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 29 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 29 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/mm32l07x/project.ewp b/bsp/mm32l07x/project.ewp new file mode 100644 index 0000000000..9d4b3f8a7b --- /dev/null +++ b/bsp/mm32l07x/project.ewp @@ -0,0 +1,2290 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Kernel + + $PROJ_DIR$\..\..\src\clock.c + + + $PROJ_DIR$\..\..\src\components.c + + + $PROJ_DIR$\..\..\src\cpu.c + + + $PROJ_DIR$\..\..\src\device.c + + + $PROJ_DIR$\..\..\src\idle.c + + + $PROJ_DIR$\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\src\irq.c + + + $PROJ_DIR$\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\src\mem.c + + + $PROJ_DIR$\..\..\src\memheap.c + + + $PROJ_DIR$\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\src\object.c + + + $PROJ_DIR$\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\src\signal.c + + + $PROJ_DIR$\..\..\src\thread.c + + + $PROJ_DIR$\..\..\src\timer.c + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Drivers + + $PROJ_DIR$\drivers\board.c + + + $PROJ_DIR$\drivers\drv_uart.c + + + + Libraries + + $PROJ_DIR$\Libraries\MM32L0xx\Source\system_MM32L0xx.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_adc.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_bkp.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_can.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_comp.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_dma.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_exti.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_flash.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_gpio.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_i2c.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_iwdg.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_misc.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_pwr.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_rcc.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_spi.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_syscfg.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_tim.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_uart.c + + + $PROJ_DIR$\Libraries\MM32L0xx\HAL_lib\src\HAL_wwdg.c + + + $PROJ_DIR$\Libraries\MM32L0xx\Source\IAR_StartAsm\startup_MM32L0xx.s + + + + cpu + + $PROJ_DIR$\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\libcpu\arm\cortex-m0\cpuport.c + + + $PROJ_DIR$\..\..\libcpu\arm\cortex-m0\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\components\drivers\src\workqueue.c + + + + finsh + + $PROJ_DIR$\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\components\finsh\msh_cmd.c + + + $PROJ_DIR$\..\..\components\finsh\msh_file.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\components\finsh\finsh_token.c + + + diff --git a/bsp/mm32l07x/project.eww b/bsp/mm32l07x/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/mm32l07x/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/mm32l07x/project.uvoptx b/bsp/mm32l07x/project.uvoptx new file mode 100644 index 0000000000..6a6f2242d2 --- /dev/null +++ b/bsp/mm32l07x/project.uvoptx @@ -0,0 +1,1074 @@ + + + + 1.0 + +

    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 20 + + + + + + + + + + + BIN\MM32LINKCM3.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + MM32LINKCM3 + -U6175B4CC7 -O206 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM) + + + 0 + JL2CM3 + -U -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128 -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM)) + + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Kernel + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\src\clock.c + clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\src\components.c + components.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\src\cpu.c + cpu.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\src\device.c + device.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\src\idle.c + idle.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\src\ipc.c + ipc.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\src\irq.c + irq.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\src\kservice.c + kservice.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\src\mem.c + mem.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\src\memheap.c + memheap.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\src\mempool.c + mempool.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\src\object.c + object.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\src\signal.c + signal.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + ..\..\src\thread.c + thread.c + 0 + 0 + + + 1 + 16 + 1 + 0 + 0 + 0 + ..\..\src\timer.c + timer.c + 0 + 0 + + + + + Applications + 0 + 0 + 0 + 0 + + 2 + 17 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 3 + 18 + 1 + 0 + 0 + 0 + drivers\board.c + board.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + drivers\drv_uart.c + drv_uart.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 4 + 20 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\Source\system_MM32L0xx.c + system_MM32L0xx.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_adc.c + HAL_adc.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_bkp.c + HAL_bkp.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_can.c + HAL_can.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_comp.c + HAL_comp.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_dma.c + HAL_dma.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_exti.c + HAL_exti.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_flash.c + HAL_flash.c + 0 + 0 + + + 4 + 28 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_gpio.c + HAL_gpio.c + 0 + 0 + + + 4 + 29 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_i2c.c + HAL_i2c.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_iwdg.c + HAL_iwdg.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_misc.c + HAL_misc.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_pwr.c + HAL_pwr.c + 0 + 0 + + + 4 + 33 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_rcc.c + HAL_rcc.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_spi.c + HAL_spi.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_syscfg.c + HAL_syscfg.c + 0 + 0 + + + 4 + 36 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_tim.c + HAL_tim.c + 0 + 0 + + + 4 + 37 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_uart.c + HAL_uart.c + 0 + 0 + + + 4 + 38 + 1 + 0 + 0 + 0 + Libraries\MM32L0xx\HAL_lib\src\HAL_wwdg.c + HAL_wwdg.c + 0 + 0 + + + 4 + 39 + 2 + 0 + 0 + 0 + Libraries\MM32L0xx\Source\KEIL_StartAsm\startup_MM32L0xx.s + startup_MM32L0xx.s + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 5 + 40 + 1 + 0 + 0 + 0 + ..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 5 + 41 + 1 + 0 + 0 + 0 + ..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 5 + 42 + 1 + 0 + 0 + 0 + ..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 5 + 43 + 1 + 0 + 0 + 0 + ..\..\libcpu\arm\cortex-m0\cpuport.c + cpuport.c + 0 + 0 + + + 5 + 44 + 2 + 0 + 0 + 0 + ..\..\libcpu\arm\cortex-m0\context_rvds.S + context_rvds.S + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 6 + 47 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 6 + 48 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 6 + 49 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 6 + 50 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 6 + 51 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 6 + 52 + 1 + 0 + 0 + 0 + ..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + 7 + 63 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 7 + 64 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 7 + 65 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 7 + 66 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 7 + 67 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 7 + 68 + 1 + 0 + 0 + 0 + ..\..\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + + diff --git a/bsp/mm32l07x/project.uvprojx b/bsp/mm32l07x/project.uvprojx new file mode 100644 index 0000000000..f76a74afc8 --- /dev/null +++ b/bsp/mm32l07x/project.uvprojx @@ -0,0 +1,766 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rtthread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + MM32L073PF + MindMotion + MindMotion.MM32L0xx_DFP.1.0.8 + http://www.mindmotion.com.cn/Download/MDK_KEIL/ + IRAM(0x20000000,0x2000) IROM(0x08000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128 -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM)) + 0 + $$Device:MM32L073PF$Device\MM32L0xx\Include\HAL_device.h + + + + + + + + + + $$Device:MM32L073PF$SVD\MM32L0xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER + + .;..\..\include;applications;.;drivers;Libraries\CMSIS\CORE;Libraries\MM32L0xx\Include;Libraries\MM32L0xx\Source;Libraries\MM32L0xx\HAL_lib\inc;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m0;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\finsh + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + .\drivers\linker_scripts\link.sct + + + + + + + + + + + Kernel + + + clock.c + 1 + ..\..\src\clock.c + + + components.c + 1 + ..\..\src\components.c + + + cpu.c + 1 + ..\..\src\cpu.c + + + device.c + 1 + ..\..\src\device.c + + + idle.c + 1 + ..\..\src\idle.c + + + ipc.c + 1 + ..\..\src\ipc.c + + + irq.c + 1 + ..\..\src\irq.c + + + kservice.c + 1 + ..\..\src\kservice.c + + + mem.c + 1 + ..\..\src\mem.c + + + memheap.c + 1 + ..\..\src\memheap.c + + + mempool.c + 1 + ..\..\src\mempool.c + + + object.c + 1 + ..\..\src\object.c + + + scheduler.c + 1 + ..\..\src\scheduler.c + + + signal.c + 1 + ..\..\src\signal.c + + + thread.c + 1 + ..\..\src\thread.c + + + timer.c + 1 + ..\..\src\timer.c + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + drivers\board.c + + + drv_uart.c + 1 + drivers\drv_uart.c + + + + + Libraries + + + system_MM32L0xx.c + 1 + Libraries\MM32L0xx\Source\system_MM32L0xx.c + + + HAL_adc.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_adc.c + + + HAL_bkp.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_bkp.c + + + HAL_can.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_can.c + + + HAL_comp.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_comp.c + + + HAL_dma.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_dma.c + + + HAL_exti.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_exti.c + + + HAL_flash.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_flash.c + + + HAL_gpio.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_gpio.c + + + HAL_i2c.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_i2c.c + + + HAL_iwdg.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_iwdg.c + + + HAL_misc.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_misc.c + + + HAL_pwr.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_pwr.c + + + HAL_rcc.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_rcc.c + + + HAL_spi.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_spi.c + + + HAL_syscfg.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_syscfg.c + + + HAL_tim.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_tim.c + + + HAL_uart.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_uart.c + + + HAL_wwdg.c + 1 + Libraries\MM32L0xx\HAL_lib\src\HAL_wwdg.c + + + startup_MM32L0xx.s + 2 + Libraries\MM32L0xx\Source\KEIL_StartAsm\startup_MM32L0xx.s + + + + + cpu + + + backtrace.c + 1 + ..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\libcpu\arm\common\showmem.c + + + cpuport.c + 1 + ..\..\libcpu\arm\cortex-m0\cpuport.c + + + context_rvds.S + 2 + ..\..\libcpu\arm\cortex-m0\context_rvds.S + + + + + DeviceDrivers + + + serial.c + 1 + ..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\components\finsh\msh_file.c + + + finsh_compiler.c + 1 + ..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\components\finsh\finsh_token.c + + + + + + + + + + + + + +
    diff --git a/bsp/mm32l07x/rtconfig.h b/bsp/mm32l07x/rtconfig.h new file mode 100644 index 0000000000..7c9748f583 --- /dev/null +++ b/bsp/mm32l07x/rtconfig.h @@ -0,0 +1,157 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 100 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_MEMHEAP +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40001 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 516 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 1024 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_RB_BUFSZ 64 + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* Hardware Drivers Config */ + +/* On-chip Peripheral Drivers */ + +/* UART Drivers */ + +#define BSP_USING_UART1 + +#endif diff --git a/bsp/mm32l07x/rtconfig.py b/bsp/mm32l07x/rtconfig.py new file mode 100644 index 0000000000..92983b6e94 --- /dev/null +++ b/bsp/mm32l07x/rtconfig.py @@ -0,0 +1,135 @@ +# BSP Note: For TI EK-TM4C1294XL Tiva C Series Connected LancuhPad (REV D) + +import os +import sys +# toolchains options +CROSS_TOOL = 'gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +# device options +ARCH = 'arm' +CPU = 'cortex-m0' + + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = '/Users/zhangyihong/.env/gcc-arm-none-eabi-5_4-2016q3/bin' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = 'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 7.2' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' +#BUILD = 'release' + +if PLATFORM == 'gcc': + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=' + CPU + '-mthumb -ffunction-sections -fdata-sections -Wall' + CFLAGS = DEVICE + ' -std=c99' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T drivers/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu ' + CPU + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --scatter "drivers/linker_scripts/link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/INC' + LFLAGS += ' --libpath ' + EXEC_PATH + '/ARM/ARMCC/LIB' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/arm/armcc/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' # + ' -D' + PART_TYPE + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M4' + CFLAGS += ' -e' + + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu ' + CPU + + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "drivers/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + #LFLAGS += ' --silent' + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = '' diff --git a/bsp/mm32l07x/template.ewp b/bsp/mm32l07x/template.ewp new file mode 100644 index 0000000000..97e4912c1a --- /dev/null +++ b/bsp/mm32l07x/template.ewp @@ -0,0 +1,2040 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 34 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/mm32l07x/template.eww b/bsp/mm32l07x/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/mm32l07x/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/mm32l07x/template.uvopt b/bsp/mm32l07x/template.uvopt new file mode 100644 index 0000000000..0a9bea69e4 --- /dev/null +++ b/bsp/mm32l07x/template.uvopt @@ -0,0 +1,184 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 25000000 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + + 0 + Datasheet + DATASHTS\ST\STM32F4xx\DM00053488.pdf + + + 1 + Reference Manual + DATASHTS\ST\STM32F4xx\DM00031020.pdf + + + 2 + Technical Reference Manual + datashts\arm\cortex_m4\r0p1\DDI0439C_CORTEX_M4_R0P1_TRM.PDF + + + 3 + Generic User Guide + datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 0 + 6 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U20090928 -O207 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 + + + 0 + UL2CM3 + UL2CM3(-O207 -S0 -C0 -FO7 -FN1 -FC800 -FD20000000 -FF0STM32F4xx_1024 -FL0100000 -FS08000000 + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + +
    diff --git a/bsp/mm32l07x/template.uvoptx b/bsp/mm32l07x/template.uvoptx new file mode 100644 index 0000000000..fb300657ff --- /dev/null +++ b/bsp/mm32l07x/template.uvoptx @@ -0,0 +1,177 @@ + + + + 1.0 + +
    ### uVision Project, (C) Keil Software
    + + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rtthread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128.FLM -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128 -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + +
    diff --git a/bsp/mm32l07x/template.uvprojx b/bsp/mm32l07x/template.uvprojx new file mode 100644 index 0000000000..1a2de6ccfe --- /dev/null +++ b/bsp/mm32l07x/template.uvprojx @@ -0,0 +1,389 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rtthread + 0x4 + ARM-ADS + 5060528::V5.06 update 5 (build 528)::ARMCC + 0 + + + MM32L073PF + MindMotion + MindMotion.MM32L0xx_DFP.1.0.8 + http://www.mindmotion.com.cn/Download/MDK_KEIL/ + IRAM(0x20000000,0x2000) IROM(0x08000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0MM32L0xx_128 -FS08000000 -FL020000 -FP0($$Device:MM32L073PF$Flash\MM32L0xx_128.FLM)) + 0 + $$Device:MM32L073PF$Device\MM32L0xx\Include\HAL_device.h + + + + + + + + + + $$Device:MM32L073PF$SVD\MM32L0xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rtthread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x2000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_STDPERIPH_DRIVER + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + .\drivers\linker_scripts\link.sct + + + + + + + + + + + + + + + + + +

    a{oriUG__IT#N3kXj@v8gw2ci#uz81^5)QX7=YAL3I+`^ ztfjW=z_N-6MW}((y(CI0l4m{`%+}{D;}lQw@nWcq94ypI4CqF^EELF-K@|1UrT@)hFSX(?-};6e_67I$iM+Q zxvpx^kWn#7#xw?N1pwp(=NBs>pP2w@s)=XXct95ujEji@@MiWJ+MUMpF*Fd<$r*oG zmSh(=W^CKKA(}UEQ15@Y*tj+&>f zI;;1mNE}es3}zSrW4&MfWll{%ggi*2zfGr~7&F>%%rv(G_4=@R)wuL?& z;EGSS%jbA4fe4E=g=L3#Thv>b#=dt-wRJ0U-&;!W=`|CHGV6mZXl^jg6FUbHOx1u? zU$4M3NrWqJMc^8oTDc2hm@neY6`j}(+988Rg4(?Tn{aM<@&>4gjA*g&DHI|RmSj+D znz1doU7!gez=*ufq@mWR5%ERkp_AvqR-qm5%M8z^AAJ^ald@GFW7f^3j}2~1jXknn zWwxjrJANf--ZDy%#oEtA0(pjwb;k~_x6HOW=j-^-@1;NTxSKfg5IxF&_nF!nb=@qB zVlB{Be$1kfFB|W?e`Bi5>WVDl-WEUm@Ydih`{7}RU~z{3e+lEhK@VSj9D6)E zB`rQ>18GYJF8p~QJjn6Qq~LAkfG@-j46bFbzS3476Y8$^TW-B(6@HLA{9yGMe;x3tJM=d<5>@yn2^Bg(tlwcos* z-uB5^dA%83^UIPxbK8I83yaMe@kt%6ijEF_n?)JIx)y%fuFFw@=Am)2z-fBow;7eK ztt#`9N&$)Qavap0L#Z>@951>?{m zDqMXIMWj~cjTV-39W@&nd*mlrK73xS$@J;eXpxUv#(S0S&Yf66V>m!&90{h zM5kAND}Rc=hR1n1UW&~(Nb#z1KgP4kUI&3GBpRf&JI|?X6#Zsg7i07FJQ`O22e>Rt zO*I0kQ&D8@IrIho+o%+xuclVcEdfkB0&+ogJ@+GpmCJoM$f?@LLP2K|L!4L_rK94bYs;x4Y-T&>)brN~4Ydy&!k7%0ha^&ayl4~V zPi@pNTk55UFhHumN?1ZlXvlPRIEn{9y>>WQq;?;&8RjRFyz#Y+DSK-(c*OaUC^>;H zGp_1)?I=DkW7X;YW7$fVjb`2~b4SToRcZLNaGj&Qe3vo))gnBH*AWTRyAgZ#SYt@& zRSyRC{0YXsipX_x`J|U`zZ+XnjlyT)?C0lHF}Kh2H;`(tQ`tWMeXV?L?PJacZ8)ok zz(M@mAcnwwTjjS;-Qy><^dz%;?VFtHClZT&rr~3IKLM7{tvV7(P1lDp)wzm5j5TtB z5lb{Vy_9U$=&T@p2$yqAr06bwsSz!1dcwudc$sI;jjQ=D_6CQ!txeiWGnIt)8TI@f z5$C(Zt|U1*Y7Ko|MKz?*wo$yk@$006Qc0T~bi7utnEs#o zG{q|?m^Qkk!W{CX4pU?(ech$aA#>m$!x2{ZHrKA1=Ol9)ly6x+=l!6hR8Wu4#1}Yw=c@%Hg!haIe^uZyhIj&Ke=_ExcO@ z#zBdEW;sQr1NVs@rba}9L>=bBH+69^F%cb_RQDEgN!gx%&xo8+6kf_w;e?L#Dt zoA=$}deoTX_ghzw{`}jxPYlL3sM}2@+4<=sThvTaNafjMMJoZ7B3?(#(+p>J4y$-c z^<|)&C}Hqcad7+-QlHVo%x<5z?}aN)9_FE_1oE;s9D7GBVQDgEb&KStRlQ&(4;pZn|gNO!cc zXlnU=RfAI$}r8fNbOhd zTxjL}B2DY#sv5t(ve>ofHUG8nIY`GOu$@8d zuAu$Iv*1@I&BJuWIl8*+b!9EqV|iaxoQByGK4@7D{itP6Zy9x#=o0!pZ0xG$aLvvm zr$+K>sy(d~390eYevSAaz`wCY0$p!6SPS!ckaLtmNcZ~B-WtBi&M}xZXd;__lrmNP z;t}D>NCWAoUgf2iUrF&B^)?|Nl=!o%R01TBi9Z=-P8TXoIOIA7C%8}O_&4dJ;LDP% zqNbw?IapxzPgl)>VJroo1`}g`M@cF602B1ND(ac-2FvB>k=)i^E$bun8~*1gcchM! zy4l)|We6(12Ge=`cdcn9jQrQ=JSx=&KwlEcrWJX|(0r=%$0{uK)2BA8pG-S7k(`o8 z&h{y5@TXTR@v8v@Tm5hz7nzllzWQ8UQ)|YoTyDjwK}-6B8Lki~Wh1~T-1^;+C)6&_ zuGg|y2IPbk--U7pfb5Dd)Q(F2nrSFj`5%Cwn)F{tm6%jTli#qhB3**C<=1C=-iZFP z@rq=TT?eK0oUM&%3$5TePT)`aaM|NB*~aNAF~?VK4MMD?W?CdtYNFL|Wajvv6gjSk z6loh?7F+okCwo;Hl}5Ox0Y1sn?#`c zCNzw1O>(`g}m|*kjufB3>DUa4{fv6t7Z;fb`V=_i<)bU2U~f5hjGpydty^@y@kkFf+*>CHISL_pbUuSV_p$1+I>mYK&{n z-K*03hblfU39f2Kr7}-7QNo?k!gCiR9|>AiNtQpar`6TpOUly=ycG@crf%Ci>IDj_ zdfj*Su|&Oc*f}qnty-DrQG~iG=I%l04%aCiWUG*5DD5Y#O2Kn_iJF;u`nQU1{w@1( zaMC00FvS2^(g}0V=qD`eUy95dhRi!GGS>e(*cQwVxRO>c8c$wW&It&|%#O z{IXJmdHBKiDaRLjeV^P$bdHl;mcW;tIlab^vhk<3Uwp0e(pH4#_(<{bA3yMY%YRv( ze600A&qDsxr*rRrfLCMx>~}Pu7j-(Aln4$zI6gReRBVH`tjy=0lBUT8Pxh}koydLN zD%n7G-1b}lsy^tSKfWm{{9j_R=q1I|n+Wt(C4z3?gdO#cIkWBZD5~FOV&V^{t^j?;F zEQPe1bQnt`&xhZJa=Zx%*yI9;DFB=Pugq2f?lQ=^BNCRJ1#J8iYw9-tn}Z;*3w^#y zPNr}TF;3@gJd*d4$X7hOu|k=12uj^T=r#a!ziUtg$2ooG5#_@`Y7e!i3w1JmOH!jTk7Pla z)u)4|;)POUP6dBrJsZg~mvO)&ebWq!a`Jo}Ku*(Co4t%?Ru)n0s*P{N5|r6)T-jl< zG6YsqKpIi2X&R5_`**=A2rS?v+9ToEX}N{z)~husfRGT}3rfDV3s5E8ijYO*GjQH< zCxZx97C-QX*zW=Q=m`)m;4=4^I7fI&)lnNwo=5WMq84tNFg3|uA@OF8 z^+&@R*`H(J$0W2=UvqK|PU#Jgt$ILi0RjS+qgF};B)_!?D1O<2u~TnatguF^&B0w? z<|lEu06e0s81MuR@%F_vWZD8BjOXu@KNKne9TZUxMSPC(fn*Uiv0K`eF9d)6VRF0J$(_3@d@<_Ma9Nh8J(O@T{UY zc<03iz>XZq(hWKNC#kJtNSkNy*v~IdNs=dP(+&~=8hfnWoD#fnuIj)wd4kLwfZIzi zkvs3HZaEPcJ|Eb4lef1p!SdXm*i%h1)Z!1Nk`*YkAQWrOMi793iIKH-dDU%MMS9{)h1 zF9Hhsp}823*LKzP1PID_MrioO>#e~BfI}-T?2W$%i4^L{&Jkr$r2mowgrXDCUJ-$OU^u$?Wdy~foSPrMH7c)czLM4 zsfV+o$Q-{BRL@@1yM_HN8`saT;mN#iz4}p=&R8;HR6ew-9GBbwb*E7qk7<`z3UQZQ z0NF)n)w&q3k`Ks2fNG@MLUIZeT&fUNj>gNzQ#`4ani@yRY&2j{9V_#CYyl;NfKTnX7eFz#B$PpNwRJBNYd zu=SzxS10BMR4#jA3g`OC=^&9>l4U0LNb-Mx#DM6%Mt<4a>js@yXrQUlCtvF2X0vKI z4`6}3T36~}jOF^Q0n+4UKN9FNP1srtV6c!gvg&KR_Ss05b;~o#H-mUaL1$~cRh+T$ z!DgEg88snbz+5gBl+Zbd0bD2cJOZFb%+j!`hq8B_6Tj30F7SqC*29FF^mZ8nPgTQ# zc&e+@VFU=|O0JdAs?THDlDuTvGiC&u|K|b0a9Nvttkj~^>oo!uzxFU%q+oug7CU1j z_=DLMNVacGJyVs*jx*4X0j_M(sm#qaF4JXwP_zdjgLQu3J7a$djqq zp1}G@pVa?JF74_kyYAFpnUb^*cmzZ*rZXdfa1K-7+0))g?d2ABar91e|BKwMYk}3M zaurRVa5CKG$G|P7v9&WLXc%mZWe3htRA1xhJ~2lQ9g?qfWqK8Xl;^9*K4Qj9JO9f* zw|Z)jWaEcI-e>&Hg7oB=&`liK0{-|uY!QQ5Hw9Lx0SptZ+JXwMolHUz=i>%7D? zC-fqpGq951s?iPzebtYsF+1+kk*2b{3%TC!;@V@XMZFpkoDhl~Pq%O}dIA z^K|yvbZ9QY**laGgBQc+A7g`@fYWYAiAZ%ws-02Bp5c$Zr(6SDo^dxB70`NKf=u+J z5SS8E&(G8xz(iQy_5<-JP0eGw@(Fr-UG&xD8;@p^S#j4i4pKJ33XIS=*%#ctFeH*k zHJaT8Q=M1p2zrfx#nC895ct()99P!+pNQF`KMK4*$7lAjfP)y5WVgb6%6L?HlQ!^> z3?c+P97GK;|A|N_A)3OfV!eIIIONUM6+qxQD3$XqtnG)nu?|=yV3*^EqFz>cQcwA^ z#c;q{Dt!CJtFzMyYP6@M`?q zJ9ng?%twJ)U$KJ#-XBxk9`U=pP)2MXyR8zS2V}@Y9={Aua_mK}e8J_%xYU_X<+FY`z-QpBPK>{X_?!5n6f1O4rX#f4b^R3@t>3re) z*Y@Ax0t_YUea$gHp6&%XkL!DM`#d?IGFko%##)b$Ed?cDAGb-_ZG{ zy1ncR(dHX|&MvcSZm5jOfoP`Ux2M}j+)0dH8yROR5=-5o_n~d(1y7F4L+g7mul542 zD6E>Pq`xsTg^%T$RV%j8Eo+qtU~5My*l*COtX?+|}*ZSswJ}i1QSDOR-n?F!D}G23i?n zQJoZg*bJ$q8aEzzQx2(?qsHbEe{9bWaZ0>>ww_7@{d=KMt(+tT54ldpv?0W3j{Fpz zd1`iuJA}f$FvCxCi^^bG2C2gQOe%Wv-AwexTM%TTXRW^BA8|A4Tn!k zLV21$Yu~8L)S@s2Qqv}<_S|u~)Hz;kuOgtUl&t@x`rxB0vA`L^F=~arG$$?fc^l&)Sj$*qz_kBUm4! z^RqZBa{6CP!I)qA&D6`I@<|0U-JSk~$!n6vN%AaU6Dr8`w48uWAJK1xn`(lqt0`L+ z%_=8-zPM5@fSP@;1V<$mNIp;lBva++QCBA5BrQZE0w~eqV_+d&gA(vqYO1CY^gN*iM8e9vXS;>=PKtSQ<%tIXBMDI;gGq2 zqZ070HU|oLNw?SBKAMM9w;bx*^R>*Op0Yjwy+pTtO}S)n=}t3Cj%{X@Gdy^G0(5rS z2w#ex{N14ySE}R==2wG&KRr$1|VY8M=?sXmnyloALZ^r`dK*<8zS{>+W5F&$tC_Xb}IB*;=Zs zMP9T#J9iZHP`aGYpv1<1 zONeqeQaRfy$2q-Hm$WQ4V2C<3a>x|LWWhFO?IwzP9F?q(qN+~Jr^^}|CQ_|DA}`h$ zu6^Qr7NyBj*nDsM*4vkllf`ZAuk}Qg1V* zEgA1IDD+d+tX&?ht*7ZaF_kj`Y#ko*tZwA-`gOUex zkFxme1mA4e5(V}|01&))8|33Qrhvo-76Hf~r&RdAq()TAzWXv&y}pN0&}e9zn5`Z1 zN>M~Q+J#M)ywn%4hr7TIP^29BZr8<&d5WD5r?0LFJ1R_+%F;$)1?^$^Y1W)AE|grm z^_kfUF{py?X*T1UGP=1@=kC{N0sH>|oHYeQtRitH8Hy32qGpQQQ(}&wdOI)j^>H-_ zDe5C(-A~&AWtf+OG*teE`;x~s;qgd#y*=L>`|fwcZPG0%`JptzcdYsyi;0V;1ixxb z`8`H=u5Y?#oYF%&e8)=WPPn^CT}tBNwbGw|-~Czy_iCS(cSZ0mJSqQu_jmeHeiYR7 zd29dgcBRtvJyELy^1B4ZEx419$5Fb@g0Z7#<|%PzmPhEGFC-bASnIE%F; zCTs(yJy;SzNr9o6*+OK}6qZcul`WKav~zKrE-Vkuw*3&wpuxXpruxAzH!STfrrm&} z(od0J-@Rn7OqCgZ`J->t&&3UI)MOp-*UVB@dZ^Fa$0Q}KM&W{-r?vg z2;;xZpJg{J!ejl)5JmM69cI}>T)MyJT8F+&eWUsB998Fa?a_eYz$5j70u5Q_YQC__ zaqjF5DGgXKr&9c5YOw%D4TVzueVso8WMG{#ErrJ!9E)J0G9DKW1wTT)lx^^lQyFr$ z&L)A&oA5!$rf8K!M-?r*4`>O+6ha{-KBqeKaO@q{Bjg9sV#~uqT=K$2Y_ zGkEn7zhGJHprqa?kLyyctyMEl)0D}Iyd@Xi`f~lZXc7M(ED3M1h$1$8AoV{McvLPv zv`J^043pFoNQyx|acON}0LX>a-K@C@I?v8iQ01}ma(J6KD@x^LYTXxm4u|0bN82`K zy6hS3^SxB+Rx2b$(Ixki8(ux~w4` zhD4WXR9D3PrTDJ>Y;}1|sv8xGR+07AXeDT?j$5C|1FsZ5D^OoAKM2$fQG5`hkr4jU?Fnmh{_Bb3YH7|VgSdhFaz#-h zVh-;d<;M#yTQ2112YfUg9jR+Iffw1yRPeb$6*tuy+Ij?9)$^`4caV?Lb(IH-h?r*9 zLb5n=!Q&Mj_-jH_uH+G)=s-X?bYNu|<=9nib`__-Z ztCw3u&hFJP^U7$Rcnd>0)n!%T_JcjQ1Yg&qX@rG%(XQR&bT1YXHn-IVG+6Z~n*EO# zgQN^wwRzYkVY0@hZcY;lmsAdqllt-=RixTvm7jYd{{v3~%pQ#3+7NYHd$($dDq7nv zHJ_2@3eLV?YtkKj%*a*uz3j8T3m`9x-$>O^y3(KRv#$%C%~clhwm;l*ub*jlyRn4hM(~sSw;+1LTsuI+gb{DJcP#ijDNJ*liuDsR*vmjSK7b&obyJ?=T4)0QBMc=g5P2PotrO9SpIoARvI!M^cA}< zpPhorXYdxu7Zcc(C>$?5N*#4ikf}y>_C?2pal8^+7;>F7E&E}mps9haZ6L9DXI3Pi z_K$Yz-nY&u3P)$V6lte&Gq_2;4|t0FqdR$#5`6rCrdJ35Derjn`pZ_4M3ioy^$%KG z&WE7Qn}D=oanzzqdVmw>6}fRn7ZUbqSLO}g+!wheM-O%WoubRwouRK^*c=!+Uln*6tQh@uv!`JaPBV z7b*>&zrmf>C9#KxBAm}wL2l(uOwxCUwJ#ATM4xQZf03hb8*8l#;z!S0LB_kF^e;{> zhhPNf#;W*274-EYKr3{ak)*<)jM3`jt@ZFHTLFM7?bj(Fwi3e`r+aFAm1J6;3}G95 z)8uN-(Y9n%MK{hG!hUTUjUle~|4K&qo@b#8HEsheA5JLoppO0`l<%P8NT!ut0_!hn z4nEMm9U$WJqcTY+-i^RzF=Ed(j*;Uih{ngCyq;SCe)$I!w!OC(lO&}i>Hb9Ai=#*T z6Vlz%OgI${xRH9FdM;iefk6{r@8H>_-I8sUQsd)AA9 zSVgTqb?hkKnxdddd=S)_bWD`I*OhG9bGEK!7H_ND{D&x1kBTrceo-i7Bkss~-ZEhb ztnx>=J83>$2Ksoi$8+SapH;!+d}GK2pb31A0@HVYb$d}rJGw=S9S7%b`%7n^8GHw$dJ>X&^)TRyv|tx-oAi@2)xI?*_Prq zA}X8PNHKIN@m!jZ7?B?|q#NUE9NK~J@C;s1SUyy`dA%ZeSV#?6GAC50mvnW+Z&rwl zVyp_F4!!0p*X$|OEnG5+vqrWE3NHEcRnWI*bNF^0Cn*2wY%+ON(H(1Kf6r!X+VF1H zY9XfxvwKqKA_M`IgpMo%{@jw1IOzj`++I-thC#2w+zaMM+-oc7=ESrwsTqqGa_@gv z0VGB^-Af*X(keuF+rtOqh#y0e46Rm{`Dg}9mhMwTeL5yT>X#G%^C$U)SVFh5D3x;Q zl75!F5wP8`SA(lh_DP9A+(rizEqxxDFCb(Z) zhl@I;og|^8Ue#<=c;OLC11PyhDlqr6&jWzjHa(2~f@89*!34{l7Ic|0dWP1R!a~z0 z@-j#(w)8Fd5|@L77kZM!fH%DO@5xzF{cGvNZO=r9xa0$rE!Rrbf`1WPww=z6kBQik zvhUyB<2K$H&+!|hd`{v#*y}TeT&4~*;|qYf`1`qLS-;|4(9g5z8fcYNckZR!tuEBM zcIbi-;5_qKs?)NX=FISO3l%jX0}KV@Z2Efv)B=&CwsW3moo)tcit9f9fJex!u5 z)sm)t5vBRzRGFI-!f5=0MrLum18Rk;Xj#l+gOZ2|qfc^12CzvSu+C2G-#JLLnOUWU zc#Tq^>{c(O_;hod?~pJEn8Kf=x2y8;*$un%^F!S-@?araSJ4cY&2l!6V%-))zljuz z)nm3#^+WwkS%sPIh63g?@I@0t8HD!h1loXr0Qhu9>!=^9(OTr8nR_8wt8xw>2d?MM>>s6zf{Y9UJC9N- zNKO$+L>B+3wdtqIyGsLXckAw_aPZo~rVD(N+d`bH0ImRz6QYm+dkon!mnITYs9K{B=5|rI~j$?&b@E?8=uJeVgEDNXDMcs>+m-*D&YxazfSj7SmJWkAK z=^=ikNE)KN;+Egyar*duKK6_KWpBb5^nGuiP$ZpHV!{&q*g?;;YGCOs^rR=f2pF8} z1>s@!u*S7%quq{mZX$=ti$3^kLm3&hBzn;+a1wu)&o2ECp0`P3Wm!yl0O%ifojpyj zr%zQG37n@$Y{rSrpQR&=P+p6Cd3UU5_#(+kj@SxYCF9_^R zKmEI6@mFz*yf#o`OdxlQqWiP7>Q$IW#G)JxGU9ycgy=x+qCYh;WYNM~plFf|gs}#a z9hT@>nfxLw^?er?08}yjsjAkH=-Sf9>pl(ejP4!&rYq)pN7}0uix5762&OKYkG0UlNx1 z!FVMM_|SI;z>VnU2Dx7E10(iXD=e4=ffgTs5vxdw51WicRzFg>OZ<OK@wR9MfmjJ3Y)E2E(_hKQ5?Cem`ax=J%S+Oh|7cQ zjE&*hAbK@{4bcn+5|;EYs?fXpEKC3ZZYgh%LKDt^u4`iw9u zpbLM-4$3-V`m`R)*=!;CA0Yp07-zN@Rj-N@X~T151#~ z;xqtaLJzF1Bks8wz9IuTtNf2?7aKr9EQWsUbW$dXi4J6tsJop{4jKR#tdWZM4Ca82 zh7|Vf#Q`oS?8*@h$~(5=B!UYMAwoQTmstx12*t_lD`9}}E38>}yV|c4xRzO9?&|<| zu0O_u_ayWRpDJcN6d(q# zin0&)W^u2-3Gb+KyEAD79+k-+K1@ps6TpnWcbbz+mU2zK?^kpQpF1(6fBEO+RKDk? zRx-b^9V_*{H4!_di_OzYU(RmTmvTK=@7`ClUVCQMWKfZd_JOkb3%kAl51>L08x|={ zWwBG(_S1ah40Y_B(XV-6@vlImLy)sonvyWVX2ag4G8fQb+aMq?dIYn=N2@ zSe+v~xBU7f zwiNk14UQFYl_JpB{{BerLHdvX?Wv6o78;5@8V{Q4)9avbCucfn%mL7umE;n z5$xQUvoAj1Q#?kvNpA8=D~&6zdpCg^2voafWR&b)Rkyy~c(LiVJa%~sr*)M6@?zwD z`*~mMB4-O9%xrGWV!o(jlZTbXR!}^7%8qta@Rd05JEY$^*G@OLwc{giR@VcbJ^WqctQ7%9T==g|ZQp(ty5Ia$!Ffz6rzU3KDYa54PPeTCw_w zB-4uTv_BQMOL(Ph!TFAAkrBCjN*{LEaew#tW)>WjAe~=V_-}DVW*Sn1W_2BFAP1 zo=sS|Hu%BA%V%*`Z~%v~;~#2K%2=&F|HUkxX+F^M-odRzC4(JbP!ST>T2DzUL@zxr zCcO{2iKO?ls=eSL%qzRens?)I9*pH4wt5^c^OrF_ystmC3RRRmJBiMns&s#9#=V@3 zYHOS1tM+RwbetCUfSr8$%;$^J#uq5C4|5ph{NQ^%OAQ~6_qaQA1o!Gt{expG4@;fs zQWm4G1?8#ATUu$$SA0wL+PZa)Tfss-{2Hmd&zKvU!!k!&)VZ+Py+-a9My5ut1~ zzZ6uS>PNflx4N%oVjiPwKWyrtVFC(HfHRAWeK{i&D4916SQ+9^c8YT^^UJz5cq@Q{ zpI99f@l7xR=bnN$1&&-5T^%@AWs?KjMg z=r!lU3^!FKzDo%aY6!tNmS&j$MKl!T1`IxC8_|^43ChZ1 zzi1Ag`in8DP*YP)MbK9iVaNra+%w@dA0I_Vl5KsR1RN(+zU#o1FDW3=;1y8|r zYk~+Zm5TKc(v6%L%O*A}nIa;xQQY*vthz^g*Iw;DWIDI*5!#@k1-7kl>uGS$76 zy{q6RFJ__R+7ZT>S3mQ4E?VYXS7U&)hDc8Km|uCKxEkVTba%cU*N#2(kh zQ6?;t+6{A3ywZ)VVqqY^N$L;+d6ZUr5MOgIE>H%Bv8qSsS5!pJzv4>&!hV&*HXmB| zY~#fk%gDjxxOaDHUw=VkKIPq;{5Zh$m;3$FB8`%>mgaxkG-a6Xt?Y`~461FrxeUD{ ze;NcSWv71*!xQs6a{dE^FHi55tQEFl#tZY{xuyE}q1diq|EI`yu1PV&ak%=HT74b; zpK41h%30dWC)K)hi;UB>LyyJ4VJu|6ZUz#l9ryDGqQEeU0XAx!$ zX6Cu%{6|FLnHPl$Ga7PC?OJ`di!}#-p_@GG-V--?XL-D2h^xOcMMYQlU>4bqN!5O4 zH7){WTA3ZTd94$ip*=Uoa{mgWB|poi>GEe>UlR0UO@J;t#kSf%0V@9yGesT$4lBHUg;zpuA`yndlP@|xGu-tO}kKc z`DNg%-yxZAP^Ax)U7A4CiZlVFr1sDx@7csH-jqLreApX@?7CI?fw$2Go9Ku2Dq>4b z8gL(&_eG~3qtPEI=fEQmvB-1YReSXuH=>e;X8xs?<4i5^+AsG(T>X)Hjkx5oBKN-2VS$oS8#ZIV?y|&z&j*jL zWQ+P>9wl#+_*nlY-*+>sVGaE1iPw`q%7`{j{|ESHE`BxV1N!(bb`vw}Y*M=sO?-8! z>fF>)4pE+8pe7+x%^!D%3|r3~pU@7&QLj1quXX?JvopP37ywPhO%;+MUA8NW8g|9i zI7`0YZK-3i0pJkY1LcQ0Eq->TX)x&n=HmNf6C9W=*5f>2ba?A#Ef131B!_RKJ~|BF zI`}hVaJ=G>^K|m=(y7GTSObpc$0ZG<@K*&>d7?t;gSVF0cq@Z^g0u4j5gNDbn(S1*B47MM=DH63hqdFa!yB0-o0vp|$F4x}mp24JjuW;B zgPQ&1oUSVmm(OgtUyb(lRv0tE1>8s}IxPx5BG*j@RWnWYx5(2>bok zHR;z*wmqmFlXsZnV@`VuWn&=PaU*=y(onj^-BRvmS<&u|LjCGrX)%aNBkyMe{$ig* z)W6`~Y6FULuPiHP|ENav|GJqxl&9mqRi6*)tu{N%0^~_kNu5!zwRqU?Yj{~3 ziNkEBrz+@7kG4xZVe&3mF|k<|#^Q8+kANGz9K+Xv3><^(O4ur`0TT zX=^86^xX<{k*XWyk6rZJ5^3iPBSxmDvg_L0DC~|K-&O$(b&2MynSU8|@g*x9aR|H( z$MArg-WQ=In2HeD9)T2ldm}jOMjgTM&t?ae&jM~c*PK)eRm(lC26N@^eGZe^`@VGj zR?~-nh|yX8AM_IM*z-`$jZ^0%AC>5}`@ zOMRki*>i=Xy=7ux59_OEbzZf_1RL1D?fF9a>GVS{vorVS(m(YepYcb=kpmf@!w#-y zIJZmrusDB&&Ng7TlI=|>^>OFtHEL)}0bdH#&0Wu1H&r~cvV^Skf$UXzSMMIW^oBu7?cNAwBb z!e}{pYjXnsB8X^)nMZpEr-nb0PU7j~cDoWoePV4QsqIu-fSP}p;)yEj?c2SG>4cZG z;44iNHW5lOX1Y8GO`@wj$QIXvqwM=>kc=^~xyCK$L)nfDF{+xz*Td_Nn-sIe_k+LoKC6 zdC2Y2B>R^iLkL#sL(=~NnpZ*h*g5|WT<$!M6H3#X9mMJq^|Jwt11<+fD8=)abax{{ zlJlj}J-6H$6&0U6YIy>-#thSE30K9g0)z>h%t+eM;1m(@FY%`HL{%oYRXLmLR8$en@_b z!XbICD;P*iva;IU9AFyDIus(@d434cn=tycdW``nHE4KNnG9Nd1c3A+M0I4(s$!4T zSnMajY_4UMKu!zMODDS^2E}M^@a19o8;ZGwn2_@pTpsuK{4VGZz-D2MMD8s9N|6SL zTha>#t(J!o-Kn}2u$~KnJm>&$xJi2#2=oi`alB8BD++Q(o2LCqj?VNTfvs~Bw?D)J zsG^rMTm4X~nMQq2rVUwX^6T`Oly>=Dr0j=YW>ckc=QW%WhTQclfmI0(8e3Twz{mEOuAzE)qTdQ9R_hRKR!L*2m_Bfn z34FGB?38~J%gC9YU~^ezUuM0CZZ`S%n}ZPWLwN#?iC46Vph@ zq7(=l^LT(E_l)WHz2q-WqW*yZ_2+lWk(|c8`3n;?dZWkEP_t(x@q#ljmLQTWNP%O@ z`d90LmRkUGng*_!ZWa@LAheXRO704J+5`l6u#>VPKQeQ*cFqaldt#%f>8y*_o_u=5 ztq{aG#8`%=tseLib$5E)&>c33XGyFgxBO=*@F8XZ+o=ij)jdO^aLPQbXQm?dr?F^; zj8XliABnvK^ccI|&Ne8A#aZE)2D#;+z<+sEPf{eVBJ znEyXOVGh8FGwXV23nSnB_p6P`kFZy&qy$DvI|-CJ0N~@GOvjsb7FxnxB90#s7xfte zan+4ljnh=)+G4wtdP?P7y&hH(Kz>mWybO)|WLQ#>FlU;w!!u?*`I{*0PTVCB6Yni6 zU{gNs@|+40L)?~M%?`|5y5Iy8NgA7+1Es|Q^bhD~v9xuDkc6ahTV>j{lkhQxH0bob z=&S_PvMl-eN^*Qxj8hYkUN5OPS$FdFCA~_Nrzhc|&xIMrFjkzh(lNK8$DJgyLIJyb zZ|#g^mEMx^xc*hwn6ReaW#$%NrMb5@iu5=7Uy-HaijLHzn-CwPmYMMz5oS3pw3%mZ z9D*Tf4n&kaFjS;=&cFbhpDpO~Il`2mJiT+^su!z2q&{yVlYf#d6bCrH$N`VYKZ-M8 zig<~JlbWwDvUt$&qdrFoHnz%-|70j7(`_)ESD2t5I0+EqS8hHc4=8g?o{qGDtBiXM z>EZiF2{LzXFSA#nlPtWb^Vb0*@r$hHo;C~KK9k!J_Nad zRbrPF_bZf9u2398t0Dw7%l<{MD!VZJfF=YXDssqbTYL;NSBCp&AtEV|TbhuxZ*(gFqX8tCR{!GO-v|zC z$~sLvtDw6nF-$fZoL}kV%Z=S;Legi6Y0XKJbnp510bG+VAZ6EjlT^uS6vjcgEj=%= z`NgJWV6O?@7;tFF+$-cOSFtQje-`EL-($g=%~|$B)ySBM;A3oX-N`s+^DlF)bkHo%654$i5JL@)c=I2C zBii?v%Tup3>E3Zqb=zOqpP27~LVNNl$g=D9S1js_+o~sAo>WD7)~t85A7Z&>xic$- zdN1Lx*VU=l&!Ua`Mn31S&DqqwY(*hxm-Z)p?2G~C5gOhneH?YO{*`s6-9e^tLZnVf z+Ix&keG!Y}Pma&iT|WHr8=_?&etUy)C>%{v{|fGG^nAENVn@zWn%#S##zD(Q72l@WG_y+C zV4y{40Lj9s8~4LUBn3fB|G`x1PWwFIO;gGnT3vc7{9?3fYa?&KGq~)8feQbV5DTh+ zLoWE-ct)bqD}&jHl6ODFpwQT&=tr5xl@}8^c=PTw6V+|Oe>inq)d^IE(dDZ?8EUBP zX4%=2zAu4`CtREo&PCiy7apx^yibsF0sN$;FG3czOzxx?8Kt@y)lQ_w5W%V}@l`go z1_c}I85*idz5rFcW2haXi{(2p>A29RBynwmAFUq9?&n%v7KcDGG^vDDxiLhF4dg*D#%;7j@fSMA8#vk{>wwzk7A z!s?r^Kj@+KO`f8!e&5u<3|1X|bqUAU7h3V)NObAO6%}Y~SsAFsJVn@~BdTPHXSy#*D{PV0| zPXkWQVSO|k=6Sc{Y-v$>d`#o&qOgu~GCy+UC*1>lxzM)U+jz+9CH-2d+YT4A^3P)m z@6j8*UQ2|Kf4Bd%!LE$O+T`CmiNDVABSS2&bhsFtC(}bJBCq_|)Wpmtn&O_Yq4V>k zp7=#xB+?*C0@1CRO&^B*bY8j%2v>r~x3%6c(Y&^fYmxD~fz#FHXQt}cmdVNfya|-| zjQMWtqhA2_Y8Z~A^rbtUaLdB^hde>(nhT$_y#@rXj1|4`k;q2>Zhl}JNA`}oOCE8dt2?tK(iE8I)5I z9d4>AWgFNeR`Cy^jN@JLgQcD{6_CMl>t%dH91e--H`28^$Yu10>=qD77%=%p8Ex?hNcIO z^dw}Trguo8-43<4DMJG`SvX+&uC^?WNUPYVEd3YQ2d}R-6y8?p~%A@0#VU?rS>K4VVQo zSKNy$tbF75U2kj3_np`Ojmr<+opp&CaQNFc1V%)yd>p}TtRtXG= zHs@~#?F07JrpFaZPz_jS8S=eUovI(H`#V^kT;CTfeJ+&hj)jvLOR=f-Kd$=9Bu~|>U%FjcXF;7ysfI54iSdZdX2LcaMi|x? zZo?eL4u%ctK`JE%iOyNzQj?hp12``2g>Osxr|)lj{uEOF-5lC}yY~6MKDOZBJ2H2{ zK3+w*EpU&2Q}{+LZh@kKSq^8+yAYtnKO4~VKrq*lIEOB7#pgDOoA(9$?qt@mBSbk_}EX{am^3w8l*MXO&v`O>}0uzvH;FaLwz{$m^pN zO!{Y`AXY%(Whj2=vIGCflJrqS#YA_2FA;iW|TU{RQw_}o_dIx^0k8k8~lakFU#TeJax3skuP5tXv-Fv`c9DZRfPFV6^9#U zV}kHTgq@0nt6gdz)FM;dk}T}uGI^bLN-60}*V$8S-@IAtzocT(@Lj^s2jIM+G?>W- zew|0rr)dpfWig@8GIpL_D2+Pbsa#6=##NsG&w5K^xb!7dq};qZ80Cx8%AbZkTvjP+ zOtBJ7_et-t$w~UmJ5B!1nsza?iT9!N1NPzs&#uUxZni%&oOxXSXUx=`(jN}051IHY zi!3T-WTeLMf4kFDoK=)Ibri1gq+wXmAu=$-_uqyz4&Jw}?h9Su=?W?K;!zZ_Z@$B0 zvy2VbNsk;JE*7)B@MMUb0Fb~}%Tk}OYkr@)u#QuYypPkU?rn8JemF@_muS4SaY~t8 zbINdoSv+%Xd0cJYE|EQE^SfE~>99`Gf{M1s&nvFliq-V7YySrOA!|kNG}bgM>WA=~ z&_PzyH(F> zNJYc_ozdo4F)=NUAvx0z)?bL5*iM&y%y!6&^wICllP@?mMo%2i)`5NP#345%k+gDv z39V#4$`|wqj8~hhP+t9cq6TWPb>!x7EwFLJQ2K?_u%$tYz(~!LVZVZ!8W(IehgCv* z#J%)e#%uvTYiK*sop=6(TXxX*qX>0q28#2?hrnZ=6!YuptJ?=($FRdob^b@Gqz!ce z^vKPY9&g#YJg$QzwXuzV{(x8BDfT&$I;$&hqS@^z>lVsn)lh9+Tk6AorO{B=gw@s1$?vY?B=#LX@|lX5>yo+nFkdyz z#f$t2s`2>lnKRsq((X$MZkR4&-8M4j0XN^dIhdQ;t@#R#bpkBQIYBixtZopj9#zWy zWDe*KMwVj?>=JK8(c=`dky-GZ$4GCOVX3(muTm+oj%1c619hKgb5WeFmq~F+?+mGP zJI_vng@stW5GkLkGUN?~gr-3ij<#$O@LsJL-}2!AcGAeUo^kP0!l}8m0GUU)UZ(1njrQ$P1pyf2#hQMp8E-Og>~%-$z1GVC#ODo?d28ZPU) zccC`SF9p?9i)#-cU;7aD#3g>g!v*1zln0wPT?V?OMgj!8xd<@%V(jB^L~r&6FeRA?-NSn}~Zyo+yJNjgClJ zxqF^lTOB;byOHHjzv=lo6_4bVvB~)MVU!&tF?EHxy%wki)HZv#XhNhjwM{}N@sKG= zJAUzgTQ2)dLW^U7xvj)C>NofeIESYFr95)U*0Rp`jFLbx2BYi{F8PLU4sVYnwXIYn zOmCFW^@R3_lt%BUj0n6)DG&K`>8qgfVXcata?LZ>QU@0!KQ9^_*mg^zW}tP!{^;at z7So(Q!+}<&(^JkvUDpq}hxQm;J#nfw>g@6Mid^5qYUIt)*}U0#l3g;!tT=@sBKv}h zea)i+Dc6yM{{TKQmwt6FIN$yL(5}`ohtwp?}ZE5U+bu_lL{fx-$| zxxi%|10E=1d)~bCJn}t#zKByqXmTEtSL?52Qi<#e65h%gz6;`(Ptce*)>%9#1NcW6 z$1YuCFyWvWef8{^0M^4_L?41ND+Im-317PCmVw33O^C*p7i1#5qO4Tzv@BKb@i5xv5*ruuw4wVD=oS4fx(He#rMru0)!b|3*Buyxj1`oR6EdpH z5{DGJIqdLUy0nyBA?dO3LKVdbgaEWsf}_mnnIX=Z2Yj`E5l67FRJX!`N(|udAY5^G zmzf1PS&_C-z5}YU$`+!4lm}tQ5E@Qn=lx&fs$Bka%VJ*C( zkcElD%XGDw&(TX>iYPZv&f{l9{zW(~iALd}JxsA=b>pN?ibkFIgOLaYB%`R4PpWN4 zmgpSFM?7KpD3%P~{eHj9?+awSK!6f(fCbA> zX51&}Cby)Jv%Q8P;*RX@LiJY}3E2YRv*<&Ji=xu;K63?Ef$iTx33IOJCqy5?OPyhx zwj|cflIwkHM$cwW`W)-BgY*x@whV~0=R(pH^>L03)JUOi?g0Wf3!(2e+*jrRfE&Md zd1g#go*mNNu91$1W+XWQYA1b93)yM^!jbr?3Fk=fLIudsXJwkYbVK%lMS6u|gk>tE zNmf9j?$tB*tzH?eFc$b8*RLeNxjz7c1eQI$x5GpES1P&;2wlA#TfTMsJ-`xQY zw<}lb)P(A8(9!`FOmJZ0!KiVJJdqhFnVj&hcI?-(Tt%`d2DInS?8=DLO89vPYnTLd zGdvxTwl0*enFd6(>~ITqR9@RaT>iz4b^X_SFRewA{zC2w*&L>O@nN5~GBd-&;{?3o z&<7e%#p7S|7Q?lg^Mjsb%T853JX{_tqVMNUN^IPH9q z-J%!aJ)k|tA%L@}VE-e!eEkDD#(B;bBy9eyQZq)Wx7~!km#z;mf>4NwK*${3IWRKr zO}it-paTiv28s5XEK1Tv=%j>t(CMSzPMCjlKVdvzzKM7XE_0yUXSinPjhLNdG(FQPmGim{@l{=#37dA{43M5i zDOy3Qesnr#$I`&yhJteQ18A3lw4-F?PAB;~q}V)y$~5iI5W5s*!T|j6-Q6$;50uyk zrUaB2?XeBF1Mso;B=C4}s4T4w(ZA0cw%>^)IzpVz;t`i0QmqNn_5TX_{s%xozrHC2 ztgm=erQDYGf=d^EkQ^vLgdKq*2y&(ym|fACNO!*d;x&LuF9I+S$4D25qhRJE_1XO*IBl*X8Q6dj2!I8y1V=i4VDHu;AL8Ho zLvRGYP5Q$njljRGM5I^}A`%6Yw^*Pl0PO&TGy22?9n*8PO@RbAq&O>KCe|Vlo3Su$ ze`r!}14KbEsJ+07XDlTomayp-E@DtMOj7_Ou4e4tM}tx=Yajp}K&xmsO2;L6pEOe8 zQWr9*Oq~R%1G`6*xs>CK$&^({lQ2uCmI+x}^ng9%v+<*hwG#x%QtJSbaFnFoXZ)kU zJniwOy?XMUE+|tzp+L<-7qWd?JpSqHax7jM`hRD-JoVbRrnd6UEzIW|zwHwoorhtg z{nayyQn3F3#3QU}jAs!thqM>CmfrJ2HVP)3c4Om)htCDb~lEV0@5kJ@SQ z;nC^VENYTJtPEAvJ+j5b7qT)8K2yl>otl%(Yv6fIJaXEvoxdu_AF zP2l!OSqa4_B!tT@OKSF0izMJl>t5DkaNG$|gz# z{{VqZKrhlQ2HHk6q=4>GF@=n@yPnWjhEJ>}e~cxDE)q6qzGUPOlS?R}DL1%i#ZuCh zg)U)tHhtq;oXYV`8{QJCs|TS`L8|eYK7CUU zo9Pv!7p$mdVRXh?n6joiK<&7Ab{!0b(PLBPs$|?Da^>!&s1`o`qZ(cjNQs^{Cy2_H zk{yB7e{G`a)j8U_R-9J9_$)&sQDS}V9CXaJLsh8bc!H)l@*--j_>DzZkUeH0lqsdE zMEQ%V0FV?E0rvm{7l7n7;ViwDVDl&%Kre(9BMO8V4kp) zU}~1FPoW4(f24L9Ill>~238r9MDpHgrb>_XA}wBM$0|RKPk|vG8eA1hLP#E%2%-j7q>{NsWlm2< zNQ^(x@lz6=ePy_lqTR?@)o_Rc3Tf zC;lX(QDmQYi)wg##mbs*85zoDG^HOh2p}H6NTQpC{6MRx{Vc3~a~WEM#MA(NerVTr z+>-aBBA0;~bvmcd%~GW(*r6<^9;Ok=4Q3Q`h4DhPp?rV`kRfuLm zDGCp$PfNuzcvVuAA#*YFP_uOSlYjyzZv30>irCFZ12PQBf4ybqq&>{(B6tjaL4bH? z!8&pkSBes_K~g3y3IP2t7!&w6ht$k7k&0=kU51L165Zn29KFt(jcUY@onJJ>)P*tV z_l&3N#i>1uPYJkvQ7>K@iqfZ3y8i%F4W7q}brF9sZRFa|x@fzQFzVZrHVXoD=lsH$zqO(tk)<}?|pCsSa z0jPS~Ew11%3&M5b+(V|APs$TfWcz|6ji1Ym^iv7r5RoaYN~gH|Mh!;+F;yXHpvMH& zg6d4L;Ewi--QB}2#iO22FPTQFVvvl}B`Zj~DJj+K6f2g>3`RkjMT@dPQC6Y|OKe^` z$Nh`vG_S@unU;xQ0HU&7{h%)*XN)Od?zpX5OZkk6$_}rjBJ2G|ckpsmT(?vSU#P=z zIdf!?>QJ1-A6}8i%;oDgO(bE)T*U&;ws ztD(iP#-^8DQk@}+Qlk~4AI-R8)l(v_Yo$O1O_oTFke*@ko+Of-cZ3opt-&=CRz?1z zGVtyxa6+)EO=cKr)}{+g=?;&;g6?bLiP2LvO~?zf4p~@IZuJPu57`EW?2;a$v$L|0s4)ji^X^YM^q+G%XxxTOr-w+%rEU3 z@5dKaMr4v_6+xP^E-@fe*U_m9QDD0QpMBm8ybB~^2=M8v5jAQ{CR&%L%zdJ&?gnPc zG=8NNGYqXPCNK_Tui}{pF=4Ax#s^rCH<_VK@zUbf%+;fu#Q0r0o==ZWAd#^tI)RQV ztA;qDHc!8U!+NN~iqzkH9Bs?SBj8vJ$ zE{7As!c|OX)0CE4kfR)?AD(lj9I0Vg`iVu8qg~WJ4RbNVGVKo%f)KXN^)u?-0taU6~huHNJ)%u(~jU}~9L0}?2 z-Ym7-$=Pw<65!JmnV2Ro<0@srLV}Rd)-imGieXcXikdX60sOz#G3n*wcxWo5s;HI+ zO?$^TgK>8h!iR-lhRLl-48IlJk9gWngQm{AM^lgB^F+)xqI{5pgmE_>!pJpA6J>=uffqjU+7q0(eVZO`BSa)lRHi9d45QuRwV;)7PL)ZY=C@%ThM$NTXE01fB*mInZ<#hHuF;6T9^n|u1ndr?QCZmn zV>ED>hD4t&W?GO;#Fi-oV;Sv+MX*kp-fMD&79mb+u=&!aFxe`#_Vz^B{8dND2x6 z0Eac5Ud_BrJ;|MChj}iX!A7$X~`pys>#@PGN5q8%ht2}#1FT4;3_h1 zIfYJI=;kQ}3L!xS-YcCmFks`xm0D$#tY}Jlb`2b!3&o5~Ef`i}p_H_04K`e`{>9@l zx(m588x7AmmI$R%)YGU1%VntV9IyLBf@2CuoSAaT00pMsi^nrF1ixIED&*^Fph!CwwDmM|zqcPyPq@>ELlG7CAX;{CwjX22CF)6WJGPn3Rir3<; zAS+TpVHuM$ukQz&hgCeeXkZeyAegGB0H>&wsge*TOChxc+(#KIZeq(-lIO}&=A%$0 zBy{QT8K>Z;begQkm**i8Woz>tl*A8M&!fgL>|f7OEK8^&?tHK9-Vr&Dn;ir7GLtHi>&_u>Ogk?061;rjN~U^>ZDR<)9O+U%D`uTNTn4e1o-G617T+| zhbt4t@WG%?@nw+H6s24yIVn{bJ|jvd$(oR@loT#c(mBadf#fMlDO7@|CcqfTMP7ua zT;R4=;oKy~7l3KjOt1)1+^K|Qq^5k)B3mY40F6pv7zZUqs*zz*RjnF)$WiYcrWJ`& z%$=nwQYI7s01Y>9%y4R(K9NjEh^1Jlb@qcrH4-PLp%c%FU&=rlZs1t-^^Uhqi>-A96$&~)a#Ppu9F;v{Qly1>fg7`t?-^**vzQYk zsbLby)ReGMf+$g5e@dxoO32us#A8v-QXNZJC;3S`c8vOEnMBH#Kx?Rxxq_36v}z5l z(XY6f!zr?4s=P~34sM=?HBC(oWhF_as+K~5bgYfUdTO9as-;aeex*n$E|ML@bS^1y zu9{UkaXdK+C|DB!0g6Xr{Uhn=bv^$84EaB4(0b&tNn*GCe**W!KP+fvt=e|!D|#L3X&=Wm3d|-)OU}ooVarfmiV)i zX>$$%iz0GoOGuiHV^pfG6Hy1d!)hHx zhe!}Qbp~SNyg2I70|#O65&J;VFTdg=5Inu$YPbwu2|dgT4G1bWfu)qdG&pVGU%Ut^ zQ(*V?h9__a(0Vii96$DfK$B};2upR`#0~tX-VXi#&;%deAOYKGoA!uXX0#2(wt}7D2tXkDuFwE$2xS`wA4q}7x8fy$1mDdOMfWfZfWz|; z5(|LTAaj}X5 z8?+xQGr)J+A#rE`q&d7on}1kNhF0Kml(vL?@|c^oVb95SRXt0W3$L?Erwy zss~1Rmu7eZePM;V4|atf!Wkq0_x6JUQ2@EWXM)U^EefU=-=q@yK}q+51RcTN6xi)} zAP%AcAPesh1-k$Tv=oGrcG}Q}%3y8n1v-f-2Y3O93A>mC6&nV%;1W`Fg?=E12HQR1 zzz9hN;xixhiKuK3<_4lm4*j49ce6Y|cW<;R^=Tkj_kfi#-Y5wGn=mk3wTl>yXCGJr zoPpFp1;)?rV7N`vVF?7d5fbLi!>dI!SiwnqzzMVLdOQ#VyE_Yd!kdjdcC9LAUxr)BtP1gE;TBLd0L`Xbv{HKCuMAe5%|) z5NRgO5NUV{P#r$-JB=`4a-=Z@FrHMfNP>2_+7z)b0-?2EptKZ}{NHk61&@?LDlNaf zEVMnou>%JRNj}Caa@G+7nC%O(L|Zcvv_LOwG!kyZv?=X>q%U%g6kUOW=^?K0nz|I< z-UgrpY+{)#Nnp(J0RwY*La-CI`@t&I2l%?c4wVH0!)OEo9F5>hceh=jtwa_E!UQJA zrQwdAptEcuw{zyXh-NV%f%h;4j2Zhx1a8oYR<{HFAct#<`iKq&T*0t~2G<57KH}YA z7AEiPAO<1BIlM**4&PRVNg%uuLpXpSCGXd92FA|_RnS2Mg8lkH43lR2!78_u*`Z2+ zCC9W)N+Hknh&dbrI-gb$3ETm`@d0a&kh?0*`|l8eQpLax^?(i9@D=J@zyqUS-Y6_` z&FKN!#6Z+GCjH}TjVg(=cpzq}9%e6YHSQzRYYgfV3K zl<@&=?bO6mfn^_fP)INZicw(W>j%V2gB4y75T39B3UAB6Sz=Rn0mk-%tvXA0g+#_S zhEt@tfU6c8DD$G1>rfK@X(u-UESgw`PP=&b@86@WGErfM+bk zpR>d_8h{YGfY>qb0VF-5kc9viQ4i}92_zeV5(cazQ*Zf#Lng;~hW2QRZO>@tP%$h` z%XNrLh9q1>(x(b@5Hg3C@-~1OB`8aN2Urhw31~j5=>Vx9dA_V52mo@z6w40a7+_Oi zSdVyJ@3a8{CeC4kLotMN+w3A6?Pvk)7xaL%b$C><7C&(X$=|#IEO+|EVj@|{c7UZT zu}p;YV#<{1jL zi+8+U0Rog55qOFqsnYM%!>Z$NtSMLoCrQ6(v;qLq)*kSRU>mGQ-p%SER1^*OjDp0F z)&b#2Bl)3H3l4O*VIm-AT9`_l8MQtik|_)zTo;2brLg(iJL6R>H@;08*7GlFbn$ zn=@YKCZ;5P-XYVm{*WbvzRqD?PD8;^4Wu+p3}5d8*%A~K@TEoEs_nQC&U$@B1F8I` z0D;G+cv6;Ap;OC6#^xRW6<`3KzAe6ga@;vpI3qiK8L(ih(wWKOhqK_ z2!OQ#xogAro-z6B;5Z1(SW1_bgSLO1glMt z^oR!x%pZQRy0sQ^2fPwoJFx8v{vH?4rKp^yisDQvkD(Dk_ z@i{L6Vs|kZi$a1D7_*Mi0^Y!V;(>|p3Z;^wk=`cfZk?b3YmTt_fa+@iey~Yo^#heD#zr9>%=2Y22fVR!a;hFDam0>j<` zZjA@Z!07idEIPkvqQVbiAf>?X2z}x?W-uZwNpH7U1O^F(3Iw&^(h0MNh=##P09@as zKpNKj!iUpg^@yTPj8H>$GGHx`2`ac7LeHp|Pbkfp3%!~;#&yp$*c62!6$4mFDpTzd z?2F`l+nXtH%2iIEI3)=OuI4mf6u5ym5u~29)Rf6VcL(M^zL2@^KF`Nzu1wm+3283R zylRdiX4Fbhrd;9Sl$9)%SVxy8M=lRun-6@_Tbk>b4k*yzcvVIsCu^LFbp)qXpS*nj z&se2KXvC^9+(v4bRXTB5RK-4l+2eF`H=D7n-Hz1Y)D=ZCHId{~I2MfyoK&0_3`QQO z@e-DpwTtf`f2C>EA@3#2KeO~r95g*OO|OZgs$-RcYP=&c&s*+eKPF`gjK_*0G_sUH z`P5B-jvAVsc+MgzDbg0LdP;(9(YbO4UshJa+{{Oap!(5cw0m_~+%fITKQZkWS(YqM z93JfEDNr*09s7=fK|V*EqB{2Vjy|Gll_aPHrq@X(@qGHP7==|&Ql^!Bq=Fz!SSav} z!li)WD36KU*F2xhWbRgR+LoXaPOCogT+|>Cq=Ke90kg(sN)hscl&B`@O|AZMh^g90 zNm&8+S5LH5(%k0Nsv$v4wJu`9TseKC5p(6!iE4M&NVd?^7KKbvO2WXf4(}MNtDoZp zOq-zuSvq#ycZiO1c4TN`pDI;CP8|)5(?sL2Cywi86fIfXkN3mI$lwlihwoi3R^A|@zwU>Tx`iW3y<*uE_+%z57J__Ag@A0ZhDdL6{iQGo=58|Ow|zLT9*F+h#+x^k$_>y5-DlQ%lU?v zDnHes6IoSS7b=RGQdAv+rQ6;+8Yrl#B_K(o1UMdU@m*aNby{>NqFO*8X)NM5X&T)t zI`q5;9K;ZkabFGp0OB@~!|N3snSrjUU%e}*PANYzSs?f7!a0iS3^s~ERcm>9n7)7+T*wuP` z3Oo&Tz?V`;NGID#C+`^a*q&v?k`5i0C)3J11qN94Xv$6j#1*u~*2=@BxN>DWm+oR( zHnw6{W$e_cN}oDp#3k;zi8l6s>l|FXq?ra~PC1;Vpl+cuZHKTC%~kNub$Z4jk8w6= zK?Ipn=9GjFq+-v=d>f)DRymn#Yi1K-s>eugNGy<1{{Uem?v5IDXAS9PC{|_(6IU-} z5a#EhFLq!v6r;26~@JQA3cb zB&pp={U`(IW3bKQRym8ymb|f&QiaM`QWUyfB%e~D{Ua+6%sjt{Szu2vo!= z{^1e2YyCfqC7nV@<9;Yi>@zFRrMn4}0R=<;=!@m$E@J8?34;x(&_gK7p;`93$8epN zxy;4t6FN>!tDKYaOu^~avYTv9m|46g=hm^)BP!;3s8x)mVaj9oH;eK7f_ohXyN3L6 zt(huaRGP{Z_nH&}uhV#0ycOcTLei>?RcipclBwqIYy@}Y@|(|wI*=;3PnlGZe5*24 zfIflamcjWf=VgSMygJ6Ev3+x}<;^13Z!kZIj&e@63AXn}sgcX?8YWH@w2PQ!YT9-p zke_hoE}6^!0262>u3Y>t`^sh@zO+_l!lm7sekYcIH?`XTN%~wauFB~y>nlR)oV221rPyxGYc8p9z zm#!w@vrY|)u5^jY8+iJY_e^b!Tad1N>Sd%?6)Ma087Uc(p4&(F;t+S5)_J+Tz0vNm&?x@43ZOz z)#!1iVyYHU{-$6M1N-!)8uUKlofm1xF3}$-~r{ z320Cs@~AvUrzdHl+^E&3gpboinLIi}!XhCGk^?xK4!4r$Co4M;_)>1j)oQw5f9uV5u^|9`Vo2;%^PHDz66;;r&#-4iqJc zf7Mqo^0A%;V#)n3F-)3f`E-C(pK_LX#HARj?JQ?|9cH_Wc}o!@RwIF`nqgC_dL;sV z+6278!pv4sMkQE6ucc<3J9ZtTxKnV`fH?fUS$7nesp^;tl{&Q`G3*RrVjRBZnz`zw zz_I#Y6cePba8NOXpx=~AiN<01Q-(PDOq@S5(a4#l(3+KmKi(><;JyWjqec&k$(uM2 zGNsJcm-Mt-U&{7tl%+0`u9~f7S3(j}51=m`HYvd#GUa56#{tBt(tcG-nhHSgDy$h$tjF zg4R?mvxvTzj(PS^&yZ9>QI{<$Adl@FysDlF=9xiq zr_)MQ#Qc+ng(SDLL8#W~ir&W`LB=i>xmuS{X)<7Q^J?5(;#wQynXBc(pag<~KSWJ|mg(wA3#Rt*oa~H%KL;l&9kcai^Xt zYn9`nKQa|yq3s(EgNytk%(6_3$%8J2p>{K7%GQ_ba2_&O!oC^jNhYf+=GsZqjrVv~f%OrElO6gS?Q4EcR}|si zOvk{Tg5z>fwGy2&%enOt)p2ea=3F*jpVDiV6#gOwy*;BEuPtUg2B4}`*@&2nsZ!M( z#u3EK+lGWDzD%lwpftfXEv$OSM4ye!+I|kXEqL|^QV^P%@)UN`NRDd>;&wAYd<HnP*7Y z4gF({!?7H}mS>eyR@6v0bOU1;-@^`8j^F;tVpOt<#HEEK{{SP6yGC{k#2o3C(kUlY z3Yv5O0I2Fx>QC3KQIfdfPftjUFErpLrb1RpT&pOP9lbMnd7NY>ZW&ikB5II-hd46d zwWG_DEpm$)UnMj-*966-c(}z3scLHwkdS@g9Ic093lr%OiKLKHWuR#Tv5r3(;iX+L zE2WrbAPqrDc5dQ0dTCjo1)76KPJ}7kz5P2!o3UM{Y04?=XJXhEH-}AJ+!w|GD%w9W z$>5wo#<00)rNyLcmZXAp%hcZej7kn8RRkiR6+o1c^CnmhzjDtRk`tG+3P7gB<)KRq zd|N-(4*ZqJ%Q-qpxhFDHiK)>oY7a2Yxqgh%!(%xPauNH&f}T{taOhcK_Grh&@)dRy zGxZeJBnEVNOK^VBxOQsI8F_kUAg(}dMSs{BCfC_5KL#ZZF^=I2G|O6w!6Qg;Pu@AI zOy`DT;8Nn$^3y$;*_`xv6kHqn z!&YDha!pM#9SB#LrOn#WjYEo5VZ_L-kgY6q>O;Iw8xoAlI<-ltDXdXi5=WRFOW<-N7G@ z(VrwTB}|#&nTVK4A=A;1q-Idhn1@1=rE2pi9;Pr%*>eh!qzQ>0WR-p+E=^qNazv?` zQZ(GlAd~2OK(x+cj;q94N(x9Q)UpF_9Ht*%DxG3+P$8I!f%->Nl4|IuB6Te&RH1d1 zxiQOA;uO`3OvxZ5>2i{75u!bg%O+xKraIPC1;|fW%c!K0iBYDGr3Fe#NOIm`92FIE zWrDPwMEt|q{Il4Zn?QncQ+v;r5b!lQE)TAct_kE(88ku$SLZqw`(P|2iG${R}k@tyWOuv5l{jS&ybT4Lw$LrIz?;ElALRirvW3T3g-_=E2o!?%Nr`dS@c?=b zu-AAH2>>U`VkI|czj!VP{{To-s09#yuK}>#EG#=j^@UMLb~lKU!sMTG0cc_L`$Vul zu??U*mVrYNf`yObBLUOiAT79f0JXIDh{c(pIW~i+x3o>b4flpiZcfnv3J%|xRWn$_ zkTSf*hS040LWOq!0MUkU+dZO!0Nr4lj*tj3Ix|2J5<31NikxD)8^9f9gEr^Q4U(rC{(LJ0nWw)m0ZE;074kC-XJGnA{K4F z&@BKnUw^znK@R2K!T~BG<^U}Lc324mOR(x9C=G-rqxJ6usGBr5G)E+c8$@O-ewT<8 z1&8J!SL3u!3NZCxU;cN zHw)=t?C=7>1Rtq@=>dm$062&SHrPP~5bgAZ3esKAvp@@2MW6Z z=pYiKZ@GdL9s`htF>+c8N!wMuU=Ue|>ktqHfV=?un&!i+!ji#=C+WNbNe<(FrX`gB z0Nwy8X0hAWCY3AA5g?1TpcQGe{vZY+CeaaKz`}(a601JK2p|XoToxVrLDE_FXa?4B zA}K*3tpbcx-`%2a7>k{uLkpYx7-wzCfE0oO1YQe*UqJODCZKN+r3}cq^?=}-`UV0e z*s;7W-!Rz03@vNGfesYmMA{2IpX@IH2MrJq6{g;|fkHt}<-U;sapr%tLc`m)cz}>R z<^>MhLnl)^*g^&Sec^#1xE|&N3cyo@Zvh~Uo*~?kayEb!F$May;5-aN3%~#!%s^Z? z9ecq#fWFWhFew92Q5FzD)AH>QD(+q2>J0D!Vv_#=lMt+xG1zv5PNg&bVZcgFk$48e zbo|c$0QZD2A-4nC6(9!yeqp!i10YgZzkT8|fU$3+5`94KAwt3F5C8=`Ljc4Ef&do+ zAuVui06>A*p5>xLrsBi%5(N?5>1diUTCzQP<3q4QioQb@Oby&@$cK2~S}U6jvnQw1e2q>s!j#djmw;dKIb2k8P>>R>d5 zb%+Tj#Cr%(racd|G892=;?VL#<+!(Zg(2Tb7l|;aY;V=zB|*qB09#3Oq(mT-upd~C z?vgF-3RFR{VYS2xS_vVNOM5^!`Ak=+q=5ebSB48wa-(kjqe*~*0XpGST=`-WNq7a+ zZ?tB|0YD))Z&!!|9YDMEg2QgG3#Pz(-T`)32B)%5(g1g28@Y%ANdnCT7ubDZX>tQO zcq9!>0Uh8=Bnv;xeWA4hac<@jM(p;0vME8pNf8mN`I_(>NMPsRq%)QdAG<)LDg&fM z{I5rsQVBN}>L91fvvzLg#-cR4Fs2nH1tjSz>S4Kk-gd$ z=jKhvq(kiiyO7?{10<3h2qggdw8TkZ&IoR>bzOn{z$OP`0Rka#S@(%@p78>Q2x~4(RE*h4TZvQjk!=_v-X4K8}AC>9lsC+ZqWjD2lawdMY{KZ2@j}~^o4E)DLs4j zh0@j^m|-!;_7GeV?baI-*nuqMCL=M1B}~ANv;qJf;81E819&b8u@J1~zOY!n?|#q$ zStL6L?+O*%!=ET-9`LQyKm?_R{_J2dxCZdW+T(Z)q%gcdB7<3g_J}>nfCTj1!GIylVHjTutNltGxaGZN9Gc-NljaEcnFOsY<{ zAbGmB!aMI0voi3yd5V)IGiI?4O_S~3JcY)r`YUncNhx~fNn5EZQ-EIZ(__t-Dx>zE z&GeV3&l$^uiexq}TRteJV1ErM3Q)V7G-B4&1tiK9LHgPqboGltDwfIB z4jl7BeVKOlxWW0Oi3u3i3k+ZbtiCiF?h50G^(IiS5Y)53#U;}{)}f* z)7DlIBMp=or{>eNWlF&*q#;SKt92nys0Y+xX)-D}!A&a-1N73BFt9pE-|rU+D(du= zrAm~GKXDwAD8hhB5K?tEwRM3ym2$zP!{Bwvq^7g z%T5`o4^JR@Ln%jK53FS-PByTkfnn0qFpv24H%R&js=q8^0!n7*t{_p!)LX)(PK$Po zxi=~$QryB{=&5Fp)?%{I0P`g!t>_~TZeYsZG^to71z9?Fqx^L{5qB)WM>~S$L}N86 z!txeN#j*M8P*3}n5|$7CA{nD>WNt^f-Qq;abU9OkQn0#tfD=(%sales{NcYbrlwe$ zX;@}4iOWc&qSBIFlA8$Q@oc3cj-5D$Gn-RNhW`MCGN>RW&Ewp>JopiDk2Ee-Zx;BI zHi}ug>G1l60e!(KBm2hw;orc&mAs~9)n?2(qZgc!=3P!DP_VCYs75U(yEoaAN685j zGEBO!_aHGzntY~PDJnkuM`y};V~hEsP{Vj#!TMQ~m1G~$1*u25QczD{Nc(+|c@gDD zhZOSU<^C4XgDYaWM1l8Fc-Z(JNyvG0cvuER!)cO`!AO+QbBCc;30~~@ahE@p&{Gu8a5_L_$G6YnA7$mC649bmsc26` zfng2$x}*;dT)+~3U^Fog9YHsY`^izicN59EU*N^b)>Whw zlW=N@$w<1jDbLw)-m;&=OOza>5^$`Nm66h>RW5 z=-2p9Djd0B?uvdMQ32f)D7C^arAUs=sVBH$0ZDQ$Jz?C-w}XhM z;l@Ft4M&rx0!R4dB){B7WQ@6%>678f%NS_v)ROJ^jKyivl%3JzH>7~OQz6V9_DJA~^lp$Fs)3h=a*8|=ox-EzFln-noj{gASrb+(L4K^I1 zrC1#p^%9|$Qc~nXc%G0A&;=e5EQ2owqXhigq$OASh*jY@1w)#=yGXIrB2owThASYr zw|0Og={}ng3ubJ^R$R$yB`V33XVl6;C+nstsK~hrr^>9ALYLfx-Z>zkY&Po!m^dTr z7T>6|sn_r?f>@eXF%BM5D__n;gqQor1Bvo;%O);@n!Xods|xC>Ib{C;NZD2fz~7;W z;VN+#x?ZDiLq_8t4Ng@tqCzqZnND?Sm;5w?>7}ElW`Bc!DcOY!Tz_5dC1MHNz!A_&h6^egV9$Vx@C%^i!s4wpC$N%lc{x5v=ov?Cj*~ zkuiC1FkzwHrJOkcea4d?P7yE^nSL5dV4|XYw3JAgq@?Zvi|;19ld~J}d~wbnv$dTh zAyaUAx_>UlM5T}DsMNX7;G@j;SwiGscupZcQXfpoUK&sSuDJWuitI!U2(O&q;S&r= zl@&8lp>s6@^CfqUtwhm}bsq=kOC9)l^RbX=*FH!4MJiZP(@!T4Owe2Y?7~OdI+h`l zd9cW6e8rNniM03BYiQIMj^K-Z~>gN|YHzIC2zz`^KEkUj)un^B9>sC`+lNnK8*O65iU1 zzR|CJhPVn7N5!>Z`~%KYJWMkaro-kN4;_=I?_&#J%Dx$lO8r(@;uaq@N*aJdo&7wo zA56HP`#Sjx98AfXOEAwxLHSiM8H4H^ej`C=&w#Hmxe`p(WUS{s9vhTPrP2%-1Wn1 zmZQzsKZ2r?=|r80-JUS%G9Lr;f)p@}?@LEKsgow6Sq?qfo+@!%rfoEl$JcOcCFbdV zHd@6}qNgPilnuSR$6Lj?D~M(JhHe_Vq-Z`#s7XmbXzbXZFIcV`uh-=aQB`U{Dp;ba zWm~jy(=l!|<)r?Zcy1w8CAB2fps1(Z#d5wFM_!=Kd_~F?WoX2wPD(}P*2^mg?;V2& z<{t}~g;3`lnw24IDl@4UU{Cy}(a2Hps&W!2b8biZOD$+a6#?84c+QlL1!tr(QzH(V zubmYK!@r^0Fw*jcJ1Uo5%RYZ0Gep`t)hAB5l29H6vB} z0@2AYhJQn7m-E=Ln^JW66!k5H~!?W$~x+pCVT z%v0ceFU-i7DuXl2)})mwGo@%yCOaA6Mnuf?rLXsV^i2d33)#M%V}Yp4dABc;sd6f11fMdHZTO72 zc$R(1^Fjpa()1AMo`*~QW3bV2dZx7qr_EF;lqLTF>RBiQP(R`g8g6mAEn@a$nGUM(RBCfb`x{{UFG3eG$- z&a#a$nJ*8TQgouAl#qS>;#OoCrca51kyTC)mS|JzJ;Zrtl6$HRBQp@m7$z+)T-+L{ zR4!n2p$WQrUON4DN5ydYx@BuhQ@T^$0H?%o8RC5$`O?=dPE)GNc;s-5`H0SwqZy)> zsXHZ0K4Uj5^LAs!X#sno3FtB`QF6^|WF3o4w3jPa;sx{{VTVsR2Mb zS0vnZV-?}JrfJHETF_NfP8(8GZ>O!J7DY}wfmEnXd6L2NC1sn`bdF+!G2r;2M5)Or zV9HnkIX(M`d`PB#5ub9NI6qH_$x0?HG|fln^z@8s?jO)q6yjJQDniI3Nqs6OV$q3+ zWQqmM{dO5JO;A&)%i88Dpv1EtTb`-Zq$*3gfqh5mv}!Fb39@?)I(BEub4i$`E=HzV z)YiXFv6n}T;P~X!ntGW?n0|4qf1^BSVVUCw$E6AkVvGrd5Dd`79-m03AK{fTkTH51 zgcZJ|_zL+uMr4zF6vLf`l&?&MsCCpfgr~;8NPka?Jg^kOXRKq;*W;LU;YW!})R5&< z8SFhHm#3`D*zAIdl0i}b01dC|lN_3Bk@FI&RV{p?nMfrhx=0|mtUeK6Q-#Sil_$hc z^H|&K7^O^pJspm6+++Se$?HVaC(00(x4dOiRjN`1voIBNg;zz%gxo44h(|QB_JwQAq(z;X|{>T)}Ztg#d}55!AfpVp}K2mlup}48Tdd$6u71PUDKszWn9+CC*`jwf~xj%jE-?TmR zSaQ0ThIYObaUz<2nK-ENX9;Bz<&$IXW7}U3PH?I+PB@+$X54E<4MP6_+>GV8LH_^? znE9K5R#ss(U#d*aEVlp{+Zh)xj*3yI-$x@lpQg;#g*+(WRym=K#AHurdM$~j|W5tne;rgSt z1$@@&+8HLm4ZWhNb3(vSHXLtMH9wG58u#$E#f!lAq4Q`-F+pHa7*_?NPr%rCTYE{USLhOF&q}lh>>wf{C#EmWFi?<>_{a0$tneU;qw~#J9WrTq*-L${;=p|IX1+R-SZ z0-l7tDRW~5$=vine*3hGNc#g+t0(!(?OP6?>iQK>hxJ}!+fC)VZ-X+gS zgmw`CKX?F;QdpP{S%gIw7q_epOdS6JSOJfeJ3u7vLqrAod%PaE4&Jc<04(faf(47X z^ngp*{{S&P3{Vqt;6xYsi~^tq%s>F^01yG#n2KOnK-55p?pgZ81WD>d7wSX^8jC%m zgc2I@Hy4E}CE667bySo6!^W3%jBXe(Qb0nHW;CNyM~6sArw9TYIT}WHjcy4+@NuLf zptMK{C@9h@pdkF-z5nl=o!w{mclWONT-y{v*KjlJA=$xZ=Af8_{|beKLmI$-eTpK% zW#yz+uL?(&e3n3c7Gn-+uDlv1MhWBr(Vrkk}_oo1w`}>FI&^H_pQUf)9teNWhFebzoPuL#;6{44AK5ivYGF3Qf;_7mLe+`FCo1npJTn}3MJebZUJyo3 z0RN}AvCpsJ6zqk?scRG%vd-6Nq4cp=&QNo*O{W&to+%LX(ay^uvP=CJmcSv&)gJ;v zZjOQlZp)$JByK7Wn2dN###~-`HHwG@xZ@Zvz{dbXjNu*TrVlI3YtrE^0T<^O4rCUI zm34oCLVrIPYM?BnD&>mEJh|Sa0NL&wI>QOJ(gHN)%cm7L)Yd0P0S^CG3kSDTvH^$u9r^XpU`7 zFrD^q)}WkIA7t`mlb2WBL=K5mZIE)>x|PatEAUU*k^>vU_5Hvr;+(Z>#4%KK&h~Jh znW0x=oXW=0+7~MNWc7zL7utT5l`H-223;?L-5MOv6az)UEgW7#z^@(eEMxdVaj z+O}#ff6q>hkyy9}rTRNbNaT%xY))6!6U;qQPaTY**aIXEvG^ zt%3DzMb;o?;w|uR9QY|VE|75(WIafwIY3I5Yh`Rk;J{%5w9`pw2CPvt18{tNmOa&X zLwJ<}7N6woGs8^xG09{|*{K^UN1V0Aulhm|SZ{4g3lqGybaaI$(9aNf425F{jg?XX zM1P3w3`D8yELwmbO=S)p7^U*A=pyl)3T^I56Pm5x%oI`~@yVPrz%WI>`|vkd6QnM28BohAeov9DOXT8{il}H~Bvci#wyYZCThO|>WLQ-$S z&DX+WH+@W7KtP@myKXiVi4@N~`l3ZNz@GdyX_p!y`ZNqC9~l~pM|NQQT>v1;jrFRy zTO_@jN#9f>9JB-zMLI8CBv@abB~c1hTq4cDE;0LT&SNNZ2`#OV&+QsO*A2g{Hr;JF zk7Lp?AhQ3*iG{>vB_jkd0Vj`)MBb8k2R;Tr^h~@W#y?Tkm@`b2W(P>P#ImEgj>Bok z;GmJfL1`g=9CoK4#`8k>PX8UvYa-7!Z5j5MLECE$%YevwXXFIW2%B>;z#-`Opa!3E zr~DaKh}SO2_)tlRxx>&L=-j)u9i65=&PhDoyx2c?JU_5=j0OQi}9X zG0EI`3Lr&11~9hji~v5y{r?Gk?1?q)M#7L1t3-3LJ%(}8@#nG(Jf;WOsn?@jEAhmT zgnRM~94)RtjfZasa4l}KuDxDj&jN?S*rGc`tuB!u=Ga4sA}f!8&3f?+62su^O0s`w zj|30|KeY~hksXXsvPbX|D9OSVwnX_)Ti%eqYZO8Wml+tP6!;ni2gMYSx&|bW5cRFs zD}osI^KRtskmMQW_6|0o{)m!E z11?R!#E4JnbuXJyNT_HGuw~&7b##_zsQx7tSXS7n*xYC^h~V2wiYpD45-DuTEy_bA zeXh(HP-(NQu|*y)so2Oqxd!{Hrpl=3jK_KV^LWTU%>9lxmvT*swH+T;G}vo4$`jKV zHgovm_-!pzL5)K;JV+nTf6VJ~IwAOxF#2=H+|l^Kn+?QUq8rOiRlXS^KBr%1hiYm> zAd|KE&FRy`C+X7dT0P^lYkx?1nbBSD@qif0c}bJDmWLJ|;tN!a*$OPYFa4PK>i1S0 z7uRo#od1_s`=)Yl@8g)B?KFF-Hw-Ejy&sC@_LhKZ2a!mDp9P za~iI9wZ_U?5Mg=+Bq=gNtfAxUZ2X=xRf^@3>Pr8)-g7n6cUPzdx6Z5Xi$`7JGwuWd zTWW+XYLC*|s=GzdHU%379SMtl>6Jo#l7-}Is7>Rz(|`xK$mlf;M828Isrg%uvXdFD zUE-sKRNW52oSNqrn{Rnq3_Z^{El~68FRqgyV8#T)-&T$YTN{YyWA0SkI(S&&ZP)cd zIE^x>Krxy#m&zg5_4>~9!bzcsRJ6nP9*1kklIVif-at{%Im5KevUa~MQq!QQhk;y( zIhYhE-Py9frDZH^Yx4DwHgV@bR{@Z8DV?DA3m%eCK*uw|fjlJw0UpWET#If~ZoQ`I6h9MpmTj)96t;ZA**3d(#PE+>;YE3Tak+%MSD`fn zc&x6{O!HOB>vzIu{XMLIRP^j_QCAf{mZOtV$g9|zb@{m{?-D&>JQa4td%~6R>~ zJ^mT%l*gzUMf;nMqVAt|0}a%AiyP$6Bo&P|wMktCw+Z&L0N19Mr(YzR|EnGJKi~rr zrNu*LotL3^C5l|KiWrIA)`)Zowuzss@&5xr+dSotB}yx^R|{yM%(6S!C;aU2`el#Kf6RX@-3K4*BuONW<>pZPoAr0`6Y80#FjcHk_n_qd(U z3IY0olx(J%G7k=Lj@^U;?B-Z>GM&1C?RHF_@mfFhdvgwEs4HY>l(i{;Jt=q-??|%L(EIGGCQA<6GF6 z+`!j0gXwE4C)R6p14Hr&D=Lj+rg0VG+(v{VsRD>2J1GxhUt9|yp$YPEnR0=a=TDwD z5vGf>0M$wH%$K4cLu z7_inOek|XZ#n|tQx>e-cWlL=jzv*^;vV46Kv(>M<80nwUT6+26AFfpX zDUUV@Zx6~&F`e``LFyb-N#yj4^fz~I`zC)xSq znkHvGZeL{~)+Gf<#t;2n$g1oR{5WXwNBURP@I+TrP@;$KT_Jd`K$9jOc>x*p;yxbn z^ZVn!N?iAWSi%C;-teo5K zvD|k95vOjy(90l(yHq?s;@W=HV)StW<(dg=$TSZh(_;$WeUR%FEN}K8KF`6RZaK2s z?o|pQE8s@%>!-N~dS$W(_ha&1XD-stPQJzc)5yClW#Y`yeO{u!z*ucsC1Wh_wfR1v zUiK8lB_XEN+7ws=J~ii+{!I`$>krcY zw9qUiOjjO%AlTYYzFntVwkclR$i(C;{s{bi^Gz^;@P*8rx_-E`anVAk0WADDWln=f zBYg1GwXKM+?tM{!3DPwLk*I3RaGa@}p3#|b+Rj*msvkf3-Q=2>*Gl>5h3i9c2VLFw zBAUAb`Hz!wY;7JKJnZ4V9b2kd|35%*LqXDl7^}fsl*mkZ=g1fP=i7VrcWq)=bIkB% z7Tr@&y}9*=Oo6Yp2#-34w(V)hg&XBM6o1w;1>oCdGL%gCMoY7unyFZ14NOmA`0s*? zTVCJ$in5xmlINR+B*f+tYK?3a4@AKg0^7qP;X#+)7v3J(T#zd1IDdk2eO%#Dvh3K0f_=|$c1TR8+v$_%|9_tdg} z{jrwsbd+}})?D4mZC1ZldAhU8HpYqKKUHJh{u6S{MAM`O8l20|0|`>aNxKjB)*2S) z8D~**U_We2WjmDzJuT8ROEAuRiGS{Nx};eA>?%(NMOio2Q6uh5vgN^R?2~r>{mqZ= z{QZX5#!pL$7-cK##|VPKEbq`dQT$Dl^EBIxdwF7|k-F|;BWtx8229Tnje6drqv*(2 zlun1b+%1Z&jV1m^k`Pd+&b0qNlcfcfe#_feiHLe6@h(>uJJZV~&s(j!SP zcQHVm{~)(It|t#~DIz~ZUTC8}!kPY}qg!4kU-rlopSxw5mDf|2@WFE|q9EI2XHBU$ zylDj1e|}@NrYqer^@r9qMMT`E+R0!%~rE}0l?HJ|?nS<`G z&J5r!WAT({Ff$68^w0YYhQ+4oLIxy3ZBmt2{Qgw$H0jQ(>(#V2m6RC%E}wGxuS%;# zx^`yD7BWW-J-d8kOFVtLFhNOZvi0Ak=jj5EA{Hh>X?5i14Ev86?@_MEaiuM6@6}9~ zYEOhJdb1W8%4*J-4J3YEk`5wmlT!7C=O8uuc)rZ7A-9(J$~$`Y2&O-T>LytQRQ5`O z?&>;?vgufhR#4uzNZeLC&#~MXsClQ}a&`M-dHA?&4Ck4Ao6(1^llfcRlZ)>56XHxv zGD0c(nGF^6M}d0^?FC*z=lAUX2WVH6eN*J|&0BArv_<6Moabu)^MQcN9HE}zA59xr z!@gzWRx?$k`QRk`u5g68N^I2{-Rb_4^UZ7W!KBsX%cB=_r=d6HTTYx?m+A*mm+y)a zE0}VHI54+N-x+@?F-Lc-s0_Umk^LK!#$i&yP~EEet%}lU(}%#?C$mSx#gu2mFDbL2 zhyM37EC#Z;7wq|Kl2yl;qwUoL_oU}Y8vj8)nmpMs5(O2oAR$n0hA}z*PGgv!b0naY zsvynO(7-4OI${BLNK?l>eBnt#Ku2vE81$~TP=GpK3qZ6Pef(?zKk_|)>9ve~J>jruQDe~BUL{X%29dAJFux-b`V*!zcWJB9e zlUk@4ZNb0}Tom`UD`P|$2G0BH363K6++~HufCO#`hat4NR$YK<50_{Yi2IEIa5^bcnavR`)Ulr~t6xu(#Ax=h+q zEo=>h9s}LPMcz?gonZ-$8YWIN!vkDo$Kgt)1Lz21ZB$f1;C0L_qLXqjpt^W;R?z>%4wUtsGQn1t9X-lL}EA>q?n$B*}p51D%ROe0;+J zqU}>aT3F}dK0u*^D+G(au}Y;MM7H0$Bi8TgKLp;M>1Ea3S@!G5HgGdJlXH5hw>~d)T|NHG4@qnaY($3|_r5XL`R}sSlSyu9Av6S+v z%0z}_zI~X&J?{t&p%#eVtM+{eg?-r}45}jSTN#>SrtWg&JV0Go5Q*eEJi}1uIr86T zL;wM672VW*ac3B({?`Nw9&I}UOur)`Mt+9K5Tt~xgvU-pOIP^m189(dP8=J*q5l$9 z$=`tsoDX;AD9=m!@PthyaV;d#pgZnixT@rDY%Pk7K72-`ihr{!rREm|^(S*n{^ z92>wa<_diY3#o72WZvu|UD0p~YV?s2ni=VK;{wv)oM4S*=Gx)e1Wl26r;wZ_p_D>) z3@|W87Xx?wTsI z)M2w0g2sU$&oNx2NU9GCbiIk!r!*UQRVhkuagzlI@;RAs=4I|m?4l4p0G#n}QdD30 zljP?JG{X`<%(eRTJ~X&A$VhwTt%a|3*b3~h)*+4efWbxb0H!5Ke5Nu z4LKg&jD|8mlJC${N-WnEx{MrJAh*-Jgw0YQ_PSI+6hW_yzHNXR`VxV0ar4L2{lAce z=vbf!DX~q+vf}nm}#e9at}Z& z!ATO>Mf9Is4RtAOFt;ASfi0qkFllArKCs%u_Br;zIScG4VP|fDMr7 zcLM4BtF!I&&m>YCl8S>qW+Q>UQLNx&2rFpggtUbjF&d;ry9v@)J|@vw1~vp&PH5XC z*Eh)_UP2eRlF)y{gdQwTE4@-tAUWW~qNd)Y&;kA_4aOeR0vJ-#x72|D2wQ;;VXUgT zelgSZ*u4W@4nxI8$V8R|rG3pAd;2%|b*V|2Sguj3fkI%#jwh8QC<+WAUw-jqpTg?q zKJN*ScAs+j36xMP4^2W_Xafu{Na+3RO_uD9ZMsVE3hV+l5jEcp7;>|(kDj4K?5P_P zrSM-Pi9DR6ItK6LWY#xTC-@36gu2}m`ak}jOJm&phu*`n7Pq0|W^`=>NQ4^6rvgy& zOVC{n<6J-T1v7As3{l7jA!ADvydyP$|4)sg(zt)jV54uK;Y@NBxK{XSocvpKL0?Ea zq1^qv`8XeWkZ^P7C8=d0>YJ%wtp3{-`1wg9S6Fy2bdH-0qs3@<4EaR*9d0q!GQmf8 z0Kx*#yV*cf0#8v=4YZ#JDK!0dPc${?E-*}MR}|&rCt?%=?@#&K9XrAFMcZ-(q(An$ zk=f@-3%cKqVZMXl;QFQ0d!jtHrPsD_)7BLVR&OGWgz=>g{l? z_2!bD@%zJ_)$qEyfZRBlk@T%yBcogvVa=Pg$iD8WLDaFBlyRw6cgn3HVj&m7%!w z(*IU&i&mtS0_A!p4U-$lgE?oNFD~;~qnkgK7f4k#JFH1Xr(PAu@Jxp)EXkQ?h(ET- zYuV!&c|(nRz?m%@bi|0?6JJBNiy7q@nq=>gBO@=caa;4d3__k(WBE!U%Wn?$zBuA; z@)km6=3Uz<4%Xy|!rPXk`vwLUTeCl}ANG_gGB1)@t$V}QwFgFa24%u^A;n^k=oP^7 z9_D-8JuHYFw){|#!ccjSZYxQ*q(N}U33MZ&g>z@od}oO;cpRh5-fcmD@?DQ(krs+1s^ zjY<>>X0~2^OA~oJwt~#)SLyEjLlyrI!5s(iNwOLcAwTzrYRYiwH6&6mcC9*SkH{@- z!Z32gYhD$EiRj0dyM73A6hv{N3G1&iOG{yYe1EBqU5a@%4>ij6@+hVVTU+Lt&adIM z_`=VQfj11?gD1s4El*Up=H$rk#DiYGOLQukUDIo-pO$0HHNY2%={v`B-4USRqImVb zSGhrlJM6(b4t2rV>NxS8ln6H=2`U(vo)8o)E}p`uEt0lGsZT*Up~5G|9TJ^dgQ_<)V!4(V{;Bl{Kz zC3(6~E?*!r&iCaAMH(-F(rj5ve3h>S-UlIjt?!*_PBL>#Mmv&wXSkN2BF)1Mi3_=B zeV*cH8)Vs}>eKIV5F@3~>WXmndmWMthuWj)&hxuD)nL?@9?epJ4}g<}$4$8c#56Yk z2Qa5?w-ovBgvvjZ>AR9PMLyUI1{CRczL)UP*HQrHhc4Iv==TYWf$nEbUpuoXvj!dl zsvHEw)WewqV==3KSX)EqiJfHOF)^3Ok_N(1Aidul* zc6C_x1%Ml{&|%#R)oQ3>|0OZ4+^j8Ax@~)x3Q&33+b8DK?$jxd+SBoCfMyB({B^7PDo(QyGB^3(!e8 z29E&HQ35mUOJXRi9*ZjHqvT{r^uzYuXwHC1#kUTuK5x52_0hjn2=`V|86i+cbVUm^ ztBR1Cen?#vU0>YSep2}LLrPQ01Gz+nC?U5G`PJ5(AnXPBO0VG0>Xn*$bDsR`_~nCQ z2l0iZoIgLaNyNyPJo*4u_;2Y)>EcU8&CzYuvvZ0;dWnyQ8Bd;xZu<{clsQsCx6#H_ zfyqIrh{wo|T9MgF-NLD&f>e9eCIwU2AKK)1`G<;kbKkF1($Pd`K7KU6Fe%WRVL$V6 zA9;JuZsRoj@6&sQV_Eg*_rr#*Dy*y zUlVXiF4~9!MNLJmG#@m+SauG{5uv zLoxq}Sp#7Mh0`$_HS-~b#(c!KRRe8OM!>2<8)dylKy+uuEIhnN7oq}@-I z$btL+hK0ht>0`unEbZmb`Xu%&}}}<;|xKz%_qkk zDUMcS^JaiW34W(c{jJ7^zSOM84=$5KWrvM(Uulag#}5{ibUaNAGZ~}I$5UzNJw{#G zYgv2H94Ezz$ZuJSdyS>wsZyfLYI5p(@=$Fi%2eBBYKTm*yxEUJLsHA6rlbJ#)&8T% zeU22vQ&8#K;?JISsZ3krUbfOJW6{Zvv=fS=t<|-<*dK4e%nXVL^@O+I64V4}RAJ zvNnb})&(hD(*#jYEep#@3%o3yU-*MzBqMblvy+)OcB^N)PD(qAzqTwH8B2`OS{&?A zUF>n2zf`aG2v77d2ze+9GWi;ghl^i>2hw&yaMfOQ|d2F z#4M8U8mQT%YWP27w|>f?5c=Rp0JqC6bGj)njlZ9DQzB0Yz>DZ}90{#~r zb6}cyf&FNW)lh9uWW*a_tgGBtE5lOvBAlcgu18FNxrLq!929|2*H_ zb+}fgR>UHf>`mM3w>4xvT`NDLHZ_ZoWfWat*pP$vp@@z;tkNO1ofpzmW`pvWzYU2eu&Ik)$uB)kK(HxoOk`rdQ& zJ42FjD;(Ql$$qXrvR~44!{+|!smPt}cgD09v2Ig^?V_sf+z}b+s2KC4n9G9W>!~Zd zgCn)Zx|?>>^SO<|_M^4)tinMv*e^wE=;DcT3BN%}Mnm=~TH(Xvg~w*}M-&|+>G zt`#6_=j+Pk=WVK$)*W|}7GqpsS+T@x2;=A9uFomWfy!Z6a`OevkgFANr}~_5dfPPF z?)mMmbF7Z>TPc?zl3YQSM-BG82Lk%QC`pZN!3T!O<-Qeu>!M>&T2{n4#%Z>gD*Ar7 zwE|5fF(5W8m0?ixiX`}u`wnP4oC5%)-RU8)umq*Dk{>5palrujR{mn(?LqPZ^*Inu za@YGesgA1ka04jcH$a^G%A;LAE>hHfhT)cV6$Np%ds5hj5aj^m;k1R8uCvq%WHXKM zztvJMP%MTTPk~z51^)la)y76v;{&Y#<4sbN7t(Y}^?DcZ8&h6oJg6fb*xYUo9J$T-<7pj-ONju&_mleH_vbITiR5D*tyE8Me!PuezOj5 zJ;?Xz%11-6`a@T|y~#7NaQukztIbdn;24sioPS8?uHZ{g?H(MSkg2I!DG6QL#B75W zs@qM`0Ps)zx+4dQas{-kGNgp{Cm^3wW25UR$pcD$W9T;Pe*sv$)-*x^#EScv+`iR) z2JO3-bSDtFa)~yg@xC(zR(4pyUW{T%ioI58DTAISg!wX@2FB3mw!v zqPQdiUY#c*$W-BGcc-fzR;bf4*q~OmUSSCTYyErS@wDXt=ml06A&2a`7LbuAqu@Oz zWj=pwYS9+*Oo@>P;FSkuwGxE^bbi!!H5vwbm)c@Mo6^+8(4$wIDhS*ODl0W^0=>h8m;}BVgXU)b0iR_@@HcOq445 zEpRL7LL~B4RWj8}>tkT95BW9#v+BArqd_H6_Hu)Y>ATaC!1&m?DjYy9nd3cVi=}OX zn_5I?%hTM$>f|3eFxNyXSRlI9BeagVdTHEh3HjH1fxyqS@2Q?`+_)%OLSrA``%03EsG+gK$d`$kA2dTU^hQvCIeP{tyA4Q+s4g%Ai zf)50MxfWVyn4wnS`{BQqBYH%zO#g% zeSouMQp@y}3m)hi^V`|X=7{cu$Nd&4jn>IK| zr?N4r|181T=jI6B0KFVVk-n-OoZ6->7Jf>3GfpjHh|Cu4eCd$Bj*H|WeKmJ=bO9tj zGn{uE?mMLj20e=IW3| zJadl{!>y!r8oy-2J>89ynrjs={snlh5jmbTUDWnMdRw>6XMU^J(ahu|IN!T;DE+Z116E%`uK!T8b_z!s2HRyn6;}U;b?mF z^*z*_uFOTN|Il^&r**1X&&cBSjK*zy;{8?~ZHIO)aH66wy6o`-SvydHxX9m!)td?- zYo?^RtRRb2&~(H2+1sb?)j71rnuvbNhu=>Re<-SMAO^cOBOf$`pNftZQ4e|P=!^1N zkILqlwOw}(?GMCb?R#7ctHpBlDGX|V*r*mNrdJHn znfFbj^m$(u|MdN8AF??KyAO{`<$@7m0r$!u^F6-s1Z5ooI!eg~obp zSSI=r9pBe--Z{gOAU~j~sgxOLE;fb`EQD;BD!z+chqH{kxexXphZ z5L5qsh8GZRldEIM@(KVjdVvG`IQwvX7$A~IRf3KoYy+f+KvzF!3JEFa*T_@OkFXZ3BW-1r2CNBy9)?73%B7#idA= zDL)`dAIE5XaJ?0))yF1Hw~A!kzPK!m$Mz>T9E~$KYSob34ieeItt84B_;8R*WU88k z6+r_&0Gc~-_g=o1raQRya|SmpeQpuY{Va1iI!B^J)vtx5^poT>2GC0wF9^jJixgVl z#;^dIv9O%Rp-XMVtIKnY=_C3UO<7tGx4sKZ>#*qxyQq*5VgnY7|I*V6f)JQ$s{zKP zk)zQB3RkkM5?>N{$exSs45uNK9Gm3>0mz_EOvUf+k7;7Nx;Ic3lZo^!TS?pb>PzqlXqk z*j#^-7S){0^7k}j1Set)UgzCZ^IP}Qf7+C=ep=eEHVhDH8>U1Qutse&)CX{%F_1ov zrap~nw|JHrMSt|kD(D@F?sQpr>vGfzs>$-?g&8N8LB=+1yfLERBZU(d>r?PKTnxgs z!Onl+&wz>%{oFPD7V6X)9%9mfJegIA@0o8Jhh<>RG|W-_*RIqufuw%?FYX+}^qnSy zT%JW)GvPb0Iih)=bq9v!`=mV--1_GtVC_BJUwv@p9{XZ9I!sb@{vldN)u@L|%mQ3^$oT^WV~v2lryuKLaVD zlimo}v*v4`S_E7!QYBDN>gUy{*RVTjTGWN*vAV$S-J9ObnR-@5uATYx+KBKRKM42Am4mGX<#zh>_*d{`l=hk)MRkRf4!lg* zfSGx{mDBHqntKbK+Z0#wUth-9e1kEgM5!lF7#gL{erV5s-9&sTRh-WJVwLhZ%Xb?_ zcCB=lp-;lgDO{xV@U-pc829TR>+%#(~L3P#SEh93lVyytW05N#&P{I!~YXT$hU zSLE8&V7Be!B(I;r6q@_B6we=I~UV&-H~d;i46z zDrFKM>dRX+lPsC1=w>He`rimX{H6ZHT|(~nz8NqgYiM%(_E$Uoty3B%#O@Ds+!l+M zu{qz#5}NMf_?X*gkc*Qj@~8aH#PgBwsCyS=ifi79%yUd%+?t+;HZ+8bi+p!fC{oCG zAubh#kEu02tWQK=lh{nU-=}J(`(t>0==ti6YN>@BnZ&N`!t0_9M)vLp(uj9T7&5=L zV_5FoP-HgyspSB&R}$CWO(=*MLTcfe}Cns*PZNE1KRa!jc+AJeG} z)&J>s8oAPVa1!q~QTO;k-G;IS+CqwkJ)K7}^{SUKAJGR-J=n`+Yc1JSQRXk> zLe4W@GUn0V($~tDPaJ9TuvlQMs?siag-d%GNOkt$|OqEq<}45 zW;}zV*?wo%EcW@1I5_-}w3B!540sETG7BmD^1_T;ov*Ga$(2&GzL8UNF)}25@7JU$ z{vV%Zy?4-exyG@Br=0l?j#jM(U-5a#m{wY@B*9$+l}MUX%lkqfx|E9a&2C(Hyi@;@ zb=|(dU|m->+tTR)y2+k@-m7|5!$^v^C0ftu>0j&8%+^X-s`o{zE_Ocd5Q;ajVd!bN6v{{y*+mihuoxw}GMkkHFF-;UwmivG|VtEnd3 z{}b%BBy3QeAcH#mp(^;}Sm4=;OR4L`0{+MTu#A!oN=G~IOya#N&9jZF`V5+;fGgR5 zMSni~MU`h%h@8Fj{CE3MXzTL&+jGJc6#&{N{d29M0Hk2_D$TGZAN(}qOLwq1iso*V zATdVnr!B=E1X$a;Hs%E!yMvCaUAU&jkb-25E4Y??GUKQ)u?1g{UI}^C;wmkKqdf*-051jswTNW}tnPf>NOU%Zkdi+1 zf&n^NR*9i4jH*N;_;LxUp>egMG#oESAwN75gr-+lpmc=8*~?-4Sf<|zcP9hL;T{MA z3clBUQJ*B&f3que7_;R!a8EzN^~%+Y@WtcaiL@ z6!$*>LGN~;C)voWONum5S^9P**Q+<(q^4tfWvt^BQphxr8Oxb`sSO|CEg6;XgaKaU z63LFZJPW9LXUN);2%3B`1S)A&h_vCEz%A&=!OVmO_VpQt9tZU3mL@&N@fEi8OKT{h zuPYU~{$>^nW(Na6hJ$z&#j#dXR!g47wFZ7q_?tjLO)^`r;822!K^C@#!bn zF+^tpZamzj4GJ-;t`yAiA%1%aNA#S^$g@TzA;$NIo$T!*Dk=x)l`vJUxxf^@j8fR?_qImL>%jVN?i4 zh^$qZ?(Qy2aw=nE<7EzsKeSR2|xZE~y0jqZ7tf`Gr~LS_V>2cr%t_pW3<3 zb$zozy8j{}xK9`&OvKI*1xEMiA?#UVjQVUKc80?P7m6s%l{S_7)(Rj1o%PL|0X&1l zl*KDZ@Ca4cI=8RzlW{ldU_Ed^`3J^TNF-o|u2wk?s7vaqEMZFH?qLq0D*m`$Rhx^^Fk1m(s!ovVmpeurQ<5V3kl zyY<(1;J`@y0L@-5=1dW`0oCSDC0(e#dyXUi=F|^gpxKs@RWw`iZ2WfXn+&_21x7$- zzYl+t8?u&G0OoYOZ)&tR07|$|dQ1FLPRFpPI=xtsEVZx42E}WKs!&Fo%q4b4x)V8~ z!2pFNtb7+3+?gK0MWL2009ZHD3Lngb;I0LL1Yd^LKu>BRY*?((EqoXWXW9?PB_G*Q zCJ*XoGMB)fnp6$4@n~H;hvLHeFeb4mUl~TakzjyRAmj%Zv6o?Sf|S|hBEP_Kg#(Ae zS%)v8Hc6*#@QNU7xQ%3%C{Jaq&QJnrD%F?4&yYXp2~M9ic~BR0`ivUhZM+GNyoSHp zEK48$<{X`6p+OrnC^^cg)h~Sq84+^GV08YE$kolb4mSma^SA!RX>gt44m+`|Lv-N8 zE9Ar1o^Xs>2c@C!IkpnpI3dGK0&V~im~rwY$Xb@q5{An&O9brw-w9pC4z|NH&19G= zHB45kq^xoeAZ<8I$nL;h+)Kh&a#0UY6~cHbn|%5Ot)?>rd4knETJA|~HCw&I2t&%m zxJLc*x};W@o7Fs;XkKZzG674&Acvgy@3^dMlb8c3zx+Zf3Y!)!Wgi!o zC~hd7>1Y(bfG92xJ{8Ho;Mo8_z}2FnL}ql!Z$??fd{CUT;C2*BTa!N8`BcBV-z&M&INs zHg0RL(Z%|zB!3xe@)b4pyXpLh%G}tso>aF!I5vrR<>oqA9`eP{wXCR%KpLBPPsw=y z*&Wbfq)KRjr7FtnvANh^i=1%wu{-bHHTI+wTHiGYW%{?RTo3tUS`yw>MA%WuOB4^; zOaEd83(+?XGX0&orpGz=#XPd>inXh&?)$M|?f+499{yCn{~Ldw;~b7-9mnn%$981z z%yW!5_U@3ajI1(G3CFPxvNy@-*pyWWMW{%HBw3+SHf4MwzQ6PP6VBuDKKK2)U)Oa# zFAn*n|Lhx|t*a=Bw>ZFse^fh(Km4N2_dPF*|GLVorNaO#4^A21Fua+!_K`M0`+en4 z{ipU@!oWdIwXCN0c^_Kt+DHnc;?8|_hN1Q~0ePmk2fwf3O=)%Ug^K&Cx4F#=Kdib2 zG`w|c2)cRuGwo5IED8Bf?7ENktfgMY&W($f{gM-bqLT;tof_iOH~*oSYikNQ`trZd z4o;QN?J=dZ)@rvry^E48E;mCr_2PgwPb69_&CpcBWcQ{brVpu0VqJ8 zPwXC6w}^zNy&I<>Fd#hHBhXw*ef@yuUk7Iwex(9(-~1Avj6=R8U_s9DXa-`^;MAR= z!%pdh_7n&nHVV}Ts$oNZWw?? z)7r~K3@UcK=o#Yt>R_iPPrJFQB8Z#%`Bc5cb8 z&p?)?FErcjOyE2|9QYN9PuIh_uMJfFEj}O-wvtIq$kkVjW-h9gfa{AUoXJ-0F)5^j zjgaz2H(=l%n*FA69~5j+d_tpn+vV-Ng2A;&I#mWaSNEqx@R7T7BDvr5x7lBnSLcnw z7{-78Tdu>i9FvYd2Jac=k1keozrtYTbi0zI!2{8K$QE3RiS^~dvr5L$U}x4sU5~3X z=qU8C^E;C6DyI?FV`(4s>nw`IU+62)ivt}YmN{&`EdRBe+N(KK!b&#bo)3N?+C(uz zlr@O=stHWPF$u`a6GK(tMVgBZ$Q{;sjF@9dKH4QFX2?viFj0GXh%%$yv~t6sB}OrB zo&+UmRhij#WD?9;jXMQy``l(1P?V#eFQUL0^yAod?L54YMZa^m=R^f7^}NvZXkuWs zGneLso9P(JXOkJ^xHbXvu6seXUHZYB$&>UgmqqSUlHIhK-l?L9N*({XAb;2XQf`p0 z=jcIht%cCOVSe`!S~~=}m^H&h20m`Rl+JUZ|EO#AhwoHRRVA$UTi=CuAODFxOOm>e zTuOKor}#}*E;RkUo@@kD1;u)m%U-F_IJv>g%RWb_dQvGAF;y7!%!;rQre-)=GF4*V zQ*qJGs<4vAL1oNry7)i9am`I-=Ji_hKAY4kQ@Qc5%R{w-FawJs&Eh)!XW1s17n%~C zu3m88Xjk*LzK^#ru{?><5#1?L)MMCjB`&0P7orks(`s*6mD<42uRq9LkA?jk*-LAT zy)<|q`}w13Xo=E`RfV~eQkDDHk6iiZMj^!2bk+T?q%b|R%;k;dp?pHg%2d@a?{*KT zvJ|JIs1(PxBzqYr>&8tNEKlVUI|QzH+vigJlM53F{_Q3_U- z&IyhBN4hf!=~h_-l6UWa@1x^>OZ_m^^jSB5@nUwJ*=afj@6_mO-f8P|Pv$@8=b_o0 z3^#-Khirdnf6Miuk@Vj&HCKrR|LCWI{I2_^T^d;F-q!Bnu)o`J{Vj9-kg;ipC}R1D zu6Uw!yrQJ^R#5}!hS%A>h~bBn9t?-nt#I=SVK^<36Z~L*))H#tSn=t{Kl{wb7o(0+ z^2*!hOovzaUc*(92kRE5?DbNSSNz^@JHY75EAbAsN|25cB+w*3V3@k=}WAc<ZM?Q3-Mb z$=aHJBgB9+c4tJP$GuPC)1zy&D+Qw`Un#)}=gMfrTZo6#EHqDR#58m&sMqT-4p*p- z%ZERvitJl^v#P$X(-(2QE$*us8TvO}$WkpO1*ki7K(v zOc}9Lu4Cv`y3WLk zhVAwL42B8e@c~g18ri9;^@0HALEfK&5I)8VwW+%Ll;62@+nql5?l%S;j_=i0;V)h( z!r$w;hP-CUDAOw-w?Aw%4X(O)xssP-x-S%8n$N-{r%5iOyfuvGoBm^-?7VQP(kh?l8)w>PifRAl|nFdtrJM?Q^2 z(RZ?G(G`9ZPH$zK3ez;7Ee)_AwKTb29J|{RmD^v1# zvdQV?g-3pR=C+(!tv#PL;pmY!o;qbOVQL3n6n*xc|Ig|BLRYA5Zqi##eR~4?lAZx< z<&*dECGCpYgPwykW1jA^&d(K+i|?;qA`f)8Z8PQf-=a%Ws;m;X{&N7}ds+(c)^1UZU;eY=5>wCz3t1}62<_h7r z8r$`z64+@%gx2;98m_01umI>zz(C?}v?7u}PPTw{vBF)$#i0{zdrtSbVco~_j)&_2 zV;-X#>SO>S=49}BM)=e3if+_Pj%cjdCEG6Wq9^W8gdgo5Vv3;Duz#%GH_jRBl?E_k zs35L}LidJKoWYF<)X6Zkl)_qh9z5wxtKXHMW1RUPFh3>Ya&Zm)U{wlj!Z=MR2Eajc ztBlrIO@rg(M9Y)Io=w_B{Wrd=fl_^j)2SfF8yG`X4rfeon&j(60cbGTuf!*IzVuPS;Kpd>4AG{ zewnx!D`Mtnc1A6bAA(0LaF-}X(+|LRa@OghPX?yoOajLXypVWAE)1=(iF~yRhzNTI zDY9pD>(I&XEmk>@VE0WmbG{%9Z?Joe=xfHtkE=m=lB2x|}mi9mbx)VT;-V7}6fP#%P z(JFts4NfGD11A)aG>W8!V;G}(%{LS||9%k#OSd-9Q=oIT7NKH?E+JNJWRZuC% zLltCrAj1?mg$EU~#O0AYioV*6tnGik$IXaN@A-wsh1Yy=CuGk7o6nC^0kj=Au!P2& zmURLH8X=v=_}>XT-X*O!E<6%G2oyb7IWsC`?>^T9}phqLK;)SO!TNBq6hsp zcZuOmi#Oa$5>>zF=V^1WnYNLbe`wPn80B(iZs9>My2)V%xP6!cX{M#}2)J>A=@zsR zHQ<3*kGE!G3ciAVz9A+3rJPWBbXL>Ai#Q_mZBg(ZoKbGeYoc{lO7|T*?!(E;B9YZS zH95vO;v1$7nO#~C0Q6%WAwD!5@b$?uwnv7>iHdi&c;3nzUw1MnEI!-1;bD78GTMN{ z2X(5?6C-x!nf9zZxE1&lXz-#LVf9x(iTbbQkiv;WhtrsHI?L%izQ>8vssy?jly$FA zCrE#^v`-!Z>*A`Q##%Zby67LlJVfQhr~>CVAG$u@%VK08BY(c z0!2VY7-0F_22qa~6cM4!!UWd<5=AV~8Dgw8fWQe15Hqiy42MR=UlR7Sb@$k_hsh$g z`vAtUvsJpyU4$6$Qj~S_2IY&K!#0GT#P)ojH`ps%kQ5SgisvLMkI%D%KOD!y z7>vobGeq){K=c5d9&-f}N(W-td|?7%d6UZV=9#FQaBQ+@iZ3NH9uPR9FfB11Q(WSR zfyLp2{o$a;t-z1Tbge6&V@Aa%|?VeOseivc|%&$3nd8_7L9}R!_{$Z5j%&iN#R`(-*sr?Voc)|Xt#NNa?f%KiS+9sX< zCfB#Q_Vqtk(fsF^Y_+@`k2Iq=_UCTf|GAdy*x=Xoe1Fx=Pb0}J!@J$@+S_w!9MhB; z@IPQiNA>l+g)|qzr;QK%A*PNM$~s+HEIxg%#P?ddcMor1iZAzHUD7j}=xiO;{keQT zw54ZmGjwL&$NS5s;gOL_Cs%d!3b3luO z!{V4m)3cGhbx4M73|2}B4}m8c8YlyWh^tLl1SyK-3{DDk34Vy+M;wR5(y0@apY=&+HyL+RQ?OMEZ`LXl+y?GFSik}aKXigunfzIE zo^J!nDc(phUqv5B#{ekB%uV=O2Z)%7o&N(g?%ct$%+RHHA5)U){2Y+9hlxiB5wsfP zp&>H3%CqhV=H>>|e1?Ck;$_1SvjlArU`^YCKlVK$Gj4)R8ER;&mG!@r8JaD4zETkg z9rwm&8V#Ndvn)``D6Fs61VJi2>RnV$@kf&&&8sv+xAgpW@31)C)O&SL1TjYaki1eN z8@5CTJ`d_g1GW~)i(Z^xk|#`ak6!ptn7C;tH3*ox07M-eCi}8-_?1560Fx(~fHmRP zHj0_VeiZm3{tC`FjJ+hfBQr;Ci}mMY0y@Ft@}h7L0=prLDExc*%mZ1ilF(^LX2?HH zKrmxPLx@m-Nho00EEo50P%H5KB?fC$oZfj+Bl^Udk1{(5C?9U@EtAEbya4krEdw5c zTOv22&%LY-Jq&W-as;+vWfmExVS(a16prk5^zJUm8T-O@7lCTyiCLCHgeOr%NDWrL zf)g%VA_%(w0rxMemhN@PXx>+`Fz2u6#PDp0a0sn*f$yfnlSi1U<)UsV7z)21c_Mj@X z>Q2}bD&!W&fhOAN4;BOP=dC!SDZ0$;XOxbFpk*Z7y%}E4(x8s$5VNr~F>(-*puwad zDqt)(JJaJg&in<+&bJ=sTY_(G!poC<14}NqsftN8TA#iq|IIn8`1kZ#YDr2w;b2TD zy9TbPY6Lmpp5GR-N<(f@Qv}-r3*;&o`K!ayy|$r9K@nca zd|SRGD?wd;;aZ70-`ir9XVO!g)(xgoQ!#)n%I;pz_f%7DA%5xZm=eEFr>{j+BF8HwTj&ha|*# z9V1_k;hRsyd^G(#5J>$k%l`pI>H9JTco~siVING=^$YhNTUGhJ{vQyqe@|8-UDbB{ ze)i>(=cxHpLzxSELw1EqkGwuomLv3yZ0$T1ahmrV90%!P4rpEAxNym|GH=_T|wV*bm0=Zi}3J!+NeCzn4k ziF^9Ki7~d05fwC2^B*%J6sTHl_}8+js!V+Qb$S1d{f}lk?)(6SuoI^-wiPah*yUG{ z2EG*L(#E?Mu`=y)`h>Hminm3ca;*}A^)9;q`fR0=&_Z*1LA*ZXq%VV1_0#T-Ma-H9 zoJVEq2R6$i@n^hBKa(fx56>qtO@COKFvM6{xNl_P=IA{q97kp2VLNaHT-dMne%nbjb|1w5ZjWs-8_<^o>ff7!QFO(*}D_?Gr zW_Fdn8qb%Xx9Ev(vi`CK30t0;{efBY$LjO^@cHWZZfNuS8>bvXe#s38#%E2VB+LYd z!(L~q>$~1hCSw8T zSQ9rg|Gq7lq4fQIc4LGY2M!;;-X^$TM~u&Z#pa}H>pv@1Ao7{6GbTtk_RuOn_UD%e zo!@di-~6|{RpNfZBCtoLw#9Y~_E8nCnH&B3`CrId6~R?p&GhxHA>C`$$ke=|HHYp0 z0S|?g+MnzCOXtzRo$h@>eHrDqr0?n{@C^l+mmK7gpP)Nl&wTQ5wKKLV`0wFKa)(*X z<_SZJyspsr>E9tiVcT!B;U)f!j80~^ci5;=WNT`TEvdUZ=HbuJ5`AMI#*3kno04(t zViLalnwf1o%;{yV|3ctJmmKb_(eSLXSNN&a6}`@^Wmhv?QQbyOT0nASV(z<;D+&WO zv%%3up=)oQv7c^D8)RG_pw(Dd-S6UUk3EIiRwqJ=v@ zp(B1BG`CVwzYVh7%8h){3@322d_1JsgKiqFKEYh0x1QTUi+GEZB zGb5>AgwGG97gK#^YB=|!GCQX&glJz*hZl%UVT=au}NN1lyGe`CrHg0#drG$gA4rgea$S1qK z!}zCpMDLn|-s4XF%tv%s1&on_j~}4n$xL7ELSS-(;~Ur43*~#vzXhYCNFcJ{GYIu^5l+Dv#}5kU3K%4`~=- zu`vAn73+76*u%%MCDtOAk5hmN52*46dR8GGe79z-IEq|@)QuzDGr6u`vq*~9 z=LX*$m7IY=2tkOH72NXPGB$q*l zQ2*XI!UddWJdyd;yG>%MchoG-hg-k{X6s6m>R<1m7su%uwmYRr-VLM4tvtGWkE5A% zR{C*j@g_SiC_`bZXlw*sq+km}nCH$KP#!446A*&@-nxspBnw>LL?HM1`_FTbj5JUH z;#$HyEte8je^%{6@4d12{=zF7`yExkIa$d7tt{e+YX&=sVEp8^)O5UVnC1_t0C&o> z94Tc&c5^_InDnT^-9?&c6A?8Vh2XE>iOvDOc9^sT+oX0DuEP&V&(MJ&|+2UN;Rw2!Zb!OQG3V0@H`O9pK^QBT+4cFBc znjMKL&O|fqZl#8Ty)E>99v1|QxLa9-N}<4}tg*r8t(B_1yX;I*XTsMo?lB`V>N+tE z2jL`Lr4k(KuG3Iq_j9uaWvw}ZyS?NPqCriXQ}0m2Mf%s%b3A74FAa1C6(APPwFksB zyE5sY`|Q)7EfO!@4xBLb=BD+)Vmq_3J*07z+oA_}QMXz)QNQee01jF@oYltzN4Z2L z*$6Ouw(>B)TzUoQ&Fn+pRt%7lLw+PNrqkzpjjYwHe1^)!5P!Lsd-6aiK(~oV**=Jm za0y!CJAu5I0UR{ijc4dEh74hI@Q-V=hH&uvkZB6wueTBsh8$JX-9d9^N2)1UY**0| zOeFGA{ByhLZIEX^jo~5at`Kxg%w!#4-30>-8%uk( zCc@7vhsEki11j=UP#F$nVBpnAQfK!x+ky&UK&D?5&h7OV-36}DIm|I`T@a-a%vggh zmg|)%0v_ZE@oc6xp<*=sb%w*3D*QV8Xve@qXyU(zOCYbn%kx+u&tvcII{>^-*T2g0 z7(w!?@d>$w??HU_W837gPOFb+M{_ZpPYV86@z4rHCn=t{J~Ful!QKQD76wVx<?uQNPISgrboKu9Fa_uUOFFBtO3{ieF}D8gZDwv zotJlX$>1RbsE-A^ zWp5WT?c_|@zLpu+=SUwKDZ(fVXz+N_Gu<>pshE_;x1J1(C-1dFQCURtjOaGPKg#=v z0))jZ!*E*M35TidXTpQ9Zz0?Cufu3bqz&GeW5q%2@$&2yM3O5hgVn@{Cg6Jd9;c{v z=yNW9ITHk~l^M#?3Qf!CUJ&E2Oil7u0=7-C>#|bM(pg(;XeDvhC%hZ~3|Dpe3ikd| zl(myKh?z3n;0@gL3EKi&PCZ72v?U(ryf8b>6D-j$W#b5Z} z`kai9l;)9ZqxPsm3QOPm0uopLwDJAk%a`yp|3RvZZ;c%yp4C|lovGC+NyiIE2A}| zM6WfI(qxR_HAOXM?{yv)1t)?dgS368;*{zOJ3-mlhZ2GBp4GJLWk!2XyFGSW?#_Je zB?TI@ckd#iF;$Ndh~t08@AbINGFCyGyX-V-oe2#a_G%48lvw#6&?hAqMG|p+hP%mR zC>AJeS?6KZ2aMk_Y}J8SW(!?=dbSJ>l!;jd#hH}T_WN{gBmi2x%Q0CEK0BYVScanM zLYkGi{nD5rOix}YKrm6!bDV&hfEF&66 z0nANGl~O#kj&n)RDXzC2&JbSRmTiy;TpjU#ewYSpsnRF-#|O|ptVeXh!k}4P)1YXlwXhiX*B)|V2nJzF z3#%fW0nLgxpGmfBXXu)dC6NyXXJ}GoWa`teb`ZDiT@Ej-5V4YO%_j^(El_Kze9KL? z*oyh4otx;x3tUSZLWk>$!zTB!|TBd$-eO`Sr>BA}s#0Xtq|$>iOS zn~3=7PB(0g_?C&nbKjeIzc#h`Kd^r6GuJcpWkaf9Jngy{U&u1?&@4Y01Z{(JFu!}x zy`%tw)DRf(O>*k_H;hf_qzB5h4atw*&7jq%7SU#$ZQ*&(hjEy=qHPG6sf-c|>S1Rf zS3melKy&|2k5Kr2X*$;na%tK?u+50^cZSUN4Cv;o^QS4+!P)R)Cq-j0+4w3i^qKmE zK@A8WH)M#p71k&$)hvcQsUnxY_M?j{+CsO&ISV@ z^D?^QB!M%}`-P^#rvqLm474mHziQWUGPGr4$J5m8%bCZzn#kfZ8BS4?+pFQ}UWaIi zZG8MP%!&C|M^to#(xjIMMe;!WzgoU{0rxf%-tO8Tg!5Lf>Aec9TKXVH$7H=*m1&_1cks@(1(Jg6@vNv9|dAUJ=WD+ZLvB z9S~*b8}W=?qBgMdE(T}iRe&-!U$v6&6Zu9jpv>~&l4k0SV%WZUep4KAuC!(H-8Yw! ziVDqt@$o*>wM`;EhEwn0QO-kRr^Dr1mwq@g4k^28Dnig%$N7~~>sdA06aUy-w{WU_ zStQl^p&R+8!zGN@>UYM~PK}d@Ed!6d|K1wmNx2m*ZuMv=yI-O~rO_IQxG5SD;KNVt zx!hlnveMno;=`VbH=QuEGw+&!J!;}?t^q%In#y5KhupE-?7XTDUU?qU!dqxQ;=AI| zAlG0fXWmG#kc=I#Vdu>)kbB7hQtrf+V$Kb8vY;K zw&a>uN)nh#_01%_g4ueDw~;@V3DXbl;=NuO?iJZ5u_+!PuGrW~nA8nlC#G6CEG;gH zcgS{)e)=Thj7%+dPLrrmRG$;9ej0elNGNOc$u^y;*yVq6nbq-y5EFr}l5zGGV&A?- zqHW=ek^W?9eab~2rM-e0U0uQI9zWqV#ju@817j!cg?w*2mqmQjfizDm6-Rbr@U4G8EXmqlvnpCOb0<@o z$X()9l*Y=E2(B^A^-7^q*&6D@MsS4Eze}lF>%NLo-1y-}F;fe!Yf0iv#(Nu3nhPQE z)ph3GiBbKR;HjR>T6Gp)uWO@W;2T$JdxmUa#NA4TIFlb@A0oOtc2sq~$=du%Jk1Oy z?DN#Rd=e*#Nw%C^<_;V!j`bOIa8QwYZ;%==TS2^I)B?yK`s@7$BBF!%sc9crlvRX8 zYI3Tu42ix{cvHzbR^zlAHa`TTMsAk;rz>uQzlt$&_PK2qkr^kp#+M&usn+>9;Y#lmL+)Z$+Z8Itid|~uCrLAEN>*K8->seW3quWx7fdIW4FCFDTRVOb;#G?ES7u)+Xs29w zpyNNPu4r&^H8fNr@V@v*S>po-tFM2}!!}BJEt%}n3r0WARrnU!PW4}|*p{6;H2%V0 zUQAt`hS~R2`CH#KHsC*;9xPTp^L}@qo5l?f4>fN#lqP^4dx^#_6TjbcPUUKs*u>L$ z-x5M{*ctB!cGsj?$`8KX_D!^Xuw2YYu%6EQk5tpv7r4qLYYEs(Q}lkq&9?3g-lWfe z(V%FmOqO$9Z7%?0JJni5Z^60g$ai*^;A71mO~CdN2#peB-(<&`>cj{;w5Y}QFQ;)K zb7xNU3#6CxHbHM}qR3@U<3gWSe`_bDifsvFLzjgJnwh!4W)C@cFz=8^0*TRE)-5LL z<7K0RMR*pdAyW)j5Ogl|(O796s~Nbd$#sEr{l+oTIwCj#Dp$qK`BixR7HqhXo(Yhl z1!A8-pPW^t0_^aC;1HlqFr;a~Izo!Ww~GLIIvTkRg+ctROoA}7RPKOcrfO)9G~{b# zs+THLZX}WEfr{ai&>m3_LwQ-h#4p@B-y1tr+1cCInV@ z6>MriTHUj+lw;Df19@fRg=NqIq5Ru(eEE@H!lr<*#mp)o*7P}g5N`v_vbM1ndQ}Ue zSv*+!Y2(Hy-Pq4reQNpGvmSc>yjw>k#OL0VVlD{4DB7${(tQjlP?if3kbVBvlVmb1 z;N?2h{A+Q@MfW%pAW3}T>N=z$>nMpEeMehC;Fz@Fpm#;Ljjl-jFhN1Dplbtiv3!|( zNa{&0YMPg^Z4#pejGr-LCBX$CQP&TVhq`BM1S>!?vI^hh{bu7C}yimIH)|MJa z)GkZo?pY-`0{MX*1M#=pg`_W#M6{5nFaT+70vO_%CrsnpuM$bB1ENb1Sd`koVOui> zR53}h=L9DfvwTU!)i84s#@M0W$zWNHiy{~95}`OIx%WezM!~OxbN-*haF`l8PYRg_Wt~GF>{6!~{zZ2kOIXWc4 z&yWn7=T9g_XcY;iWmlM#F-tm}U9Y+T^gM5FK*4CEE6!yxEWHRf4z5-mGD zY@6?NK6zUd5Er9r9= z)w`5WEB4^b{H5c2O7Rzab1^MbJ1P+f!)Y z?k=kF`X(ZzV+oK3&1z$02$UG}<&+l$0|0?tFr2Pi;v|`M3T6NT#zayMFgJl+T0~#Q z+I}_{aD~TCv<^6tj^hEG_={$`7X&mD`RY1Q<}!fjb(WY>pdX)LNe~)$1F^haT3pWY z8ob9=8C*oMj{>j=R7e<*t~~rH8g)p{i#o4G12hKoF9DBSV;o}r=|j%Km%w%(^lBJ% zYa8(b#|9XzwThn(s$FoUVO{tf>86XN(FooF_`8+IpVt9&n0H4M z8G1}vSvZG)qiH341FU3`lE;kANfF7ne6@A~ea^xup*{p&ogJQl;)QVWg8H55biPz8 z({FBqDC)WstrXVW@fhI;h)a4)d{5|o$S4jQ*`QUX(>uciaW!>PE|$(}3Gf0fV5bGD zF<*|7q8854^umusFto3hUHtge5VHwjWquM#q*?@{s4tOpC#E|7!8|tLkOT{zNv3PQ zO?1T>?*!e0nO&e&D|*;&!%v1WW*Mu& z4RPaf*zPlO@|2&^2wW*^P%4N29KUYiWm}vTXLcS9bY;Xd&rn7B_zqzfS%-qkVksVwsriwRZd=1cp<*kQc!splR^F zSiH{pQ)u*-H+OY-gHnD$)pQF*%gA)lAyzD@A+KB4YyK6~fxt?wr~i_8#qn}=)zbl< zB?Zap{Bj+JKibz{m1HC})Z5rdcuXCG6*hbe(D5GQ+eGC$FlS*!_qI|7_KkQOnO6nAhWLeR9cF$e+py4aR>ThWKa}n3>fQ;3i_vC)eEk6fqtC zjkTlqk%?rhGH=0hK~){Yt9z3tyFMyy(-FMx45fdPMb%y?JAA4RgEr?ypS_L@E?DthGFc;2e)xuqk9}8dkhHXwwNYa1 zYKS2J6*;yo0Xv&BwdA0{T;Ith8zuD1z5ALp6bRGDdesLX1p9^>Y*NOM;$?uKDx2IF zXP5jcF9KtJd=)_8X74VvFQC_=SNz-jE^2D|e}MLl-*45bZDSvj0hzr-0ZW#Zcw+qN zYmV{DHu430qky%1_mNl$0nN}|BBliGvZu#2%dnrs`H8X8lCH^U zp&oJ)%l#1FB(hTr!kM>w{e^Lo$g!EiFE2EdD;xpM96nAKS**gc{UGvrv!J0@cM*;6 zqa#zP>ADkl5XMVTG)82=5YJXCEW=xPL@5CHGoIxDinQGe^pcnxTC(c&WrINrjW^MsY{a~#_`nr_zuBVxo_gk zOy^!t=oJQv0-~apz>Bl3F>}I&vhS8N(Ec9}*_jfkXUh^Ja}fUS_14sSjjm3Fy-~^< zf@Bs>vs`9r73iMg7#YoGaacfEsM%`->HN6=p6yWreUsD0Nh_25q7xM&PX>QsnDE%~hRuDY8Xv{PG57P4 zi8mJ~iWcIhba%{PpZ=-jSNt{i@+Jr}mSElsl-zWR$hFVSSq01lPK-^y``an3@bvtp zJ*t$BydE1i*sV>>tbf8V=?Xra?K1K2{PK|b6FzPE_nI)Xw&C=qG{d^z$>BTo!QLW4 zb?M0KW5r5)f%dtb=9NzQ@T~CK$z?(B9`IT~p@T(z2~L^wt*yh)#v+*(e`5=S(~&tV zZ&svL7%k;3%5Gch8DZ#urCj>lZ52~uI%-p&pO|6s$T|A>-o|~o1l}f94b`~yjhx#Q zOpw8h$h8?eVLL@lEw1)(l#m@?K3{nzcN1$!h#`n1ydMB2WT8i(|X(wnhQ$-q3jyZJkuWyhPe-E zOLs}AQZ3$@`3v0s$@7MLAoS_w2m#ZyyZF@W1sb*nst+^l8}N-v)DM#?i*U=~kyj1w za-uTbH-A{fu0kzKM$MX?IVH>>f6J`(ihs7=S#9uFHp}?8ky%+F&Un#ASuA-9|BSYW zU28pQ$o&qfp-A3zp5%9RnnLynjFr}wwwur0o>Q5YG|lpyQkCcI_E%>ZcA((#rram+ z$PnVLh7X$BY+9T>%FNnw@>)KPmhUKhkFpW7m|{Zm$It0p2wd8+j|nbsDNN8Dp1eU&mr#? zV{!N{i*mm0`4z3#zf`^;E4)`K7VikY5Uk_8)|IYX8X7h(psQ7gY2BE=V#;Wt&)F5K znPnjOWknsCCuN$a6!wmpW1m!l3hRFr>auTboR%;kDikpnh7tguafk<)^TcP`F8PCBDuaJ=N$)sKC0HU831 zR&N0Q08-}yCU+^viMjtgi(!}sQTGHFXYK3RaMo0|2gWHh*$AgsSnjDRdI_AuO4Bvt z1(Q{>+v&L%`sbK5OCFrQbdelW_5SzgN&Yoah%7Nz>xV;2F z(bA$N{xc(^4a`vW1DgNpj{$e)nx?f{JfGBNf$& zz;18sgT#VBUN6rg)9ejNobTm3^>aB#QG)hfLCKw0IrI>r#m1QXk3S-T}Y4bA_6%#g{GilZv%C6 z_<@luqMZ82LsIp3g)RcZ+Q1pcIzxW9CNdn(u05bZ;e&Z29%MncK7f)dy%5=ee9T$Z zLB?S$+JD16xGf3--Z5}yq6?MXg{aX=g5tJ=R!JKe-&5WTsbXDLw7mvF$O8@O@%1H1 zItCqivaFQROdj-dpOfL%k`H-lzot_O5Sw3TH`-yF7%;Y>y7vKiE$*FntO!!ZRh`uu ztsZ+#PP(2BY^80)ZHExIeK-~;UN#4^7N_MyXo3ciisq(=D8RW^*Wf(eVODd2h4hqhBlIxJg*cWtukylEhj;@#3PkSJz$;R-5M7 z^m7o%XPXkXjSuJpumWYxf%(bCzDLP6LFcUv7*OiJ0oPCGK0wlyg%EZ_P$%}~@NTc6 zuNVrj6R1Bj+oX4Tfc|C%j-O#r}Bpq(yT!w>Cy$oQ~#zcxHC> z*)rWtgNsYTVkG%Z;)Q%Bslvl#v)r8@T_gm#Kc*vg zEGKz`qqJb8?C_?_G%#J^F2am;xb6QX?ba@{ftm0`vKLUq&;+}J_9tTOio{!d5xlIA z7b{^b#RC!(gaZT&w%G>~I2nY}l(KbN8xYf%O2*i1GX*w)3jX%nOV5NO`%4$Qs^FfE zNDvsZxXdj|3(2Pkfh^1KfrO|6!z|7Q0;}Ri#(q=P946bKmw|(4=%RHH?ueNd_4!Wf z4kIS&3>=i~h72&iFsG2xbVcoPDY48qB@zx z*0A=-4H3z)VBxMFp<=e^1^qXaL8G}vk23d@VP?*EpetxzHZkb{_7DQdIe*+)JU(iZ ze#rNTwCoXdZq4W?!r9|BvIO`U%|0(m7E^sgw8i!E5=?|ehEE6O_^M#Pwl|rV%g-vU zyHS}rpj+@tFb%CU6vhe-R1A825dZtZ(jLD+mg_yv6m`07mN%gKA~BjBdG?Y*IjAXF+1GKuJ2*r(2WEz*L*w$#2=IWQgGSV_i zNVDR>miyY=(x7I%)+<}6!;|#-3L5WFxc^($ zowp`dPleQX{2xW<;>gth|M9cgn7Pf|LpDapHKK?%*RjaGxi*)Oa!D?WFms!f+;T}W z%&k;JNmRqAM1&;w6y;92^dY{#^ZO5Wb~$^W*X#LwJkT2%C(U^;pt3Gw&fa}?#$Ks2 ze7sxTtSjMIj+BuV&O&KHHYXxXYVlRXa8Q9t;^4UDotAPANYK1+YV5z9`CbjYzuhl| zPuESmv#nE7dcz&8Z&HT}PxTpU&zq{*xaBI3@>ppO zEpXIxDyNIOWG6U$+Km1-*?H}Smw=6OiYS&q95!rFGEP|ELDu#bbteJL%A-XFWw`0s zw_ont{D#(_F-X1dmw%p?{3xX)IliFAN=^3B>i+=Wwb;-)vaV73pN6Fnp&5tu%MewS zKXrzsfh#O%b(n$#gtb4NVqKl@I$+$_bRmg(>}*?n~Mjy9FJYLT}yr7 zJH_q}$knT;gucx{wYRG9^C7Qz(q_DZVfP+h+N=z9pyfp3N0#RLxydCj7b7|3@$_#ENncU zBBnjYi;-wc-cs6i{3anSYU_KcGol6G^ z5*{%oxSa2yWM-J;C_)b;zr!E>O~z&rj&g|;hqgdXPWvj>YI8vtvuXc^r7YS0v-(-^Jx-RQMi-o)s3+PoFVOCT{0q}O&@|21`BN1 zbMgn-h{m))cuKDx*ot_>TzHj6JkQcn^&bOhItfD@`Rz7YPhN)k!7Cq#^Ze6f7>oXP zZiOE>GS6Uk%&JHs353I7UzIs! zl@^|$3H`Z7+~qiC{R+@R*FOX>tvu1&!U%v~psdBKJ}=KlvpNz=<_mA1*kzPGg*sKe z8Iimtzq5k)rf)U;I-r1@~a~V1QF_SpG5w)_}{7{{-*_SGG!K zP8vTFHvdq0nhK;+3XY6$2PUV5V`RHt%}VmB>dDR!a)>bWRJMrE_$fXvmRz0ig_ylA z&FuG>yyD#sx^BG{HD$Ou@Z8XgCFo73Si>!Dh^qd<`pcM!D6YU8j>^XSBy%SYZkL?uy>8T!HPZN@9Qe_{cTJPx2Ub8q?>sa?|<^1@KRJY32>OTDzdFo^5}NRS%27G>5O?$Smo3u zfxVFNKOk^UP{5SYXSOUN;%P*%;?4{lDEsB$lLxN;=ZM`k!Wu!Rw-oeh^4iLe1VF=j zc2O^5-n&)S+&Vg}89$Gl>$kohq&Z8|RJ7n&>Nb7GDw%a^__gNfD^NQmJ;Owfc%$3h z&?}9*G2O8?s*Se`EJ4S#!4E0Nq#BaL^WCnTWRC56gDCZe-1?W%*v_I#()xxj_3DU5 z@(2G6C#84Qe{hem|GK;Ox|=P|#N3Ujw64ipvNo^8c@*}P6)CZ}Y>sxiN|3FAH}lYoMnOKd8a$aPFqY!T31GrJ@QPKbj~(TW~g96tZ04+(J-Z&K)baY%OWM zZiD?Z3yk|)jql0l@@RchgAYC{S>=g&M?6yep4${7|DJQE@!->p<58A%{+&v%i-8k+ z-6bVT@nX6?Dp)H=z&G+;9s0gCy+FmwIeP%?I{%tD^FHsllWI)>TIs)MI!$o`hohBW z7@y-=j>}(?(sjFiRe$}>J1GSnk^`)^UGM3ABg-Cr*`;GudiT(AZe6-;{-(b3d51er zk&;K8zWq(3Kg+JXTrp5Mc9Q3~k7$r}ZMBD|qNl=AkL1=^{QKW+rK5QfljqIV96d_U z|Giqm^3BuT8jT|<<3v>qlg7vNn+5--s-kZMbpcKFE){Lp*M4+nRvfCZl{n{F9#M{J zs(btBcdB) zSdBqCMdQ;62;6q2J~ms>L9_suGoo}9DRfD&Y$w&}tsTL)gP=!0yduTK!CI2Q#cDM37y zt)^&vI3L#t7Ey4f54Fn6bB^VFb^e#JH!P0!OC6d|J^^_Z+o6(o{CM{a+g=SZ{%8j3 zwJmFQ)Cb4To6L(gWZ)VG%@Z5wXgJ+=-wfIV+1aKYc880OPqaJMtV&Oz66+;sqkpy2WS;#_~o0K)YWX~8;i*Gtm)?HkYz|4|&>7i(%@1I~*N zT{hpzkma@QwVmnE;(GLok~Q}(frYS?orT)6ONsnEMUSKDrN>*N5-+O=h8U+}1%xNv zPtvMax7VPfo@0B`oI``UY3k5DGvIkYROAwvjpuV^el2>n?{g%I>({yrpq%EzmNeMo zs4Z8mLbTP?)~2}VBL0w<974FAc{!^5(Ib?=k?|#Hm6*7?{~B=ZU1Q?snY^5{fhvOU zdG%;ulg+cWePDrdP;XK81Dh><23Kq|S(9WGf~CrT3;no@)Y`SgWs@a3+E*gjEC9klG# z`{k1fc+wbLrFZ&k(*|=e$(hA$VeCp3bYMJGkWc662IP#@kqtoA92{H|{gSH&B>4o_ z$;)E#w*V+atz>FefSq05my>UeVUaN5?LZvQr9Fl^D{6-};{fsiU#!4z z33cc!_doos`uO`<$D9Zf@@r#AR~H{EEe=`=%M4Ni@uaW?r7zTEgWxt4LHgB8HVlqx ze+9FHW+fCXK}=i51ATbg1QZF0M-~9UJ*1U^sXrKa5blP6iQ^cM^hW$qzkjSL$q%i` z9a)g8Am4G-@`ct&0FkRr8NZ}n9_&ML622NMII94-@3sdB)$a47^H?YKX#n2mJPVai zYK?@?hUDa6LjU0YKNUj&ZkaAkDIB|Av4I3)>BjXgr13g9AeT^<4hw|bLBmaGbI+5Q zaPleq&o5Khdhhs+-cJTE39>WVRLUbg;!fL9?PsrMz`hLPPuBT0*!^2nSqdyXr$2rL z(vC|KWXdx3@L2U=4j2_JfUdLa8xGeu6QaOgK*J3}Gw$@1e7b^_6Xs>&(r9PC1pMX& z8uwvO$Sf3yjm3xWt)VRNZwJUxjAlK+46CLKI+M%dp37qFB~yYXqPQh4a15>yTzDCLNFW!u!X$AhH&qv?o#-j%{p}QMqFS+O%{2?=WlV&3!ZB#H zUYc#}&4O&wABqbt4m?H{VY>0t$|?$@h4{H$!3|!@7@j8d5HAi(=#|MFU==isdYDX8 zaj!DCr^eaITS#rlFRQ@wI-~7>f(PMJ@9SSZUT5Zz&$qUpO=#0RCr5>(vSrIf{Ap{@ zwI=>#32{bmi1CJ=U>|xNre?rNN0v1T)wz{pZ|AQ7A~kJFt_XT>`clb`9{M?IcJ${~5v`E-DJi zAH2iJH@wY3S553QuQ!8IMYGJ;*?a=6oMD3uFvJ76?yNu`TeXCPdvZc!=~WmAr^f{~ zAxy^U#si{GUqahVE_WaR9&Z%WN>NW3pwC>EZiDs(GS#@W^|u(6+~MB`K_LK&1k8PC zWhaT!3JV zU^H1uOWJ|crI#iPm|Z!ts$dn@DrTZ&S%|2J&m@GYqiO^zKF^+gM1k+BzBs35{iUPpxl@WNq?|K>tI8W1 zPh=lCiwTfOn?~|iq|=>WOu8hU`g?XRpAYft_y@Da+rr2f5}HldeqVT%{p6|I*B>~+ zvXw#YHeI-iAMJJhAB_~7p%z~%YnW!6DiLtWvgA|te9lKvbVtvn?o(es9IfXU`O*gN zOV__nTGpQNwXG{enb4k3WuH`aIcIMdc@c@*Q93c!Q(iHX>^e~xQ}jL?ODxiz$d&P1 z%&D?-Oi0~pU#|IZ>7D9NQ99Z)cewjxp$ncj)(dj4=z&U9t1=|8-1}^5rD(&|$_gc3 z=TpaMmqG_Wr5XFZC+-vMTGV7$go8%##6PkV=Ey>^BX~@GV<>vLR;<1!|AD0^DU9o zf(!@N*ySN@u9{aBn%+ZbNb^qpf%RKELywq~2UcuI?kv|}4zOqr8fEr<=SmZC zCNcUWSj@^+I)L9dlTG46E^x8%9w!9=X-*(5gR@D)@XJe^;UXC`%M{+%8}ip|z%lJI zehrY!mYT(*mA){(jVZF50IrZvAlW!`1-&u`B#muwnHdIiQK8bs1S1X+wz-Grh7zoB z1xcvXCBVie5dQqg27114Mc9@H%#v)TL!=8prVaN30CgT(L8&f(VZbMX#}u?_@{F+4 zsNkyEbyfkm<#ucYUE>UC7F@W2k)wx#*u~fD?zS5S12HsB01e^yCTG704LohyCJCTy zKWVH|*c#hf5Zor}W#ebH8CCaibb=~=rvd< z7_&36xd}Jy1P;BeGnxM)M^u7A%o>CFnN=+eyxbJl9=dJB1ab%=S^Z;cNKrym0t;^? zNRp!hw+g{Q_y2(Wl*KMER(C5I4<$6nQB%owN#1kZsM?o%T`=C3@DXrKd-+M58G6^8 ziGtsH1oKnT_u+^Bs1Gxu9DW~_UfI=t_z@tc&A+xHJgO7i*l`O#9!2L>xU!XqkeGfl zEA{>b6vcYgHIp^Fj2LA~0w3A#CfaFIVQ|AOkQ(YNTsc_1M2%Ej ziP}lAvq^$ZHCT%l5UrW{D!zYHU;-)qERo}E;>(m)T*~r$J+(eBQ=i+Fd{*G(Hg<bfX|M`%bubhvu!@{qkD1RvXz#{lzD+W_@>#oxc~Oee;@y+q{&j&PAoH zu?V52xRiOzZ#wJ)E!&#j7GCtaT2PRcm{WyC#ivf~w(HyThS`sOs93L;@d|zkQ{-@7 zvwNXD*7?lD1~-$-zE&!yljoE_3SGqyKe&IXS~7=qN4P4+v9`D+u)C(Rri#xah5FQM zBx34h%!Ed(Aktc;%IQOXME%)9A$vX>;*C9B~NC7NeelG$7knMw;jQ*us%ZLLUWLo5ij&Am8SE9T@@nKbXX7Lr{GcfXTv zYS!W?8j%>z+*uRr$vsw*mu1^Hf2i(L-d#UMjkLmKnu*lg&$C~Tu|8T?4WV*Yj@ke6 zJ?0Xfp_1pQwnVTC?}^w-t?j(n;9(G{_Fr-xbK%Mev^L*g^zQ{^^dD)F6#;c?lXtk3 z>96I!?>1VEPCT_n+fa2^FLwT%`CFR!t%m21$du0S_yA8M2ZzQ6-#AY6y`?lWaqq+H^Q4|X>G2RA6-N4KNNg$$XQuT^uf39KOU1njsy9$SrIe!KdYvg zhq#@_PpZnhlXuBh-`iaR~+yJvrHN6uPHEjS`k z=c50D-G$IU7US<+Ul)s4TKo6%7LF^wz4u!qwEAtJq6^6mYxU+$;OeN7cTLBGY` zSz^nt81}jKf345J8_m!DOKez%@Rc!nheeQdl&p;vT3!FehgqFzq5W`%D~m5IAy|Qp zO>Un5UZ$+h0)s9;==&U!{HR$jh(`M$DDm&HTq6NoX8SM0P*BG?@68)M5>}MyKqtNe zp4g7E3#vmyZ8m1PQGv4HV_#I{grx7gEl@;UqF z9|{D$F6*PZqY!IVFnnYzY!kV zWHJN#RhMHJsQbP{e}IgZ6)Gi8{`g%$;&VVCjxA3290Md0h`6IQ6nQh4hg=)-td@Q% zbi6ds&Pr*(nqe5n50z5v6j>84_FWTJ8EQg9njnx^31R5H>1nDVDVMaElkMZ79wd=AFNu<6=yufEZOpTJeg4f2>ZXfCM$C}co?Fm8;^egf3S@ghWN zxn7f;q=Rf-wUY~z%E>C-lizL-ap>qJq{DU;4d7lSnfa6|+fUc&<+qxosj3G;UbcsY z{67FwW7-abW@*X8%awu4ANSfs!QF7B+udm*gF?>VRDww+HM}`czG>0kItFD(L~Su- zUE-Rl;_qB>uh$7`?W64QTvqBx=i zZ$gpl;rnMGKu81E(Vp_o#*+-EkNs_Mam~-)?T=(BYlHN zw4xL39`{lbNcDX~ykQqhKVuEV=_gg<3=h1`SK3faxjrcjDal)SN1+aQMqgc_-hh~c z@cIUOe{mY~F)bLT4DCm_%r$M%(0ZaU${~k{=VXOwotC=)aN_KGjEi++NFh+&3 zw_OpohUo~AA!jtyr<9ed|3ITt6w{%+Dy?y4F}f63qCZU?y%)j2AgqRsqUlC&2iS`n zhga7zG45+XhNG_(~V>Q`4CTF1QzFi4S%b%m#LB)o6KKQo+=B?DR1HG_!NB?Pa) zOY2C%;x+wr!w?_TEOuKwe~F!=qo6)s<2fw{P5Mu^ndF@$X0A^6Z3#!fMB;Ie!& zyt+>H#y!3_fftld2!%B8T50sdJbxuBHiO8&Pmn=1O4hfovU)SCS0GyNq5)xP4A7@o zjtGo>UmU>TV|CmRKx&{JluvjGR=fR=9gdbt19=J(IQ%d%fFW9b{Rh5@6z_97bOFW6 z2SCVX^yg5rkV3=@_#VfH$3040*Bv}OZ2@?$xOefhkk7*)Z;IS_fI)$am?nJXbgY@Z z|bulO>ii*Hf-Aw*5bRJLCV<_pKWOj0tmxz>PVR%2XV(~iQst#~_Jy&(c< zQ5fWL0dy_x3^zyd!=6ltwi%zqHeK{=!Z~4H%-7;6u2-u@7#?`1VGQGN#DAvBTZu;D zKZaByaIY$6hCnyO10*o3>sEcU&Dyk4?8{+)d}G zgp{kzs<>Jm;^LI3D^c$y>ptFI?{nd>oeZZbQPb}oRv;$ayDSXazw3GL_gN%WkuA=?+p5KM-nuue{aTp zyD0MVg<{;xIvCyULKD zMK9^gPg^@bP@d2ns+tb=Kjc&$(Nuo8u>8 z(1f|b`d$M!H=6V@+l`cSTCFFI)Lf?&CO+Hwi}kt662kW+7f-HUZz0Dl%qJJ;a9Y=7 z?|YxAuXaFZ71$dokT(LvK|NSTb@8`fVL57ioic`%0bdtR7_C+vxkvr)M$uMd?GL!@ zr3+XXImY5mMH$*p@lxI+4DGD@TXl|%#e+tjk2;GeJJD}KR}QXt+1=4=)^e~SAIS9N zosjR|*s~ElBBPzY|CW@#&~zoO-008x?{^WyMgE!B@5ULh9rDWNKL_qwc1+-AzFraX zY1psmZp-uAeAgNH^Q@h_qu_nzS9vOg}EiexPPtG(>G#GYuqv` zR1{9z=CVqdL8Rvox04+{)Std8e6RKV$SKBOQvs6|{;08|Zh3hE;>H8-+`$JG;4m2T zVrU$ELegF|!S2Wvr8Pk);O{E%rh9@f>Lf_2u=z$dE|`)k4zyx~&6I!x-+GI6Ufhdc z@)%Tc!5gx`Ja9h?f>e*9J9WRE0$0C`z5zD?10`=ap@baP<^Guo1qRQ+ee0W0=Y2t> zD{ZtRWpP5E3Yjq)!)T(C0Q~f>whVNGJ3C;{%zGFQYRDPuQqP6C_%_!7=@nGIdi4s> zXc#Iy%vDe0JKmoD!WZc@6%ardA_BLm$tMB@d85a$j?!$%J=*FgS<68_58*AESQHev z2_>)X&!CvDN2Ug%K@=}e9DMPhdO;e&)8oa%*uJ!#0%82(w~#G!DBq!bduCn}w8}V3qWLb66cv)qmo*t{rlGgn(EwRl z0YvYo{XyL_o!iAny*VF9sa}+)Uj$i%+(NM0I@6sL>CtwuEze^wvB_XM>8Gj)wb?wE zBST_zwfuJXDdb%|Z)Bv_DF4i|8M-V=>(EDVcJ5RsySs|TYY^Vd^EA)Px0Sv5Wu_-= zhZO?I^`{xMMZwd*I4@q_Jjr#UerW|I^65x?7MEu)K30-;!|~rF*2C3{$~)E>P!Ca!#!JQ0V<`FIF`p}@=fNwg$in-Ipg463gnez?h5eNCH! znDS62Db_wOzV4a@Y;S3`8@p(cF8U=l2O=fxF@haP0% znGKT1^SZHN(Nr8Q-wHHRs|-37Y|%?_k z38JKXK;p$my(4SFi7SC>kVCHrpcw^vaW|2W+O>U5J<-RDm+~Wxdfx076JK*j+)%{F zTP8!?xC0U2Y8I~MhLucqO_|y99g{rC&BkM-B~fGYIo-y)oXQ@oHkq^8OQQGSJT0 zqH#gO`Atf-F{hi3mk#fmLC52m@Im~G6n@b!+CF)ched3_4hT2W>*KIP4+%jsi<&uOcVHBs&g6{FS0?uy!^G(`QS&_>N$!TAx7^~)yb%x`}M{W|*u zgWCN*_xKyjLvT@Bw`%|TD`p;>yxiaKGiiJ%SOCf9pn+OhRab5OgS2s> z<{H7}(^hBUn^Xz@6IHcei&N8cQ@$vpTX^%|xh^}b$eq5H{G;@y42*N+oUf~muTaj@ z1ZObK$)EW{pyHzW`jxx@K^tfr+OOyKj$+=E{{a^sK4IaSs{A@yI?cYO+<3+Psn12` zn)`!ZY`FFGn6Vb$m{GW#_sihleNB^i7H~c>spsSEX zy;cjqUV}Ky(VV9(r~e3TQk|KpDpmuI^Z9tp+ar92-Img)J}V-thxu!32kkpII3 zeU3vxPLFS$PIR%Y;Bda`SX#SGWW@L zfSSxbto6TgxPpDOz*!NCPvx%|c-!NJxN@u-_fu8I*#jzJ^@mtm=$G>^RDmdCPnK)hy#%6wCQe)^tXZpA=& z5WzW5^enLlpKrlxEMaFRW&fFY(5D;er$_;jXHzU2Gft&LqK}4c|AOo_-DYzpB#Qrw zu!d0Ki(eS@c~ZnAlSPMveyTY_VH~CY*VHGqx6^H~9KP%osEADo_DNLAQCwE>eU53Z z^vnwn~_IP{;oDD#L_u**c7XcnJX zEZf0}jp2?hysKOJ4A1}M_`Sm`e2)k*&_aE?brTm9X&<0Hml%dDQg~V#j4qqukBehp zeLLR5d+2ql6x=gGaR%yuc**1{bBogy_A9QZB_~D*Hpka1a}@9I{2Fi&cR&^Iagg=~ zq?60?itodW8>FDTg0?@j0$m0@at_L6?idZ*w6bA3B2utPTfRL;FdiN=O_kuXvk&PP zCaEs>1Lo>3SW9paP>JGxa&-h%c6RR7>L+Nl3jZXA+q(ULeBlI)i?7xedFvIkXwZJn zt!syxjQ+OvdWENlIX~5bQJFYD)OO6o$%Hl@O#{1V)vk$=415O96jNmB`1 zGL!_td#S-|K&{CKQoA+pl~}MMbi(~jL2O~_j$9%CG^k0NTb?`w#A%eA{hMB^_8zn2 zE3B$&fFDEBi4Dz7eD8RlgCCB{pR}tX>o*@Z>@u+T1kT0Hkkm{>z$io8bCci&VZAVe z0@~9oljm#Dbz!ah;6EKIM@>l#=1EP^Jf z<8l6B#~MZcWZZZQ{maBYjL#R&-An`xngTeGMhqG}2KIE3#|Qy~;DA3gYKtx%iZbK+ zj}()i$W64Nmn)|kP_AY6XbujTJQH64-erlp-ky>aZtOtgF$nA#DJHkjU&dvrF~IJB zfCxb?ni~)#G$aJ7s;XkR6~YJNE0%!d+%_bNb0WcEAVRqyHi|({!yfqqQ^P@^NLCG$ z$TcFWlVd8`w9*9oKopmrV5j)iOn_*=pG1i*luIf<&pb9CKfEgK3z&10z_HPjvnJzH z19LH*=&39O#2_bb#@_bPUNDlJG4X~R?)I@8l~U6x3Dx1TYZFgc>=yi%ak@^Y(lARM z!1A5D^GF!%)e)={9YKjwI^_M~4nXbwFK;5HKQJA)8pZHv{ra57>;aMz9C_>(jn`!o zRMTpLzj^k(#HT#K@gR3l54f&EJNwkQCJ4hCJnnmVxT>6r_>wS#Bv+@J`QEC{Y*B7Q zs0o7bMT2cuOwcGf3(^o$;=^0klr{B9qt}!Z00Nvh1W>fB)v5ZF%)RI|teOM&WEo%e z*s)HZk~96Aj8f0pYeoI!Fmi~|tP}u5{_F7k`fV5@{?9}LMhjgM6XUr=&~Fu3#nW;c zC?bn^`daXjFC)5ugIg!n;f`F@x0xLMy>>O5jB%=HIs4nh$&$x*L%z~RY_6I5I!~lC2BmbcYV`l`g~>SkP1die6$_5$qguu zGCt_Y%Rcr2I%5e&jKq+GSxp$<>j5EeG~3Jv{a!1iEBE2?a&aRsKyQ2jrjmXxNkZ>mr@gisax3sDo{&8H5m{s4H&J8HO*0n+Tv~xT3UN5YgEE5m?2#MZg zh;N4!B)+K*NUD8p510cs$=r6WW(i(dc%JxHd@I(;O7HMGx}3=;ydc=VI!$#JnkPnO zQ1XMzPbkzu^AAOa!Vf*}8E>=3B8$$%H^_ojgu)a|iOJ7eDz=z~OqsNureaC;vMLN1a9sM@E&J}HhIJ^>LD&L1}M%-#FFueZb>=jFA+9ov7mFHSnyVK3LkzP zlxaY_FWyiqeN_JP!J@~plE}iF!{r|JKVENGXx|!`5#>R19>AJduJW8+i@W`&>}vat zFIHx22Ug}?&VG8+Vvy$u=e5c#^|#W1cR+h3;g7^i(EnzD+z_jBBmp9k!XxNblt)*N z3o&5o#QUvFMKvtcm#I^K3V$D3yz}^y+FsgC%F{|Mm8k*IN|pGKNeYI?Cv@t>^U()V znBeM1@2AACvy+Qx86js-1bbet*VR*68`dlpAE!#b>t7hij|#fVth(Y&n~GG<(p-Oy z!Fx({#ue2ql66iB>U2@&2B-h-Te61q6{*mx>P$B0ZE@yK5i3DQv*Guyg3NE89AxrQylqjk zA-UB89`vm4gEaxGNIOmKt+O7jauwXs9Mo32XiBsuEJaG2&D~k`b!N(^laLC%-SfIT zhk{t7suCj+B-Fu5ZuT5;LXtg1WQww{rAtc=$XxI0(vvu8&5LV2Pu*Pbovb15pL<$= z^-H&A(nra$0@p%SB^4|C4Prp%LdO~YSs4Ob>y`N(uiRrF*^z<2BAkgF?V#FRiL#3& zQPLLQ=j3=E^vd|;s(LElRiTU3U~(gM4ivUuu*!ITTW$+hTdHO?UX% zMVkGw(aH;I29`CyDi2+=vL0C+x_Zbr|6ZHQf`cDv%z?n;>n(ln4l_}!+HL~zZ~ofJ zGY61|rSZ|4_VYNysdUW(hx+(-hy~>9$sb1lus+HfSy;YuWy`1LUHuT!Wbw!_aN*o*ff(prz9QH zz&+yxsP!DqrxT2PU^EXrllPM7zK>|T_mc2E?KQyib-^A-5M-q&r$4)ib^~Bu2n}_v zK*6q2Hve`Ya!j5)**}8aLO~8UAgF@TNeh5#5+B#HJWl*SseQ_uOYNIfKzlUq3_h#( zlTi40`xSr>XHtu~t+f>BlXZp=s&aS$FfnnE@jw(83&nDr)4hk2NU$$SG{sUwg6sBuN zw*h2m=L%41@_mDU#)B;(1Ss>%98eUkPHU%Wj!%iQF2R-K=K)N^SRblXFRQdpdS{OV z-^D}N5>EK?6{@QEmA|yyOJGP1K-=tw!rPkzMG#1?x?_0%Cg1_s_WJ24nhSStHA()j zgb9_k3~fVag=nJ43k&=?BL@wa0jPcgOSRupYt^a=)Uh^+vw2|>MurT`^h*ECDy7Z~D)(@^Z>42fO*l`kRB=`f(AYj;Y_V(ctAOl|}^_^tb39h#h+v6B>l z;oG7Xk6{D?pF{Dy{+JHE`>egrJD~Bvcolp0AQ^v*`w=rvp2vS_P@yIM6$P>KdfkMu zh(VW83bq(?a83NbK0(1SWIc1%Jh6X9;*;emQ>|phL3}?R{bWRJm*I{8ETTb z*Qvr@*rb6s_~aM9Vt}k|e<<H zhOlx2LK;w2M~LHfT6&aq-TH&|-^xgr@?~!aQs)}Q+x;;k%%WM|$)c;Y&BV6)^a!sN zPK#E~{hf+Lj+B$-niTiC7{MCVTCB7%7?(ULKcNkcFn0V)gC7tTO#?z%CR)Pr^^!t` z5JP|QEF2H;)w+R&P9+^^~ex>7(uB!JKiJd}KV z@=YaJssQ}%fEMR-69-ra=Kb~aF8xb@#UjaT!0MMg*T1UoBUnKXH{eik?D;z7XJvVk z?(tP(W*K5}@&nL!aq8O)E+}|PMmo?tWy{5aNI_u#HSbjIjS*4vey{pPoC=L!B^ypwQGOe4@J@J}?)FdX z3F0|xtPD;4*h{V!xrA)^h- z`RU#AM#b6r+u+D`)!l1mrFHJk>-S;3G5+3mMNCpL*dyg3??7#t2Ci35pGoZ=iNPL^y7U_RqlJ7+ zi&MXl=!no%i`0HtEgvuBa8w+5rjo{LCQonvs&id`7`8ysOQ(vR1Xx<$?E z_T}YG)WOQiBW}-c&85!r-pfi+=9+Gcx7X(dcjD`|56kW+xvGV48EQz~I8&hgSu0h~ zaYb5AenZyEI&8w+n;5E^K6YHK=z;D30KBG5rd;|(H`JV>V!N!ugMdVxPr8w%kMotR z?Hq{FRvD1N#^I9pw|sMTCdQyQ4n0V$bobKJ5MT_QdpDeN?PZC5YtuzToyZaeyO4E) ztlo`&lbP@B(9kX zb+fk8*91@&OvCN8r!u)sE+SP6^?^Q4__#g1z(Sz(5wGIlCgGZ|G@*ete%I1aYCcI! zhliLFP?KPh0wF23H#C`Nq-atrf7DBeYZ#jOkc0=<)2#{K0ckjC$ny9ck!T}ean~t9;Vo2+2&uERBXvN7xGK|4*fVh z^=ml{h1Zjx%CfRfD%qD8fWaQtQj=*Kp4&8eQ!~ZPz0E)g>ES3dQm*N?M$T;-?T@wI6jKu$}25TW6Ed0!q1e;hmr z@Q~F)3>c6|TfZlmS#G`o1BxpL-2L=OZbW;iCMIyhC_j{Pu&bew-dW2PuK-hWP6=WM3`&VimC#E|&# z4=MDRXR`upsHlY6G}DmNTF@-E8zPEdUOfD;JVCM3eGrb|_r&X>q5`q70(lJV!88Gy zV)VgOU~?-O6Xf$n;`xSu>CqDn&t@c%Ns-iaVt|}G8<)m^HafkvKfdGDk+ak4xOB_V1USw-8aby0J*Mh`rs3;ch=V|(1>9U$N+iwx6D zKFu+15YJ{JZlfmj29)nQ!QYNx)csRG1%Q6RBa~^Pc(Q}rH~fi3c{z(6VV@kmG11gG zriF|7gzT=QA1>uYDnzBl5s`9hpl=X{1tyd34O1&yC=#D`CjGkFU6+Oeir+x#w@qrd#?Ck5Z13HM@zl=d0WMB7#bfNv5fT(C!@g$S((GrNfGQ?7`$0jTD z*V0N9n&2nMJWD_{bpNLC90>GV$KQZIYITz!$nR~XMmOR&5RPkWfDN{JsR1Q6Cz}?X zI(nMSAHCZJty=U?<>jdwkhvW9jZWhiYV)T(VvX*9Bkj-$6O44*YS@8%_CqeSkWZou zdJNEjr_^nt;U-^n`hzh0X?z3Z`6nCo#M%$&kv5Z_6=1Z5j=;{?)vrPBD)9W8=f$S3 zk7wg)kz8|!cj!9-;6`0wma5Ix|D&o%qozfJ>m1R&hy`IlT;p^bkUJ=qxFFnN3VtaZ z#Z|1}o%@(exQSr?>+Q5Q0nJcPCZgZ>OPdYO9i$m^gdx^OLWA(%DAVR2Y$X3ULzc`5 z?;SS{6NkAkq4YgxxaG8)EE4kCl;IBVL3ske6`1Ks1NSEIGCz!(W8GJ?u1IV|8ty=T}b{sED4da|&5qo+k zI2l2@1BolUT^5*VuD>vB2Dj}oX5&$n`%JXe>j9?)3@f&yu3iyyzYZhCo#dAhYbjRT zC@z&(Kj$O1#pP&lVe3ef>)k(I61nx}K81PgJK6tqMXnwa(*Jqttiid*PajkU-g)>g zdrVuUCjVyJTIrR`KV8llTs)Kf72VzxId|3-g0!PZ0@x!T9TXP`{;R&|%X5K8oOj1g z{k}gF)54(}7_+<4`NRm?`z*+U0debt~e5-AdEdkhjoB$YY<45(kSBu4(Q0 z;z}WU@-lsYfHJ=c5D|1DRU&^$AxB`@-QHeZH`PaNW;7#LM$v|%Cw*&8;@mkg zXtvgQ$|ufer;`J=GjD2B6yM)pNpv*u*m5rDpi=s&+(X30J1|!j#W$S7w}s{6 z5mR4qZNB*wOPxbOx%JKend?}Q^6F}be;iKLbnCvw(;QcUj+vsk+QVw^aM$pivum`i zRk0d2XH0bS7g!dANlkbiQx*Rsi^L{D`5hc8k9OIX8;CTSl&Q`u_hOHRnzqT?*Sa;K z+^IB3FrznW?z{(p!{NStj6HCaiYt)6=^f5ucU6s)*~ux~$+5 zq#)TO({R=msgA(vGN)7x2lEVl;_v?f$42jVowy_K#&-sC0k`bAHew{fkuld%QF`H% zCq7IrZM$ZgNnL*S`L4pnjN-68C8M}wBKM!gC~Uv(_P%cul;d$|@a}z&q9KX1%IMab z*Bgtc)AT&;dmp~NI5?#AQbMaZ-wqJ!y>|U?#A}5|9XXGVJbYF$ai0H_tm=E+(nnQ? zvG+X9JT1N?Q1|1@wkdJ1&;Ifnn$OqBRa|P=Y@`)Ny!3dTp7TBqI~+_MJ;dwsl&iEb zvtjs!y~RZ>sc^I;?po=i>M@e=hU-f%eX6t{;Pqrr`L}R)ib{vY59r62LlnPS z*5T23*aPtKJ+AEX!&R_x&&3dp`ZaayM`@CUFU#)CLgrCJ0d=58rI1xsE%k zd0qiHU$&L*A3w>2l2W0f*+bM!559d$7FzHVUdD4K)y@~We;A?QPs7?Q2g9KKL&NN0 z9`{K4DwrLIKw#HD#t`7UX0YSK8^?vtw&CH5>Irq+LsvGFYFC5_x!&=g2+;PGCY09z zO{+eY2sB7A5I+hHVmTPTU5-6W7b3YSzJd~;@B-|l&3u07j{q6=(vZb<09UFx&ucTW zA1eI#8_4isNvwJ&+8f4W>c!WfGo#`tKve@T$KZ<1Ah=!sShkHqV5V6>MA~moBo`pj zO!W4ViJ-yR;gn@^0+DZm4O<-MM~Y_Dk3k8+*qtfKmmvvI2reW(8*GH<5QJ7KqoY+A zS$;fuc>wn65tUL(Xw!J4_;&OEC^{E^rvERFe|BSY9p;v3n9CM&Dax(Qt<5FOZ6t=$ zR4yr(_{!XeXK~dO@7Xr@~;XxIGXtcgLaLIE~BwpfKvC>93*24cCSIIWyIP2hW#qcJJ z4f=vPaTg|(6HlI;K$6GVOc+l>M!Z`$Iu?n06%Xy|$f#xt@+&HrqT3-a3J{k5*xE!Z zg&v+Y5jGcQL|4C=m8D@y4C2R~nSf~*jfkfN%zjuE z%rmM_-62BW$Y`!W;J9P#1V4kdX6|#=_`7X0w^-AVbrzZYr>?jL^A^aJA-bY`TbnzM zFM(a<1L-;SsMoqR_OYOG*P8~LfJjVwT}8isAo%B2rsy#p-WA>wuPtUyX4p1S=%8%t zj6q&KgqLC<0$8~>wvm;GPF?|G)yznjbhbgqq(8{&g$9a_*gP4M$0Z7YSeV1jnoOs@ zwnrwGf&V7hX-M63NhQXwkCFHr-Yr|p2YuxAOupc?C=Q5PwqlQi;ZD3_mjK+^neyo| z#!V{LO4STC(0jI;&ynOUT?+kB-o}QiYiIdnb7BIj0Z?$+*_fao;r!U*pqd5&vfgGLp8yC4f=f81=fb($$p z`J#q4Jv+hYA^ql?ZTPQ$)VfxGsg+l}cVDxitzP6**hkYAzBVh}S#VvOtgxO!N3-^1 zDjr3N&qYq3bYBx5NO1#{)0CsmU84t?Tj)>A9_AYYK5>R31-G*2=+( zgU7ErVefQ(!ekgOtd3)MSc8ok>Yn+(H8s-s{t7?35hoNP9rjpyujlLIhv~-1rYoIB zY41ESPI-0OK?~ct3XY#4O5^wHBg>MSs={XvHtDF~vQ;s?D$(SvtGRX87E&l7Qr-i} z+yuelp4ukIZz?;d;wYI8nhK9CV}0N9U)e~{9;*M?Hral8%h34inqkCyy>%()#q6O0 z0<}rOy}1%Z2fwrgL9-%S1l+v$?@lkNJA_%wd*u2IP7~Js6khpi75-C${h=c=jbC>? zt_0=kPY3YK9vUhLXnL(*R`pR24QJ>8R79Q+9gMir4GhT=zfq+aqzx2F!!la4Kuo1cJa|b z==l<+cQpEK9;z?w*Qg2V&Z)be^==Yra!&3WDQ}%gQEehev%La3q|aSECzokYO}Tw< zNcEtqfzGjF@zdq;plvQWr@qq98__EcpzwznfJnuAP9n=!|88+1%iry;PU2__J};~1 zJbxZj>cKSf>)jV#4Nb611;Fzk;c7d?^q`tcf-l;sv2nt^8nGFh+g%iey|SY=v7*4C zz5;>o(36_(bp{}n)Mi~`UCZ7clMC9zm5R2P1W3Mh>mY_w6)Pn!W)DW6uWiND10gu5 zOpA%**(0-x^{0uV_pxcko3W+KlPqTdKn9WoF!u-eg=&GMs9U2Xc&br6D6*B&+a|IR z=fy7fR=+Iv-%v2Btm<7W;TQJ8}?0&A651y4DZlM)1V?;#R59`IeL<+rle*KtdU|^$vh4SW6&t~2U zZg-uRH~l5mg-c5xQ4D3BX_!-0eoB@hU9CF`#bjR@LK&$;GwZVlk4;ayQw z6il@ig)|d+DN2vN#GC^B2D|~TU}$)6U=yv*Oe5wbMNMNM&!#)>jun`TE(;HGyM=FazYj%4l=VVVNBEY zG)#Q1I|SVAM2Lmo+R5K!G+wY{$$>c}M8IK&f6E$4-@eNp{AQV`9~4KvH=`R2bvg zUp0>rjAk4rkAbJ9xFJ4n*{lsnx5ZBxeFDyt8)dVjx`dqB2)gC*$Plg*@eUr#4rK;^Md%5Q#nj=inSt~6z z@=qW&58&elk!Fac=z2{okFc2OcrPMmkY6%3=RZKFOHF+!#;Dm9FSG=PQs>XVZ)R8D^!f*rfN zO`@sUhTEPRA;92TIF-la)78PU)8_9apLd{Yqf}Nf*qF-Uc2sbe8%(c2b~84XtmXmm z1G2+N;poE|23^gWBl3g%Y0boVjipVr-EzA+Qq3yyD$G9AhHW9P?-cwy=60QhSoZ4Y zneZYLs);Nf{6lpQ)S7lZBV3d+6GBv`TH%U5GX5?{d??6A|MofSqy;KLj1RIek1LAZ zNgnHt77mlLYC38U@t z-Brbw`k}mPPf^z4ACvPOO`eSj-0Wkz5~2C>Z?}^yz$$SoJ^Z_e)p-un(tL9>p~@vu z&wF`Jqk?!XR}=)Gosx8Q7WmUO&s%RHDx~D7WV!k(ul4nCkBok~s!f)AfHmKn4nK&c zZc~f5;~;}b53Gqa_0}g=-Bu^-K#NXQjcuPgkd)_)3vp}m-XK2h!^;L>+ zod=5MrEWU^KuKmv)oDzove1*Gf4&N@-|wxb@<{$%zJFTRIq53Ankh&&1AWG*PeG{h z^ziOI6T3oAW!9;84MT^}RiY*tu&hw|hMTT+xp+SQ7i(X!-RGYY$_e^m618~8f^h0! z{BTx8O}f;TcVcB8#wqdEh>NaD_6x?k&bjouImg}C4&^KKjdYnSgu2aQ?W$$U;CGpj z^oG9QO*U_?pM1E3x^EYFX>sxc+x{93ImxiMG8S#_WHLv|An-5c<68H2XEK zHJLj01V58#N-y}zR}}s@q~oXL(f@#7cJ^yP;3i{x>vb_q_a3yxBm8aTrvbq++c-s)%#g?n*n69JqQp3kI%R7}UbEL}kjAs6r)^7Lw zko&c-VU!H!)-3c8D)X?i1reUdtqQ=h>`e=}`(7_XG_nhi)5%-}fFk9On~AVcmll`G zTS-Ix-j3vn_dG~bC>YBotBGB>)KQsNvu%pos$NfkqNi`I3j4N*s|r2=GED0M60RYT zb|CrZ_|*KlCb?DVgsB)Hpp<`EyyevC@5Cc@EuwJQqUsh*zJNEpXmkbfzDL3}2p|uzEC1lUcF>nhyXq1<6P=vR8Baqz^z~%I}y_+Dc+& zI3^m%Z7$gQB2rTu7%@IuZ1v=NJI%%*y6W>E6HrL#RRnQ4R1*&WB{kB2F!fNESxlWj zI8wAc(5iTS*gY^ZJUe*%38iVA7$!9n#O|g(LgDyb6xKCpbuB9-wkpRG2?94?=JHd1g zgb##Bq96R4K_2m4L<8bynG>k1U*k0|1V@ZO#%d=AfU`=Q^%mIXC3vh6n*)`80*#|i zR)B1Ja2M$kQ=JyaLeqtb0ycyuVUdr$qnoU-c__1@OeTUzau_=^#Q&^#ycFkIwIM>* zj!e*tB!UN}29Mu>K~k(kWMRv3x*bxjWFt0bp?Pmg6!Nzn9{Xkjz(M?9W>i=ibk;#h z@!sH=0u;rAFQ9;$`9FDwSWalf{wkb$JLY6~Jm-)LQ@U7)8DO-@Ob@_#@Wv((t9tp&gw`7#e= z8JrAFR4X-IXHE@sbC?c;GTS7|vfdKJETcWW-t7LbCCK;lG`LtB2iQ?uL}WMmzc6Wh zna@0T{xY`{D@sdapRl=`H_>Ouw!I7f=|U5K8BGCSqPvX0=f&$bM{?m=8hY~#$J8xm zn~y-LbWHQa?_<~91A)U@ux%2a{uXUTQzhcECKD59DxpJYnHKF3l^b7}Y<+@!mM2>T z;_%PVFEf+KbO&@LyhfL)K<4?uL7T28)OG!QzsZ!UtBrm{H1U}9;R~&Y-ltUORajiY^VHU5)MhvI! z%!It1^UhkhFA)8R@f?d7hJ0QTxQ8EQAc)rk7ZG@B_IC-{DLsWj;oLZ)MSaET>=k&P z?tCL7D1Xe*!U`r1yVN@KOdh*zO}iZ6MJ?AstB)Dl)5(IfXrf02P9{XtRdMUo6@~<# zkQK2d!3+VGnv$bR@dGCjUCw9Ufs>Z`fa7gqxysw>b`9Z@w5T3A+P?-pW374u?_DG8 z?r<_^UYklT?(e^u8#P@k&Ab($20Co6Hm?OJ$AfnVY2$`G}ZU@9chZ)=#b&5 z-@^Z14jN6>zCX91rbg)!SNmC+adgq>AZv3zgm4o6?}eZG!n8M^juH0XegF4Ap!1)O zpsmSfC%eo_O@hph#lqBb=)Ii3HpYh)>e_RvVsuhR$GVGWe(=;if&7j5Gk1~W!b~p5 znO}TYhNML`7{k~%1z`3FMvISw@t9wG~rsUf? zRO@-aAyM~>MrN0{E(&~S+RhlNy!Dh=xac?QrE}5pqMwyKpM$=~`w63mxxYEz3eJ^( zzJ3w(2EftXClBAV1)HzWJ+JHHqe^l z=wDax+H&77>3zVSPrk}*cA3`U1KrDro1x2xek;@gPt3*5-cvDO>~G~I4UCL@Nj(Qw z_NK_k``I;IDD%^Db9b}6h_j{)b$4r*XPjo1jAb9Vs`TUf@U=DjLEFLfS=`dRj4AY$ zlDD79_xBXsW$^|_x*9~HPA5)Ul z`y;ZmQZPB1Oe`1AKruuR0%ATlJ_;c1uIyoDw4#IQ*`eUElkI*&wpg05*2n}=#qjtw zH1?HE*ys?{>GKquT-BoUT~Jx;!~JfnDGKxRbTC_R4wzG@Ppo-wt)mIN0opBSx&$HMYO zF!>HV!i`ZgIl-cW`)rfADCT->9^}r)dW5<@6EY#MD~@lpH%^qoCh%PKpW*R-(^fAz zK$D$POO{R8^U6XQ*OYVXwTbc{M=&D5RgUC;K+Xu9YZnnw;BR!aaAh7sL6J`vhJ`0! z;cD~aciXiG{&}l@BLna{A0^7OWBT^bw$I%A;ai ztYa#@GM8G+;V(CD)KIL(Sqyfv%OkN6t!KsJ`e77&^lTCkFv^PK^022!=M6F;p2xBW zW@irN?|J8>VCyoXu=husjJ!yH(W1N-Q0Z;7=LA;LA)wULOU!Ca*g4Mk%BKM-v_BL8 zCJ&3Xh|u3d9&>p&W5+$0h7jzXuGS@ln)y3YA7txgH-fFO*`n=PrFk?nbTe_7D7qv1 zCDGEUZ6l^KZx?wDQxSQHEE!7!-fgeL5mcA~4m{sA(}Ii{0*=mV+0br~6(FG!*d+=L<7EgDVIxSB zG?1Saiv*Sp%=m=pC=O$*wbLIJusWL)8dL5=M_%Hpm{}QIWD*Ch+!R%5MWsds1<-5o zSz}eOy$-?gRo*sYa|&`SjO<^cr+5=x5V!IUZVDI|1AonH<3(48ERZWvGjz5pkWG zGIfzA`76=1gaE^y@pyWfXiwx(MAolUr&sShQw1s;UReP>Lj-d&^;X;pghE~v3LOZI z>Q$}vhJb4>Vv+HF#&*sJK#-3=_E7k(j3Q+qRjmTW+dw|>ENu#J_HxSX`BdCG6XNyP z^K(g&yqZ|ReaT*~rhvXF=THG8U=FDE@Wu?u)pXVE)BVUApb7}KUrQv`eeJSPn~IV{ z0{qv&OdBeY>J1?q30N(IM~$zi-XrjQPg5fc*cQrDvQwrST}scchU^I%i?az06tO3V01Enp`b{jgG!E^Bd#HyWQ2) z2=?CPRzW1r9i-6Zz!rIx3I<&brAg;g8vP5u2x;H#k{|4rRwa+D0Kk)NhQg-cMgsnj zE$wC~RwrOp2Hv}b&0gt4NCn8;{tM10Wc$N(^AFn}C7c>qr zQcG}hvbMyPXq1Z`kW9OK`tir(u}_D1ovR#09X~nd{?niQ#vIY!bL9x@^FPF%FIEay zz5Y1O^*>E#OdTsVadW#?J`53mYjZT^+^2yGONT9^nWogHi4Mc3*^y8G^i({gd zo};pJH9QOS6AB7CEANQ^P>b?>!Z@arb&!WIvQfy$NA@D+fFnuXb~dg|l3w}Xj~{Wd zxtox;KybMPRp$wk!vntpyvwVIT9!BNAA!XtKMeUdRbkXK+?U5raVu@9-nm@5&V=~X zvDcx+^_Y$l)3K)W3RJ4@yfwAORTW;CFR36JJT50ntTQwFOo$-bnqC6CT*rl;!$>aIXcltolZYh_RE_#A{o4Ta6KX`;M%ZMo6Oz2HMg{HdOj~#n|7e9?x?X{$GIK1{)sW%#5zi1H#2b~|^v%SfKuJ1_cp(G zaF^>SeKfnu39Or+j?j_%y??1_=9`W$8cL-pZKPZL6--O1a#O1IJ0SGbmiAXp$C&)^ zuE}F(a`>K#d6KW5;?BLNQh7$=MV-uWe0TWmBzeBDg7(L=ugZQ+s%-fmKP{bTcwe=g z{OJ?tAJ+GW{Q0TBEefj6JDlsa9N>S7cyfr*|fiy`{kU=>)js> zZpA;lk!#|rgz~(NKm12Uc`86?s-q}$+l(sJ=yT}q$pWCT0c0nFH^}b+CGbE=CXwH0 zbO>vFX`-JmDO{k(Zn24}ko|D$j)J<^#3r-sfqlC+N@jP-*bdQNh?@~nPb@2c zo`6lDnW<9NnORn`8Uki%UTb>-#4L?dEp|E$B$2n(NXHOu(>7^ynM~K&8xH;?l^A-4sV1AaJ_--vQVwz{rrIyLKMGTgAerg&u!?sW#0VtL%*$A`Y zutf8?$`ybY7>n#81b1a4%m-my#on&YbAY1*9o$pPM`YIvGj0N@HAwrFdXtdo0;YN4 zHmT3zZCi^jT!OdvMqfyL9&V3~w)pl}B;%BCat$Qx+MWj%*K{e;On&3!74&tBNd_d= z4tzzTpxn`iT!B%pgJkrh6ENe_iPlodP!^0=BF;aS#YBb1JZsfsq`0~LSjO@Xo56T4 zL4Yib6)|{o^wB9Lkb(5XxdOI=I6|+XtZCXTn-T1&m-E+|GPXqFAwF7ILU5R7fUYv2 zMDzzY7d1PtE=sDo?#aiJB^5Nd1b~N0iK<>gXAK=<#i%%BqJdq|Ab)mUwuI?0x(K3= z^hN;r_oIvG%DCB`F3TbfY)Cj8yP&4O+~+t|XOimwB^)>TX-M9jW+cFKpz!_@!t%Tb z0^3&57VMpY$H_D_vQR3I%repW8Vb;}!~1m6A=Dzz_ZldKH+n&Vtx5Yd$8_9N=j)}w zktsg&Vd0P**tIy0lHN%cD(JF+sN+Thc>0!wpQ3a3=&Che?>!<;oo!`9-`9G>@h(yS z0cfIfSCSE1XY|St5chXTzMiCZ*=dbs#~W$#Q$)SBr{28C$a4ZpCANs}JrTxISAzQ? z(2pw&aAPe9No}A7TwpHnfOQ^}hT;9y_?S6^h%PImF2v2^$;d7`(4wuDALKE(|1=lQs%PwJOkLI0DeO|m|n9|jBebV;t~6!CZ{J>(ZdB{!psk;Ye5ns+AxKPby4rhwir7I;;#$Hd zrF)wDxZTI^dJEJquTB5t&!f2F2SSABcw7D%Wmj}*YZ&Rly9UXYElF+Q!TQ9#>0;?Z z?Q!e&g!_SM@+RJvmzP@pq5Y_cIgym)dfPR7Gbo?(t@5x5jV*S_)BKKzX@xA+M*|SEN;%=ia@4iT=UbPUhbtb%a%Yb)fZQC-o zdOEFNubnLW-7@nlJACcPVRzgA0N<+uEkaF7_`B6)SC_wHb*G+qa@=n6`K=u4+q>}W ztemV1aW4OroN!6bGtmmFLN#1+Oepb)+4tshC0y#f$Y8LL(Gg4z?!C*0B-wlQp|=mK z+KV~TB2LX6es+(0wP*Z%&pIsIT%2s^mt1Y7~QsY6%2~o}9 z)rm3%_fEXqKxiFxj$hKj^$K)M+lzqrc4W z{w=fNhB@(siT#>(rGoS;5DI(+?#QDGNgQWiguE79=<9WMPu2YmugUmeJB0T~s~Q)c z5cWdX3Sq{3B^v8h`K%UNH)41M_d_QXwL;ryCK!o%vf_m7=~KD)hOiv8yWToW)V%X3 zG4tw|3B}sBA&AInwW$ff#cGG7MpWM&R}i$c$JT7bgaQbHnjC-L!jJI$y5dX>ao^=g z^I8m0N`xe&dt}(LPiL4GjbIk^0$RPY0R6ZYK6B{zdEBo)#|i=1v69$4)ASa36kl^; zSS<3U4JeQV^i8Ti&*)QzAZ?}y!ngsTVCRFosL?SVZ*gSS>iGs!R_Q;Wf)+!16BuND zF5WHWpAH28(b-mSju4%Ga%qjZFnE;34sKpTJ`Dk~jC!>LG>S@j`TWgqLWd!vH2CNv z3&Nk`3@Y3Cl|e`hXJKGt0-7`ie%vfho|R__D~swMX=-rqs1!tLY0n$|!+UQsyl`B3 za!BcGJds#2A5DvifxY~FP~vkNEt#T+h*=2-$|;Qq=5V|B?5&wzY=$W(-+$YLQ?-^Q z6+tY6XS_1mFNMBSO`H&HKLCoB0cug&ivlRL^nP@g!PmPjP-(TSkMs3Je)s%!G+d@G zqcfcT)+*u52*&t(RH^D^i&a&NjM68kYcZu(oTw>r5wGA;Bs2S5-8MHKZfIkMUs(}g zzQr91i#4x?k>PPyS|l%JqH&PuM;3}c|1t&i$$@|3HxmKB3ySj)?vSka@kkbmEOTNL z&DHXDojNX*wIM5?LRwsQ6IaTui00_TzwE=Knve2ciJnIOh#j#ZO+5a6oW4Dkyr{}G{cz>9OqKbJ(vtf5y*d9_*f4m)|U_fK(q>r zsmxk^4aU1ThdtlgfDs3q*DZwXAYKMOG`Jgb^BY(SF{|g%nCjAaq6#AKH47k0n-jlf zH@8hBkgJt~Zr|t|m&QhRWSmU`cMVVQe{MC@n>CNfQ=(N_2PM#0ljLDT zvQPvzs+3r6NhN;WuhkQvV;1a}23wBZTGUdPff9v;*HR6Ses#MMdzg$H<(#R6G)gc< z%yYU7xbP798BvPf)d9f8z5n^rFF_Cdh_V%0MP$u@mU!aH0tiUP5G6DicR7%j_5fX4IXW5b* zp(!GeS^%I|+i^OntuutVP7ZYE%n;!HF!R$R-cLdPi+s7fj8LVe&4ie0x z6nTO5Z*PI}d#uu$TTEyk@`Yp6%rD_L9WE8GMra0FaaGv+HL6s1Ex}%9O|E5#+ceH#g8;M~7^% z${q%HR!;#2EPp@PZoEdu^0x&n-h3SqRmy%RO43_lq%w$4Y#UjQ$F$@1Ai5LS|MP%S z^t?i2Zh-IHl((XE@%Z%?8*5rxo91KFk-e#m@7N6Y^m-GI@fT)cV^LFy7bcr6SiFjK zZH*;WtT7Ct4o?|_?sKKFrL3ocs ztvXG{;X&H`V!cn5lGVW3oox${arjfpg0DmL=fIHnjOv~0!}7LksdFFA)yj0dhw86* zXuks?ycwHota0fV8r4s1%FC{ejT~>WXm*RWOAVk8zSj||SIttJ>N#XjUBC*a^&Wnc z_Z^i>utLSW{<$JmC&1Cq?%Cc9+5<9VI&Z9(ay0D*<~Yz7rA&vON?m5iBwTj zcmMw9DFh6hTXu}1%=N2H0kWPp@LgLb3W|TI45?N#ymxO~^Yu0Mdplm2hZbsYQpG|q zjoqp_nzs{=XWY%QLX^CwNF*P}RqNY4o?Ss`=e?p1QYpctc}(vh>VnGSGAZAC%H~KC zJRWhxCN_!ov|0&CsM7GCL#?G$4w3#^Y3N(%>fN%jj!~eY6ngvBKB{SdnXbHT2Hihn zp{sP_>Nz}D_b&|U_yzzdIHl@|wn_Kw6R}-Ie&<_^ua8Nn$Zkl`9|E$xzKO3SKO259al0&e*dth z23fBo9s#}qJKZbap1BRGe7N&8$4Y}LG&}OUq!zU-e*B$jxm#j&{EdhA2anF{>?GAS z8BJOlDXsqP^sD&o>?2A|M(K!VhRBlII8k}CdCY++N**Wk-1CQ_=~?##tebZ_<%-gK z?-L!@m1)34PlZSA#*zHD3Xf{lnsZbu>?N<|?e~AG`k-Ar!P*sm?wa$=^6;uI#X(cT zE9f^g<=y%UpXtLe14A=?N?_MN(Y!N9t_(NiOb#hFK4osQazO*Dl4;lm%N}ES|LpB2 z0>27{+2~@0xY#4YFG67xc;Faq0c-_nP(;L@-0G7&42s1;EnS!3+7@48$jfs5DDe3y zVoC{}5dR!1yv|gE^MG$6G6l4Q7{JgAV2S#aiq|I}zEazF0#-#+a3%r>Iz6V|5kg#Rbv$JF+8{u?iU_1LNSb-!%!uhc_97Fh76>`Fo!h(FoB6 z0c^&G>%d* z*r+hYU*5-Iv*>?D;SIsoK!(%YAs-B&x}m4po;V)Hq>{$=ybYGsN90WcB90=)biU4r zg7jlC%QS8bGSA2x?eTsymS2+P_ygp_VuzOmiu+}Axb2_A7|`bq;MTmi44fY?hHbKh z!=KS{5O3oe4zJHup;GBPqN9>2%noi6BVI1P-t5HleMDAg=#$?}35afL`{{zbSBHL|q#Jm9BVIo>o7hV2_erBh$ zh$43;vP1l$Lr6d-iRXSS--|tO!1bntEFDQgV@}bS3+m{l=t>5YkFHOY40RbZb^qlJ z3@r))d?wr*g~WmJLoIrLPwdwojPu!IVr_Hp^i@%8!Fu>pOo&W_14I7y6cjuQJfWG% zQ=(2iWSy5#-(T*#NF+o!s4||nM(%lRA%DS3)EnU($Y%ZF_@qx^E!t;?o42L- zT4P_X{y6|N-AD?**%R6#d%!dfZ4?(ZW3QUxdp?S0hQq}-j|jyE2<_KE9UPc52OTglNJh1XFtJm#Vk4l8`m(BO7q zmO{RkWSr?Xc(%(8+kRP1YP&;yJwbQoHy_K$Uo>WjV8w*#))!c=7kc}3S~^H&;3({)w?~NLGcaJAHiD)*^CZLG1mb(4hvW? zh-@bi4qWyhQsFTn;Q%!wFUQROlV>Mj@v@4c{?qGqXqf@!*>R*J>D*okDP%mIabBK< zHHj}`Ez%Xu9cdYJqb9ad`e#cLOFi~yL@17*W`|`bRI=1Ntn#ALFSW0Jm~QPQ@MM3U ze&d|cK3PU=0pfOPl@oYL|5Va`xS)j}?h8j%FEhtxaQ(G%z+JTyb%=>$h^d z$I{I2J{{a5ms`&LtK!UAKA=DKX8DinLjOgNY=?uzH+O%`G&-FUsLQoLxZkc{$9y)2 zx($#ZOE*e&Z@Kh3e6pw98sJE0-B&u7>Mvt3WALukSMru^?;lm`2e-wFI$-KTJ|F+l ze~+@RpRV(LItapkZrrmmy#71%-wWIPoJGaKwZlh`UrHa|mVK8lh5L5Y@pGN;3A(`3 zP_3UA54`feHu=c%(ZkF`x?3SL)??*G{c&HMTT-4H9?f+n+{j#cDK@uo*;dFbIs2?7 zF({&7_j#R_tXx^`m8pHxr3=J+r-x3w`bT?Q_L)Oc?qQcQ*0sY9TT!LAD;2!Xr5OQ< z6gzKzw7%3|*MGzOZfiRZjGtB53dqSYXwphnC!zT4jXSiJstI;>{x6ml9t)bi$O?=B z^Er9LJ$`R)&$S_|tiN77SMG5wuJIP*9Wq!)P)<($`G8akI3|KfB46s0+DdAs1%5rEIX-FWpMo6|^@dGxJBr5Gjg3T>g%X7rfmNkE^`gN42^Rc2WYh(R??-pGG4K@#X+v@FP z&01IBs+nHFbextK;_@;in#N?xejeqR1KYP&MzC<1v?HzTqTxcKm`gM$=pJM0b0sLs zSS&u3*;ncWPgmd1XQG_I_qL!*V~JuYYAan z6u}YsaH$evqfFt1LQGKpI)Icv%V#^Hkjf9Dr7@yKIe`Px@@n5(l(tE@IL`8(LiU{I zm2;Vq?E(iMh${^qc>ft(o4RK>M%=3xaT5BTHidg=Priais|&pH@ZDiygbdO)nXtq5 zGX4VQ+;D-9Xhdo(n9@qVu}7bW`{{*4=Q@3$=qi$%#p;AVGiJAUXg$&3=_&9@Yvff> zSg6NQpXh5p#lT=$$zec2@`Ye2Q)sSwTr^o6fNsbX_gPd7^y)Xp8kT{?Y0(WCBH~EJ zrx9fBc(42*@>x8(0<6eSz_{PD`>RJF_6}KKZ$2Xe1i{5Z{@>-oBh;551niiHa+-N; zNr56={qvLwFeNI7Yz#hd*l2V@?ev$)dLX{Y+FGCN3xHMG5QE9GE;x=M(>i6Jnl=zM z?V6U@5{bwWDlD*j-srH?sf{}DqA&(f{rYhRiB%!X9uYBPGY~yA6k`0y zCKE-kMmY%GM@qEt=hW`k0zLq`rf5oBaFk;Lp?i**9jRFwK}bo+a1kF17w7=#dB6TI z55U`SB;*W7%i+-B<71og@aA>{Vf9uvj1%{1V6~mN)K;&YQ5G5HjcM3sp$Ybppz9l+ zZdJrS;TwL-rWo;5Y!SLNIxhe$&>8kJH|R*}?BriQj#fb2BOTWf@OCf*N^4RL$qFXq zE21#(T)2$57Aw!!?g$@mp32>Vd!|0n*@TjI{8J`wjbZOq(e?=K-UJvDq3*Fjxcuku zq?(D*E*e=Gb{`W->WYF!DZW@U9R!Jk-(p4z9SIG2tP{b!iv#5^@4tT<*8 z40addw89Z?-4m-Y1Tz3JrIy$zIFGd1tws}8Hks02{{w{4>Yr{jca#sB*v`qD3e(u$ z&DSkvzIOlz^R5E0!A^saT{F0f<+XipD584V%ko}$!dGrWOcoJw3e3>WOwyp={Mk)1 zQc&oDKAKEiz!N@-Ak69BfCTi-0yaT4go(r%ucDN@e)%(i<~A^RKjE^@6n^|;1*jBk z69L*^PxJ$_ZJIGQf8rK}vfNey6}Bd{ppJwSeP3@zYw)OniO#@@fk1X2x0h8Ozk)2! zUWBKa>_l?Cw{87r6oQELg@!gHHp+)?)!u(!Mlu#Uv?BV=yI+dGZ2*Z<2@iritgvO= zxqEg7k8?K&RRG|ioN4Bl`MJTj!VPD-2F-KBhPxoCCuih=-EY+;bud^M8uNS%2_4^z z;{>+o);0m~8pI4<9i*Z2Y;*Y*BzRj)R+EE58(M5t|C*lA!x2-Eu%c2lVk)b9$`cgP zofqsi_sJw_^t6td)kyFTcFqItB8$k#lV>K5n)rELeYyIk(Q5<)_*b^*WPG`?3Jem# zfe=s$QsC!b`rO@jdW5Ms03eJxL9}qQ znJz9&1Sy|`h4NSUo*WW4S?;B0jUvq(56#hunU|zotTI4m9pwbu z-cyCqr{@KlV$2E9vk{r7hr(NL0Cc+U9-Unj@k8g8Gf zio1+|cUu=^&FhfqQ>IRjJ{$J>B{CY_Glj(OmJYQ^BE$me~YqicqPp&_}84 z!K%~&;(@^PhSWN2y!7SV7v!Hd-$0M=qa0?*ocx{sysB47(E-$;hPYIWcE47}f&YM+ zMe#h<*I7C7C&+&igTroyK(x*wG9wds7~UAi881L4KIuQ8FXg_NcF>*p<4&&)x(JSE zj^af-9AR;@T4~gp+jk;7#=ofwix?lcd*ZLeP5fiufBokBioR)Mju+~6T0*Ob!2Jb> z5M)QQl63l}`yenjRw`Duz%VGp>htk8+Di{PX7jn1dviZ?E~g`+R>)y9qzh|d< zK^UW?<1VonKJb%ju4O%*(9#(`>VCDW{GcY`VoLIzFLJ-Dd{Nrv?0Jo+ujMkg$CZ_E z(O2fB+#@0`G~bZ?_i{VQtWIgDJmK~o8gS4SX_R$CXnd?3Y14?CTlw90B0zfT{^p^`Ld0uM2b}~QG(m)R<;&hF9wqbPWrweuqVQ%wXcPAVEF#5;I&9HRVmi z^S+QXVg6GU#4Gnd!m+}-6E&FE`KYBEwHg{FUl<@6UN9-|ASR*bEux`b%Q$8lTu@80 zvc@TGG)UTR7xL_=L)46P%ezlU7iPiYPA|SG ze}Vrm6=+P4TY9WtQ9GstZru_DAG8YB7&qm!U-vfEx%J36~!W?C8 z6|Vx`7CC!U7n>+Moj`W&E*HYW5#b0}6&v%gUhc7AtGBo$6x6_d>SyB<-z*A|c|#d8 z`9CAg;ip&Dlf!})AfW-RboH_0f}cwP{p7~cA*IRCWUw$cPYS~lA-T29U_l5x57VUh z1n73+hb$5)fI&z8b_fgQw3dbCan+%J7@as;AD?UJ2B zcAfdPiJ|hAMl(q`-1_1u;FxEe!N2fluNXyG1l+S9 zAXKW7hlDahjTF#SH#iteC|E);v27k10Iu%qj@irmk};;7s@2^LrLgiZ6H76WiuW^cWiJ4_t9;425=<;1r~~}USS@|w zh~{qAn`GDBPym36Fh;`rHZ6#T`=V?m42s z^gVeMLYV*5r0K}7uc!Gm9BUUyXw$+_4ZHHuCGg1g#Qp~#pN(;mL>(h=KsBu>QE6^> zqv&cKnBFGlpby4+{$J>4W_D|)&oUXz&)H$xJnL;V0yh{5BfY3Krr>ZT*gN3MzDUl{L#4u{IQzAIS5%f-u9~s(D}^Nx%}6is7{>>)KXJ;l+Jby6RUKd0oBV zcz;PkJUxC%D$dHFp`KTX3-%3 z&51WMd(4aw0&FmDlCCx|*d|oroTvlv4oeE`O1&1Z!^=LwcPHoY*A=W{v%PQhV=7)G z?$<&cbFXLrn_O-}m&*%>oK^AN?jkJkjz}edVph^A*7E%$Jg-=}_+jwr5MvpN1p{3Czct~a7s z3Hq6XRsiVH4Ac3Ay_t*n8bsn$0c5bwt1b`yE0@B*U?Jug< z_m6g5?t)c{G%~ite#_2&IDN>|^(LRvB@%VkHZLhO_}#B4pLvGP|0p{1c&Hk;51&~u z3mRiA5zW~5EJYD!tg~1L8EdxCf|4zwF}4xagsdqvV=0PygYac_=5@-W?g{WIt6{eQgz@5Npn(6w?;+CC-O zNkPD|-^Yir4|EK3^&fzIW*ywI9eL+>@=3t7J9O^@Yf$%SvA$%W87;Z z_^H{lnt|Yz_BKmxS)c!j)QJ>{^PMOGf9UP|j|WLck`73Pq8F=COb^a9xK)$aj`~Xy zoTy)ZNl-rDR1FPKrg>xiiYLW&PCn8QTW6VzhZf7_Alv`}$aA^(Iua(cV)=Ucsol&a zYzjPA5a~ON=9qr1f2p8T-*y5;V7fl)fGl?}4R+~f|K_UPTYV_piQ0 zlAaRo8J!vbHBzE|7B!MHB@-)|m~OBzEG?AEXAH|;5K$S++Wb7LOv8j)Td|+0c+aNpGK#J5w+fdjL?|k~f?RY*$Oxhg`V4}Z0NFRR?&#BzkYB!;|48wbToWO(EF|!H zLNjL_G{XgA3@O{Boeqe5I#~98L*btt1j4)i2$CQ-_GrJ0lyE;81ch;YgHFlfiPyw|kw z{nHHy-1Pf(=7T6{V*R!~xKSYg-f9DS6{Nk9j{3%>X7}cr1**Y&^wbQ$ea>;(%bHfN zGUNSVA9~4KO+d}AXQIuh3ZK@p1i+2NLPim^+G03%y(;67`Y72Vxw$d=pk@cN3!6Wro@-P{4HC zJOy*IJ06aAq>RaKrUJ$Juwg!U|I(f>-fH(*%Q20dK?UhbnqZpFZ3_kEae-CcZ0bEs=Szl`!_ zhcQxmIzf;Xgl(7r=33nPGi~h{;v4DpSSb~RaMZ%EhGH-;-h`df$ zD0U|wCM(*Y_X%G3olb@J4Yr*ndfB-2dIp$J#d;Mdivz8e5zf#DLz{CD!n@Y4x%1%7 zQm$(SJ$5%!Uk=B5BreOrBIbm16yx$QdRw*xN`nQ8v{c5v>*n>mM-iXPIJFwtb((Ez zV^u7H82sEn=GY?u>~GnAE&Sri2hlM>QjxN&$s*y?wF4+(G*kJ>CfoU7w>lkkVaCA6hYns{S8qk?YTD}!$w!6lDaTWv9&eJYtle3;|Ri&Gs>w>g|WV@B=?ZGIUEgk(!BPmb6Ow zKAz{zT1fT7Gs&ekSSHL~cIC-`52Z$vKg%f|+fX zKnaCVzm(#0YHD&*4^(x9pK^Kca>uL;*iTg4$N~XLF?AND`hND8#JCEYiF~j6V}=~n za1?ACt~GRP>$<}2Z~T-4ljE8Xi&VwwTeTvdSyzd7R7825rvJjocitiIUTq{pzl`d9 zKOhw+rl>z<=dDODKe!Y=JJUrmyS^U?xb>7>QFBf!Je5;*CadSEe1nrF+4+@|_E=GV zW7TC*_N&MI*#Wly%=j1rRSL*QSSM) zNXG8d=1sgR36-CR6y9Nj+6F^@O@?BkhUQ%(#H^A%{pXb|#I>IpYuB@sl2x@j+lu}9 z^qlmAX}RHtN0IVE%Ub!ySVO@`F2R& z?a1XvTuNwf{RuG&rL;iT$2t|`wWB_KEDfu3w2b~^VelxHXe=Kzd;REtXQ^kqyB{xF zGe$gZ+!Vt{u!p3jt-eaEh^#*gzj923Hu5J-N-bNL`=Q4CB}x$=sq^>)&*_H(?1#f} zm(SYNe-(P&-B*!WEH`hz*!;N>r1ipFhcJB2_iyLst+8OIEytj(CE;T-{70W3sAw0O z1cttQ8eS>*rWOnBx+Z@tGhXlONGUCkdnYpM@VxxL_q!fmcfNaz^)`=MdQwp-;W792 zf5AICxpN=vlir${^TWbOvce_1{}}vyKYMS4*8V79=Po;+Xp8B#C^L(573`H=?ck4$w-Bc`$`~+bz{1T{OyNCnrUTA%e3}Y6Ygu7F zk~`g#4vq62VHk{1<5p@w5x>b`#5FPsmpca*Y#Rs1>4&13S)KQ~s`)Si((!nvXt@0* zOK5;+L3n2*%mFB>(V&lUCTTmy@4Mbo8Bl~&|7LsXgzlX@--)JDd z_6J?9kZ$7Zc+gcdHG57WOL)2tVQfDv7bnvPbaMz&-~|!nYD#GDvRgyD$Ig1>!?6qSerO1KCe38V*ywc5pm}}qj6@s>2N(Dgv7Tx&C|trwV_(PzvgbsYU)Io7#Jcnm1l@$7k7#~Njcw&nfv7}X8*`he@UEaGpbL!S%$w$Wg`7Y)fEYE zguMqzYFdjH?&Od7g5+)Uum*zyJm$h+2__Qy#kTY*s~5i04Jfn%@yQl_3fnhI@=P^b zV>?tF70|-v@Kq?O#p&iPh(#^glF{{KtSpLU)O9E*2clC*w)7rGM%9fV#DwPuSkkN@A%>$K2^*bbL#&%DpD=#eKSP2W&c#RAhk@5CQ zmK$+?qTgZRo-SqX(dMdM+z9sI8r_G-Pjzc*kc>`VF~6t9@8BPC>>n31B}!#h4Oz7g zF1bODH#sjdYWRPE_-}6Y=bTY78;KLDQ^j4@HcpF$L7pf6Is3bs6Zhax-K%NY*+Yu6 zwpK_@+NxrWRk8KM!@=+072JJn!%a8sreR#Bjh)uie=OG=ukqGQ_U$MP(2UA~vI)zl zOJmkdJiFBcJ`nWQ%l+%59uMur>)X#?dhx@0>we(QWbD1$wtv3w2)uPYSan(JpfcRn z*VZP7S>+_O6xI-XjsKC@(WI z|5~n9_z>P_86HUR(S2EMZ6^Q6u;$46XLo!5?JrHw)eMc#_1;>1ciCsC-#uFJbY*6P zMxRq;-1za&V(yB`(#JEO#pa0Nn8uXJ*Ts6Z&>*B8c`BCResJtqbO6t`& ziisOH=@e!9f&Muuw8l?r+w&8m3bsxPtyVvJTN;y&`p#Y`_^Lh5&EWH9Qs@bsBgrt!+lI8a z*$LqDDi7#JX?KiehYkYdD2W$?C3!=TH#6DbYk+}{B_e#!jIFbbI71gO*#2<>thRBK zjpcx*F+|KWbu6or@cP@$qha{9E z$nkc5VgP=bl9qdTJ9Z<*^SSHf(-NK(*~SCL!FS8_$yWQ}Ao{;=lx9Jz(UO_4|O zHe8^78c2bF)KUIs_Jf4#J-l|@NnoJD?@4pUN$YxV_4VPGXk0PS0K7#-^D7rGm&BJq zFZ@Kp^X&Et0hF*O8X;BmV@umPPa3qXX2koP)k#;5Bf(tXp}1A*ezf{rZTcfOC0NIV z_ySxzx=qb3ZF;by*5?zGFR|qdSLT#z;PNWMXAr4S+ZqNH6k^JAWo*!SDFQ_Q))0)C zbOIh~9wEW(?2>6>IY0O`Jp?%bhQEQ}fVsdWKE*DX=f2LfUyZsW!B-K^@AZ>u(Bpfc z+Ux)st^!^@V5ObD{?o$!l`CT}p>$7Dyp3mUhoCd?{414J4IUH{Z9kR>Or~ul@(&w< z``~%%{Y5_s$gR_ibV0mV>aUr&jvxaagE5PbQT88a0HQ#9wMb>24fIg+ZWnxx#zC$? z0zd%o%@VB4PQI#?dH%idCuEERP|NPqZ)X^cU3~)N)+U;52JH|D`A^?7QkJ10-PRDn zFY=3!wVRc&T5`@16wgt!jxG-h;<f*g2elh%I8@&s(i(n&~ihP$f0Ih+7e*Fv%Lgx zZ{|9fhAm2cm%eOC7SIpesF zZBH>t2%yOW-7m#>0n->H-mRzs`T)fJ5yIVOc%%;43M%CJER=suQnDJtD{96t>vp2q zj72AEJqqh<- zD2N8?0K;G^GbzMi(dS0dE>X+U?|*^a#M;z2HzhF(-*UiS&;cj zB}o-tivRoSgp)p1@nJx3?DbIe>w7Kf?>7!s=u{}rJcUzoyz9vNFtGDHY%zT^ub^Hi zG`e5(PoT=vgR$)LJI&;k70DhadI_ne1#Y>B`;ED;(NIfSK+=0r3`StcgLg`q+-;l- z71o6Usgn>iOEq8eKY{yE*W=UmaX3G~_7E@VJ z?w)rZ8?EEKU8*{$Bmi5G&h0*PzM$Hqy!lJDldcabQLshrJs<)1Aihrv#Uc&2)h4RU;d2g%xvrrv-<J9SSN&KnJ_f<}A}~c? zRO3|;&7wA2M+40WjsJF&=Z17dL*4!)&rX+1AqKm%kFGh@wcx~id5D>(l<>J(MZ_}#N{Cru;+?wq~%R6*o2cG*g_{_vsu zM=K9L9Co?rJ+X09_rCLZ=Ls4O_Tu?BWj&W)`GppJBNYOD2C{3f9c@sRW)d2}sUr*G zl+w6E_l|g#yQXPBTOW&n9+SYWA(KDIpNIf6L|N-NA{S3$iJl# zAFyRvocX|CLlb<|bK54LER%8{tNb~FJ9nxr$dz3#U3YQikgULw4apu|=R~e8JZbdA zfKr8RcpDC{=sW!STHB?AeAt12(u%t^Bqydr(8A%zA4X4@DQ`X3z4W2eMD?)uHne0< z$*a_9Nz2V(UD~=`o6hr%_)5yKPT3YH-Lvwl$WILD&CTjvgvUKX9o|{4fQ1Pjzjdej zi@a&l#@va>led2M-6;l#gy*yP6oK>gMived(l=``Vu#fY0&j_|MQLnbu%4D4$yB8u9%7XC+E1LT(gMs*nt7VX&Aojm;dnG46wrO}seb;Tr@XpEDj}rdGZL&2a zkImS=@iGX8-{=;PYoA7AB_U5|#A;Qk9~-B9Z&z(@H4r}M?{uRCJK{@Hma(Yxu$t1W z1Ajz8*Ovy?TXK4!A4nO=I%qci+;!b?qdFy2GxiE^MI{ z(EdRLJbs!67qXe2Q%~j~o!d#0t%->!+t)vp?(1!cKp8LcWPI5&NH%n(wuvD{ZfBUj z{TAaIC%VlfXntDaOS3C#(|p#Ym_9BG!1nx(o05~i1bZwCwDwF2b9P1f3^ZsRM8VZi z{xyi0&-Z;FXirAILQ7x_@H}Y=Ft7X{2wjGepEMGO@VgBjCxKKcKa5um&Mqyz_}^)v5syEpe@6LNT02D4B!)}Z*%5cn;+vupe+HV; z+ALDgrqh6)aMn?79*b@@VG(Y%+wGJz4&=#}#9AmUZ^j6?fvC>UroknIsov1l1Abv5 z_jZbg%HSE-J`mvof^aOtXq_z(beNp-9z??72@M-5S~U|3g3)!sg6NHTJf9zp>oG1V z>LUk`7Ge%WF>71)eNo@GJwBEc+f2pJ;J!FOW?<_nJ}0k(g4_$9ZQ?Q|jZh9nVyAQPG50dOg*Dz@3HHez}Bx0vfdW#agtS)!0=R=A2VLo)H^Ds54$i3G^bPOp|z4{8*NCmT{U|4V%O zIR4cjI#g)qq?yP&Fu&-wnN-Qmb%ri~ubqCWc8X73-cRnI5}u*+)+9T;*14m39aHEw zP;~P)ua2vO_m-oy$d3i-qd%6}gM~WOW#!yHwoYU7Eviv*u{` z2BFEEA2lPQbx9$oyIiYP*Dw`?d?T2M;f*wp$qw%=3Eyv6fhEc^OCj;NSX-n~34oYkE@EH`;2H;=7hUZpQA z;9z0qQlDyE)=l%9$9H?yp6ob4AFMkQKB@lwa+}+ezh|Bk=-eB(n&k#xy{{bG!ax+} z{Y*IAEXE4NNwWTykK9?s$)-S&U>A{dd|tDP@2x-r&GMs+@k2n58s9*-B=!yK?QqD( zv|M_#_A}fJG;ADcmgV*C8Y4&Tv*5e2`p9%1Rf>8ytby1)AF@jdQd9))rIhdy$Sn%7 zW~_hOb+n=|Z>du`=vWI?zwY}^xUw2)!_y=AUif9XjyZ`jets|ogV!Uv-R!X@OGoP5 z#+M5G_dN$=mK7zZzTiXLOeOivoZuf+{hn~8Ss~LL(Q{JO+}47p?(u~Z-~QG_V=YW^ z_Uf@&;{*{MMO_!V4Qo_Y$<*p^~uf0!iPn zR}-1x43Wc^%Y&Bfgzh(O9`QP4SaIF1wRz`W@Vnz1q0)xVJ8q9gld3xBWEXzurN8aJ zLd}2o5ar1d(Rb4z1#j==&D(rN>Vagp(A&?p-Dhp>sI&09Ch;_f5gD|w+rTSh8GD-z zsf54R&L*U-hXp^Q&+n;nU#Kj%U!IE+WtWu|0~vGR%{AP)zT^LZv~YXx+e0xSHxALz zSt<8L=@2w!>f18{Nh96z|A21)-@Et!T^!?O$S1cQVkzBG%wE4FUTVGV@?z1S-;#P; zTP3d^Bd>Uj-~7O#9$sIBlDY9z~AC3i;ga?Lm`;P{ztJ+dUBa;4DALru6`T)`Klm7?g zUKWcIa!7CZ!zOs`SpDoRc$KX?q(sfVeS+}jV@o2hrN7EBDLxY;{AE<8KsL@S1@;5A zE1Bn$g2#~lc2E>d{V`QrGJeq4ZC<}#AV_`#Q@#zAOk;g^S*%PGlOy}@e5~2KC=~$^ zk}?YJ$Qb;+66c96^}9U~S$bs1zEY~FnNy&An``(KVvdivNIy6^tq6H4CSmLc;#pTl zq7zlHjI<5yx3psXf$D<@@`r%2O&0EURFl;Ls)s$fk>vZE+ioUko7#oDVfSPXz@zVd zf+9w+2Z{H1v*!igTCGl&0#zD$wJB(aQ$^6I%MH3Wi_?8CTA1b3kSsjW664ZUx%W)(h@HxcHLI~b(un2(jp`~Lju)`T#9iwiFVLqt3?CJcl=i`WCU(@p@oMQd> z{3JL$%No2NI+|TAWE&k-3AZI)C|MaRO9~mu%svF%LHDXVK2CLOgG~x6 z8b7EiF1?3OQ;`stUznDIoEOKuH3o0h4rIUmH5ER5@eh_!PiExt=3hXvd1W*F#BNWC zwx6FE3KAa8&Z!NFV{1SgwFgxpAtlSm{Xr?Im*2k(14soBlcj+iHrQfA9D;-dY`;A5 zAcBi;CTX|pEVQf1QRJzP|0WCDv$+xsXro}!bHdktm@=Gm9Y+M(bnWRrh%H~ty)TU9 z2p!1`CMcu6c{(f@QryeZvdbX4oiSZcbg(Y4+rw7^MJiiuYMufTtcuXVBOEMI*lIJC z+AAoC=dttnZ8$4A%F$%4a8n=!V}ZPW8`Zw*bV=8qTmZv!Kt39BlwCAj`0@uz*TVAT&JM8TsuwbJO9$=Trs^MjF| z&DY2(4qqx|W&jS+CrYODZu0pQJ=tXv+qH5|Z5j~X8X3Yb`IQHAaDG)@loW`o|EFr= z=_ixjYMU}$#35u{tHoGz8xfV3vosBB@q2|or1Jd9Iuityo+g35UdnFwum+1GyxRj0 zw|de=REL{-mzL(3(K}w|xy%A7&4IEUyH7{JlDEV!Jhbl%125q5k4t;ZjmcYFF$^u1 z*us=|1KB>z0lb*FugH{!H3N7l)bspn|IYu=DslPRk}1p$whuP4MH|w%w1TOf>zOtw@tm6 z<&Mq{VwTj(Byhx!{hhcu=>Cbq+?&Odd|nPA9Rvl5hNeH!*f2Fqd3bl z_=}ZoHjdsnS*jv?{MStw5hQb3uxZWu4(z=blE`y0>81vvbXJIp1SZ8;xKl<8lb+B z&`xnrhxiY#UU#Fik^Fo9hsCOKl4orFMmP#IbvkC%8L*!S&?+!Ui6MsioN#lujL{W?yP^QdPAXU<$9@Hnw!G z7q8=~&^U4i7OlrkM`M~FR{pgj9I4#h%tokF#_U+tmL>EdtP z77ji2T>n7J=k=pBHs|*1B={!3o|90F%rIQOgK@TfAc4D!Wt}Mpr!6tP+q3<`d7iKT zNIsA(){MA5!YTXmHTZ*bVCcY!NWDBAZ>ge|x$Vq?`U;U5UV!1%?+=fE7Udo6MAG^4 zl~1h|m^^w}p`f?LipW&6mhqf6&CsJ>x8v*`_Lrcj4*gUE(D}1!>gBc%o#z5_a)J4& zXZ!wlx?~~}{TOEy$JRxP+r(XFzSa|NoA6}i`v5mpC&>z+!n3#RG;`dwO-sM!&m}%A z4LVK_lkgRV^OQof|LRJHNG-=VT1rPb-Nm9Ja7=D%RnraA?(0?Lvive6gK}U_`ttDs zbvOtVk5Wt&DgQ6Y#p;2fhXi)y4Q%M!5byNQt;2C;TgIOD20`Zv?l8*wHs)20WLXE$ zRX0MfzMT6`Q+zn=ya)FWlFDkMhIa{gWvm>W6v38XqM>qYLmUthttQslZBd1U(XogPU)iy)4HU&EyZxJ)Ih=O1WJ|t?~xYVZj z=$=Wk|N&r^}9nKXfz zTXQk4NB#&ku3&^fviAbt^p{}T^Y&_NLu(Vbg{G(fZkBxl(b{BXM~x3Yq!y3mZ6+r8 z-(l!{i4jKK6>S{E_H%RDNCAq*r*xviqaclF_R)+JLCp7|&%Gh2_<=QwzkphJ+%%fY zK~;ZB@zeNs4iI+={pRyOK4~P=*ut!|c48Eec~L988*iafs(@LJemW~d(c+AT5AvuV z{az9jn?l#fx}G&pPwF^?Ozysf_H^4?@MF{>j5`9y0cEF<4R&5|=KOvcE?9p-#I;sq zzYa^@u?R9?Blh~BD`5+84*%9Ke1vol9FVOE8AoU_1V9qJ)?OHfu@`Fr!*Oz9^Pf_L zYGeFf`(Hv~F`lX6t1uyX-p)8A>^GEPT!LMN6Lz{IfgaQR)Cq5By08y4%M&o}>Jk%b zYznSc$-ewwDoSC`kj+faJ#R_|iVOEjTHTtMWfO=>zRt0I0>}G3!YuLWlVG-!_{iE7 zSZnc<1w@{y!K~!DIASYjlMVS;!s_XUQZ&ei8Hv`Q-~^_UbwL(?@zFT$gjQS^)Ehht z;BNlhWOupd=#b!) z_tSVZ(}&B&z8Xx2%Phf8kY)2obZ z)S=r;g7iMad#iA`=&&4xuVw+@!|H=~vJTf-6-iuijYxW(zzQJm7^xsT%9;t;Wa6^N zr@l@qc*Ev>=F5VMnX3Ko;hic0xM#+{LGn2wj( zlluTsRX8!um*i1XcnENs#yq=Ph7g=V-F&EK9bdFb4IBlUvsjjaK%LDSBcV3 zcTd_O8pYn}?3i!U^Nhd7lTy5T70rh=IU#n%_F{LY-hZ5#7aa2Js)%ln=;GYTf}Sb0nM^(FwmwI*Shnv;%EKtP0mAs3fn>{_wgS<13kIa zE;0gK(QOyh40f(DA)13@`Gpknk!i#Z%z;#=$SXHjA5y12HpSdPP1YF%u%bVg*a((? z3TEe9-_e}6vA(D=HG9!sPV5Us@hj{4<1OggQO`TZJx`#%gj2>(aE-byKkJ%^zSl|O zMk_IunmL{6D}oX~{4ov-m;3~VG4B`(rL0o0 zYAR+x!W5vv3$A{|cT!>tU}ayI-gu*}56xW5k6l%fFA|_pRzw`*7O!c#0VC z=+)QWEA!d9!vxWC_A(Rq{8XuY*#hLx$IgWWVlZZ0d^ zOwscq*BIqVb&55j{Z%i94z2GrF__9uiI)aD*a4MiKi}e7<3FD^hh)^Bu42|7lZM8Z zK??4A45OhHsKfb>+>>&HuMl6nQne0hk&b54TCb&5n>8uwkFSUrXhbL6MmAr43mkja zJ=j^i3*P-<+!YAPtUE1!21=3m#kc39N{s^AE2jyDaEy=Gqo!&dto92if8cW*OY< z^Jy%mAwT=}-;!gEsSq&RPbP2}(|ofhP{UK;|1(tfkj}!e8pKX(|CR8Ai&=nl8^kZ+ z{DDW^t|5DH#o`-0{?|)TL2Ay)?ulW7qgVdR6yO+` zj>p zs}^>62Lr^RyN?pf_>wJ{=t`2^{{gCP)|W4>Uk5k;&6s(KmR+;SND!jtl)JbTpKJwf z;Alk6p|C|@z@yCa)t(;|Xy4C-;7WgQFppjMZW;q>d%wg$vY0fmg3(c*;1_$K&B_N1 z3VM~m;*v1cU@C1~xa0^1(DMl9c~A{v|jCpXSnP{zgpUp&+KHDcDeS^5ttN=W9uZ zz{etbf7^$D@&?lMTDYUdY#?#Au22={ZdQQDK?4>QQWT` zn35ZV2sc8#4Mh9z*CBtEj%s2% zO2Gc*5(a(j9Z~HMFuKWtvcnqan3Rx_?)7;&F^t>uH|cGFxHygH6(-UV%!i66f<_Ff zL_8bvr6rXdg_Q2`-w)j@P5f~ALj%yG3duzqn4^e%S%|G8g1m+L1J$R>N-m^r#6WQ` zCe|-w=4^Ay4vz};zbCs~O>@LR52_VD5jJ}qtpxhIbSJG(2`Qbje)rVyks8{5I7%S; zM)BRtCo_xkl>NojkaR2+HktoBB+9p@Z~MigqqBCX+$Ttdw#&U*BUW<g9VeG&=08nHqaMbWoa@(-ow#;>_P#bd8mxFux=yFFB~enXjydBj5Vl=j6CIRk9m$;1zg6e++Wh@CdM#0N zyhr^y3OeJmXD;SWpMpgj`#1UdiUC0>tYFq3w*LhE2JsU~5)S=0(O2Czlv%eraW`(kf;8M|OM}O|Wd2^K;EM;(PizQCyTF zdt5M`%?Ofu42k(xFLdsE(h;i%+?E?&ju|>t*q}Z&Gy2Sn^0qUx*DA6t8Y(L}#l!A8 z+E1@1C)t0xrhYj1YH&Z7=SFACH-{}8j9a8m4+tT13LXcFY8r8+vkz^EQ6$4F6j5Y` z&%YP_AEUZ$9@*TXMyjMKI*vU&CzyGhY-UCzg*%6g%d~z_rxd%2I?p+sBpDApIpH{c z;$*A6R*Q*Wmeh~aqsOm&q~<&=_Zhh(noxeC?SX6Bhqw9Xb4K|H%9o`td6nOhztLZr zU&WtK^VKv;YYU!Mu_>m>m0Efv@kmN94Q`&Trk7U*v^_1l5^HsPcK%Esr$sft{@M?b zg(1qxp`;Cyf2nr@GxMr`PJS|U>lV{u)H!{bKH)6@ewQ~kit|)e5e&zX3l$neJwcaM z{M9)~;flYnbvnkc)c?mz>C5|xxQBCytqa}@EV#ytF@4&!Pv4PWvX^TZ*DgGfZDN)l zuyb5wF*ZUG*X!mO&iC!jnaDqd3iQaV)4JhnV$XB9*QRJ8zw;wgkWo%$(lH$i< zENDcnbiTruoeoC=JCKc(8-fVeoRTqM9eVg9*%}`W62Mf%!?=)RqJa~if>Wr9g@g2> zb01=ovq0w;zoWL~{Ql~9O|$R2FYDBT*a)-qXb~h7B+$_BG)~u&jnN{LM3Ki+KDXn> z0SB04S|kQEz5q;VuQC;N$NHPKUlpX=_yoLeP7%Iy&GlIEVS<8$@G_01xDM*Gz1gAA z3_$q1Mf+R(Vc4z4H6*3=71b8>h!vMGC)lnd5pCLpLKWbj-d{Gyh4Y{osPJa0Fy9@F zhyu8Wy(1oMdhE*|i~<5M2u|i_m53&A4kbnfrQyy0n*KOU#^j-9qpa<1+H#I9gsm z4tOkaciZ%{Lh*cF?7yT-gUw8$$`KGU?bIA+&Y~6@SWDdpp(EgKqEvrBLP`I z<+JM+VxY&SN_2ZB#s$qZmL%Q)Ba8N9BtPLbAfPFjZdV2_^kEW4#NlY;9nygji||ED zkQdN1Mx@hPn%YETQeVCT%wXH6m*9LL5tiI+TY7)62ky809!SCNMrlXtFTo)#IsimD z#@Ham!9iaH;nZwOe#nf3=KjJ9C?sLOV=OFKw;LREDYjX18jtEWlj+RKq9x&*pfZoI zWm-6IPIOdhv&{j>x>qsQjh6)rf|KiPh>=kg6M>?9F2Nub65%Q6FwsXKr!cgg4X=&g zlf#1edKdLq)!d1 zs3;#}cMVl{3d+7RMgt7dCptQyP}gjy5&0yz#NRHF%B6%RR`PT|F4LoO{=DqaSqkGr z;ED)A=|}OFcxpsRu`u};+;&3#3|w~~v_8F6P|b>sOr^_^@XUFmj^XqKmq(A96UnD- zvuL5dD8|X-h9t6en`Jd_j(_jHBMyb_jhCAcXEOAn*yKRili+l%qgzHjmN2&!K695h zF+RxO6XW7t@2)ivq2K)W3Y7~2I}8{B+^kN*ZZH~xi11rICRht$h$NKrSbS#a8 z?&T!E&vl>}lO_hQ@xBjRX^N9k9=)5D!iSe*KeX*m_pN& zav$hBZIa*W2UxLQP8-KW95t_vKcMR&1`PQlA>!_8(f5N2Bjv z?>mW9=TrNmXG(r^+t5Ad4L$wvTjH(vN`(#Aka323b9p>PHAl^Zh)Un@WX(1oCBOW` zxw;B{@DtYsM^qI+f^J^J87kem5xKFr_Nq7Ep;zu-ZUD8ANTxI^Uxpsy6lnUs?jO~p z_z67PeTBHo@lpqcPY%<%0X3FFRqs!Ua2Lxx%NQyAF9u((5$_U(ks;m33x8yl?bd}g zs21A1p!Yxdu`Hj{aar&$wB}gE2M=na0QVBY0ja3Do}p+%B~q&m#}%kIwzBl5WeRK8 zd1(7g&RbI5&5jg>)WCMepK0%&a~IRUiF5_2DjKK?#7tgMH}T!RcN_c3SmhqJTVvVZ zQ_5~=EGeR?D*cZtI~Xxqdo8W;JKKl65ZD@>NZ~#LkEDibD}qInx2i2wpIL=)_>2Jz z^8YD1_i(2F_m96f8#AY2&Z&(#Y&n)gNNsc4oXsIZX5~~llpIPliwqU!oD`Zwew$^L{+E_}g7FLJ{WIJ?x;gJ<1nX9H6n_?r4wb~ zm${^0>Ben@vkzyglJ*f|nDQLydF}7?{k9yB2Z!36(2LI=i|Dmqt#3mi#gl#ZdHND% z7o)*erdi^ z^rt)IzFO1bovxJ7qZ~R}XyWbz3+#rnDG~Cfm#+1bAr+UvIMGc>rB2Q=PllEV2EjUD zCJm=b1!~#zg>ym+Fd;2VKm{iihRKl&`rAR(J(aQm$mlCF_twyB&r~iTtu|Uv7KZF? zBJ85O{|YKYpTI)qMqJS=x3Zyv?Q}9bB6=eU#{nOS%G7=Os$q2^q4i=jZkoV@#|;O_ zMWJuNq#YbPIi=zredYofrrf5f0DiXM8lanLI-dkg2ZKT9p>I>zrd-?(X?T%NZ{0fb z5Q?NK?Tbxx^v!6qGk-Ia0#AJrD}!R`46LFw#h&q97-zMmPjchw#t4mj+eFZ2C^+c- zq1E!A_sym@Boxiz7r-W9_`7iyTC&4diHY}@#ddg-!*)^$?+gVl+$h=d@cJL1Z}3N8 znNA|7n(gp0%*~c-5Nh+kO!xX1Ck6os$S!OmAJs>uhX^eW8v4Fz<&~;+znSy3{ba*IldQ~|$CM~``(sv+qz~WeB+g^q zH|r{>XQ`nj`RZN4rv#4#D_Yw6cv^~Ui4x^O?xd~86+Rs4?f!3YAP^-S0lm>`Kw1IF zyBMDi$V}6(rYS)59rEm#Wd^F}oG3ZhA9#vB@lJ6QBtk%Da!`Hwelh?A0I(`+be z^IxV`Ca+7R_>O?YEi}UHu*1XMnN~qDAhT?+#Icoke#i2N3!R=AqoO_|OP%1`MJ0pmLp+$w>%ezk2lpOFFZU zudf(Zg28J<+^O9<0LSgq?pSBh#_#e8ehj}Q(GsteKZy{ARmzas)Z3o|e+02HF^NRZ zw<};Av3O3hW@2TF9hJy{ECoYxn%_0tQH4vpO5WZimOb9HIB&@_rbX{w`WEaqhgmpc>Y}z1oX+1FI{M%B=qz-yd zGs_LU&BPJotCG3?TWJXQgu%nS(Er%bWDu`}vhaD~iSpG!IR03jlE2)4NxasUqq~3t zEXw_2RZg? zp9YuYu}6ai9Dlp;yL|mraWm_Lq3plsZ@gMm^~hEC$)V;MEKF`&Ya8Lc3x8Xy71rS^ zZNF;1N|@f(hxKMhIUFw`G z9lPcJPd{2giu1A9S9cm>{rA^uB-Evsz6aTo%0ip$bksl<0nm?_j7iHk=(Dh=O0;?S z+Tr@t(#^I>w^*4-*C!SQP2|p;im*jUdbS_~;;a@nSt>b)$DR=gY8+F^TY$Z&Qf9;; zKe6%8E`+uOd-Y3Yo^|}j^;1I>2rGvTW+#%QCe^mlE8=sW0j!*h97tGJ^7W58xfHw8 zgxb)1rlTwXP|Z1k2(*!}aFqy%>+2#2_P=oAoz6QgipcED(Q8phfS^dgJim zU`RITKY(RF{g*ZL8#jO5Ud3lfDmOzE!icl3yb$O((!=PyOucaYkFt6f3HtTW?f4S} z5a?NS%;kT8-;haKNV=n(E?G*Z{8i}Znv;hA1F9bz^omMd9`P3+_l7H(>=7i-tI^&N zG5J*67n12k>h^=u+c%nq_jCnt?W>9n&kyC~w0J7*J9b@b$<&!s{Tx4-w3QZqh2pwr zPqbi*?ZbMb_`%EK1EkI=k+PV~MZ6yXW+6 z^hw40{=zv}@*$1L^$hDmjqLC7Khnp3m8%Y1>=pJfG{_MgrW~6xnerp&^7~DXlWpJF zKNZmux@Ec%LH>CC;lcb$@=a!TfY6e1e!kWBxtHC)2z z;qx3SP>r2BdbDWeZs(=^{{ffp4y*Q^Vjbn`MYl--OKmpmH#G+Qhl{oRy}8OMZ5FYB zfg`w3kEve);3ylX8f)w`OC#_;7k@Okhp9gDFY`j?zP1Avm-{6=^eV;;L@2ikLiTy4 zPN`mfF(Q`z8?}Z=8cl5@f@J$$hNjnaY+^TaQyZ9s0fHad-i-Je=G&gwn^J2B)HxzY zM-VVU$S%FvC2*%x-G8rVpOrfP9r@05mFshmIyd!5s@^{Gjp`^_v@$`HZ zUDy}J3waFhHXvVi44J|38^eZjbWDkWmNeJAwJS%iRx}3eb<>|c-nyOxNQe4SlFLw} zi4MF6p9n&g{Aw(|E(JSt#Ga-odHQjI8tYCFFd(b~-W#rG%2(0wAH87MjTqkK3GCa} zbCVy#lJrxDvtv^+6TBhvZLw_x-ECQj!i5MiRD@y)YHH&PQy9Xc@EPD~U3^8FDo2&19F$Rh%B)m6tceT# zFGVMezl&i?ome~Se;5F9QwAXs2g-3QpDQ(Z2v6fT>>_QxX-e>ce&~#Idgw-K#de~uq^b)YU<=4W z0S{NEdmEZFueDb}r+mvVteg*rWpQiY|CXE5=J1lrrx?t*74c%)ORjW$S13Y;d-%yq zE%FC_PS0?g)(xgimG8r7bN@jk4N*U7xyj-PY~7`Re?%#%KvX=5O%^`s@p7@v-Q?;P z0#x1~@>HuiQk(6ZtGVD^yXfERKI&GOBy4(~*vcrLocVBtmU?nHI@A=^U2w!6NnkJ*PRyHit zO}g~j&IFJ0YxnHheN}qcrXEDxt+V@X?9ClMOdv}6nFTs!WO_`3!S0DLpJ7(kHRul? z9&6{LwK#zDcmo-k>1I}k+OLa3!i-5v7vY6_Ql(mc#v1xEiCD;a-YHhZXR+X z{pMh=`%|L^h@W?*{o^o;z`GEFBglF4R;6NZ`u3K=4>@83w!HGyJ!TsZG)m&Fl>0BI{a3uEZ^!$3 z^1`3jmi>m2NSe@JV(E)`etZ^*NXs(Va?3NyQ2zZtpi}XzAL1eTdzM}>je|VPogOm3 zg|7+|fe)+`KyEgwB&9rH+v-(>wHIg$`9_4e>vEs@@+y|10B?fAK#WD(DZ8SIz`Nj9z`-5`$3`KSg2yWg9JlITA=d@-$r;hD0Lt$W zOx8JB?t**4jmfekX0`t-i5C4+B@%0_Px7C1ZHF9l3b4np&wqLrP&AR)rwyi2Ia{Nj z4XtY$r7P4-QDxso-u2NBeQ=a>P91)4kpKI{A?LW&1v%AzLnvfvN_&i8z4^+ARPi#z zTKUAogTx?>*yZ!z)GW&nY-ry$hN0Y@_x0nvs0PcaNKCBP`xG1$wQ9CLN-QCL0>ult}^h$ z{X%nZR!ou>M5VMUA+6oP1>9QK7Zrosy$)R#7mO`++y{5qNg;~PcH0O|oCa-sRoYea z86yJdJ@Z4<4(H`9VyW@pO_4)Pndsq!GC-(5>Y(^T6mwZ;A)^VP+{%&4VR2`Of5t! z_TO4ZclJ6{KJSR9I}{A{cw(6=sCDI(uK-?7mJv3H&P3Zyp>svDS4AzvU&KNs=0Yy@Y%nV{Xin z7thp4>@(WMlAN_GCpwTWa!T?@(Eg4G#bDW>m5f`fCuPyX{#?34ya(>3lo%}_O71a= zNV>l`?*L$W0m|u@zuN%$ln5J-J^ETy*b;K1i%lSeThy@(5);}j$-uAX1|jI8i z3~S%hwd;-`HZhxP{%WxkFh!RrLMXDsT68Jjf)4DPi3S8O_mDuu8cpfJHs3Z%mNFj0 z^aR7bQf1;VF$`UZ+AyyRfFYrR`Ab7cC-NGxz2@W9QyGNt72wr^?9Lb#NCBm>m9LA& z&_z#5hzqJg$xD%fz0Fr*lZp8nKLK=ABb$BKI1^Ogt@RE~mJoApf*F01?Vckk>-s9k zweMw|X(Kb@={a}ulNB*7W2)jGH<@CR9Aq0Y2)g7-8Mi5tO?kfkXz74phEzcH8~^Pcs0&a zNuT-H73Jx(FV<6-0-wSJ(T_Zo>}Y@f6C5#jK2`O=*F9^W67mdq+6jc!A+qGdMB*9B zewtAEc(4-78bqjg0tcizn4r=$7bw5ey~C%A@M&%W*VwzF$R@SB;WaWS z^U}+F5C*{}O-QfEruu`whuP67q1U<}+Z;-*gzF|k0i!SB?ImjJU-IKiSyZJie|xxn zG}|>$U~26$zx4!mH07(T2>|(|GC9-uc#CPVY;P_0>+0f9D+97Ooi0N z9RBOnGg$sw3-Vk3m!TT5ducH;)NB9UV+W5FEZlRKE z-A8?KOMg+e9Beb6A78v~6xieTi$;0BXalZO((3f?N19zrC!p1OpAj(^R^{hU3kO^? z7uJ`lO?q(a*uhs1aGwqWRntmtPXdX(Mi?Me-MarwyTgbfkA1cF-VHG8;%X z(QRgyRtJz52+e`%uCxDLve?;3cIQZaT)!@*(w85F^L^W?!jbw?{b>SWEc#K;BQ>zs zRW?>wLhCy*-r>`=wEOHrbL}`^eSaF+@br$gR&^Jxqc&#P9qPQkxVG@Y0HttS=_vOc z?X;xPB@bb+oV5IzMb8}@4jD5Ac!mec#yq^ z{58?gRoY4r9$0geEL|RB#qnUcI z`b*PY(|1RzUEN47MyOF%bs$67Mb%X#Dy^0$?IFdzVMUb697(9ypKfi|T3GC5PAzfQ z+ZtM(zu9neEh%U0FI7(^=^!~j zU{MO$L-&&@MTZoaf2PbFy>Cma_>%2HCi#|sRUK4W1Kb)k4*eaM-MVo@qxeetk+X}O z(sFo1e&mW$iZP+ZP&(j)roIMAY{DFh4o-QP$gE+nIONXAhR| zn@t;D62JU0<3n)3`Hc4)N9#{E&w*c$%$_Go)jYl?#YCrS4l6wX-552TyJ$7~wV(|3 zUzTOJTPV3ER8Dr}hono-)94O+9tNak*GaBLhO7P;?&h~Wy6bhO@kaX$6B496BX=eN zlm4mU{E`CV0BAfhN#5E-pmy% z8iOSH)sPi|3+oN?D4O@<`p#mr=7-mdcdm0(J!Hm{B;$QX8pB-m3P8NtOo8;?H#IWTcIy#d&yL1>=jNI`U zl^HI1yND$!NhS(}2jA>S-3-Rd$|Vd6W9k}^vax_XR>y}h^%HG$auu+FIDjvp%l%nH zsAk>Wl0Ix&Q!LYXarqG7>|&`p0}W*17f!)|l+C8zP3Fstr7StC;Nvf`=#}4IDCx1JE!N6gl=EP0Fo7h$n-8v&2;bDWXA4w2-3~zg$D~& zHg7&BYkp*{*F`OzCsVQ5EW0FD#k7PXAK@ltSVfYQDi zKvllilbs5ZGHUc) zFUDM(5%2L|f_xY*5W)DWPC;!m`b&;Bz;7ayF`6c0SfPlG6-geQu?0g24j@ZwLH_Z6 z0*t(fIg7RShUP#*y_I-B4b}Opz?NIQKaxd(c~>PO8mCWgrge7uu!zfR>ixRqH=ee+ z$y)73-%zE>!EqVJF32*JRzXcoaoJP`hQ(-oeLVi!%kBecjG#agj~u|ZtYAhhO#%W z6>w1Wui-}T*E>#j;x6%Xr5tzxFxnj(ySL;$BhZg!m6=gmKdG+00t(|jn%&h zV_MEcfe)oz-%^BY?NJ+6K7o<&RTW|y=4o65Y#^J@=wBNm)e1rjWM$1Q+JI*bHA(j; z%Xro$p2n0aIA=#}AUFb@8=^I74^Th&FZ=Ky!>`3hSW&nGR7^O63V)`Q&(spu4J)3} zVpced4aua#0iha!>QCA|$0UJQ-a!95b*)^cDOm`T++MB+|Ng>l)tFrdfz>EtI%-TLwOHBiMJgl^S=s}iw*DMvvY+ys7Ff=Oa2mng*h@R0J= zqr0MKrcRw_9TaqRk6B>7zh~J|KK8EGE?HkPU;WcBYj3?PIsM_F1yf@ykBs9Z{79{^&lMCPo`b6ow6il6Zn%`oM z9eN|(+t4@fhL#M{j@(nBoQkKexm{>}l6X^Q?91rfg7k&Qub;Owez^vn5?3Fdv2#?o zaaXF?!+s{gFLuqztWl0xY~bNS&?@7G5Ox)>h3$1g(#qwmd#dzg@BUQVty!blyq2&#jIgZMJ}DWz_P28- z7N;4fJV6}tqe(bc$f9UXs>7b70$cacCcRXg8dG;g?BOy$?~@fo=jC)P{6_M4GpM7D z+p&BX7~YRSowZIe-@}LP+wT{LpeOwZn|p_Zw^f2Zwm}r_FgMeW>#013#`Xd6ul;%I zaFWnti|IDyZk`^XHSmX3{OF{bDyW;`%IaAnpi(Np?vX*7)YO@H6@AFir70ls&YTDc zEk@LA5^Uw>H#Ht)4;kZO`JF39;@O z#6q+)8v$8CULN-;Ft+u2yabrt7)@y))9mz;7}8ao6G-b!>b_t|D$!VVnBr@-i^BuEYk5 zIT1;4X-lg^U0C$+z=Ikns;It0m@t{qW<3;s{*oni@XMhW!D!XjGf&qn_P#{tRQsBT zqo5+9(o=O4qb z9{*RTM6G2NJI;*PAYScVV7Z?3M;c1x$Sn_Ay&A&E3smguUwyP&N`d$BBp&ozh?S61 zl@p$(GWxUIcj>a2^l(uM1hYGH7(QuAY#@uj0dt}7AE65g1DRwM}! z-ZuaIkN*J{P|jfYt0%KzLR*$P%kWlSB1~XjMf~mJHkn1!^>6Khy2tDbM%{Rl_HXU} zm3g(dgD*Gam^2VL@+Z+MV7-0jT6{^zz6*O?C-X~21Ax$uWr8as^K(*S=|q4( z{@_x_)Br;H)5;P`bdpaRQ}x=#s99~KLB%G#7l0J8DX}-NmPD%l!1yz;oW#hDtK6dc z&IMfllB88SB3A9XrxH(nh0Bu*ZMwP=oOdeOUQ1w|J@YA}M)w$0o;ewRLc0jSfZ@0w z|9%>pY!ky+XsG)j>K$Mtu_XPlXtYev;YEWCGm{dOWClirJda}=S67j+_?}G`dN$+3 ztd|WJ#krKgaN(R5@5Ob6H1}y96e?G#8$+oL+U7TVa3qF+!Z{y;ux!vKQ>^H<_$HGIxsF1^Q|g#f)bLgw z5C(o4!aDEdi%VjIJU}HW6M;#WPsUADmn2DkH|;PsGUG*Hej^DaR`sea~$P}Bc!#N(pMdvU(b~;t19&|rgJoma6r&E6EaWl&O zaDQRTrpn=i@$c&~1@$T}YC0zdSz)P{hK~%sKQ{Mv?L$Q7M@h>+%nK~^-sxWjU8*R1 zJk{srhh|u}AfrMvyLn+qv4U>-5Q%9?`=G{DKl#b)nWgRPL{mmup)eIvG$niA9}%kE zTK*W3S#0aU(hWpuycP6r=S_5%af$~^Xm@kW`{AVr0}pCWbQzpm1ja;9Ao>p;ySno0!`wM%i6ZN=c4@1 z6kNOySDVC~y%&>|Gi|yjW06iA@ld~We9X^o+eR^4o8Uq~M$8B($bVc@6K?-U-^rGz zx!*r=Lo9Ue9rvNU=LYWK31|$K8SRgreGkRIug2=YJO0&K{ob#;t)BkXdCo4{6T+#a@qDC6xa>DYi+ww}ysl!=%Ei}*z(R_B@9+|H_ zsS!E6aU;H|PR3)tVCy}lT-zTvI%fKH4<{{0P3WzxVb$4v4Ur0^A#OS4u6v+H3wwMa zKh-mUitbe5=_$eq@kKm&^zFdf!h&0%y>`XI|A4}K)jDVSZq;^$^Nh`@rC6kL{fIr@3&oa z%aI8t{GR+=H{WgVA%8mRG=(l~*5lUy0qWq*y=(diJYGC(eo_t*Lf-r0O7aL#hDD=A zhsqW8u9;@$D@N<{=v=2NGAjLlK)>qUw;}m9wprSQ{ca_1{kW$IrT!~*gOvkr&&sQZ zGG)F}CC7ek+rM^3@oUV?A1d#?b^_~geGMrXz}*H&;0L{ikvN1q26})t!_@ z7dG6!*>dN8z<+(T`J9JFfbwUzZ}%G&LrS<%2*hE^=uTXr(}BywC2%0D+_PY~WhheR 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 z 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%0DHMv7AQ$Satl7f41 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

9^K=3$Ur;k33h=zGqX09=y$3OKG6$7Dl{#qf6 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