From bde9eaef4396e4af9b4886583bc6feeee428f122 Mon Sep 17 00:00:00 2001 From: SKT-Sukatat <82657530+SKT-Sukatat@users.noreply.github.com> Date: Sun, 17 Sep 2023 15:27:41 +0700 Subject: [PATCH] initial_commit --- .../access_control.cpython-311.pyc | Bin 0 -> 2260 bytes access_control_python/access_control.py | 28 + access_control_python/main.py | 9 + access_control_python/requirements.txt | 1 + access_control_stm32/.cproject | 176 + access_control_stm32/.mxproject | 25 + access_control_stm32/.project | 32 + .../.settings/language.settings.xml | 25 + .../org.eclipse.core.resources.prefs | 2 + .../.settings/stm32cubeide.project.prefs | 5 + access_control_stm32/Core/Inc/main.h | 83 + .../Core/Inc/stm32f4xx_hal_conf.h | 495 + access_control_stm32/Core/Inc/stm32f4xx_it.h | 66 + access_control_stm32/Core/Src/main.c | 270 + .../Core/Src/stm32f4xx_hal_msp.c | 149 + access_control_stm32/Core/Src/stm32f4xx_it.c | 203 + access_control_stm32/Core/Src/syscalls.c | 176 + access_control_stm32/Core/Src/sysmem.c | 79 + .../Core/Src/system_stm32f4xx.c | 747 ++ .../Core/Startup/startup_stm32f411retx.s | 435 + .../Debug/Core/Src/main.cyclo | 5 + access_control_stm32/Debug/Core/Src/main.d | 54 + access_control_stm32/Debug/Core/Src/main.o | Bin 0 -> 743784 bytes access_control_stm32/Debug/Core/Src/main.su | 5 + .../Debug/Core/Src/stm32f4xx_hal_msp.cyclo | 3 + .../Debug/Core/Src/stm32f4xx_hal_msp.d | 54 + .../Debug/Core/Src/stm32f4xx_hal_msp.o | Bin 0 -> 715084 bytes .../Debug/Core/Src/stm32f4xx_hal_msp.su | 3 + .../Debug/Core/Src/stm32f4xx_it.cyclo | 9 + .../Debug/Core/Src/stm32f4xx_it.d | 56 + .../Debug/Core/Src/stm32f4xx_it.o | Bin 0 -> 711140 bytes .../Debug/Core/Src/stm32f4xx_it.su | 9 + access_control_stm32/Debug/Core/Src/subdir.mk | 42 + .../Debug/Core/Src/syscalls.cyclo | 18 + .../Debug/Core/Src/syscalls.d | 1 + .../Debug/Core/Src/syscalls.o | Bin 0 -> 83120 bytes .../Debug/Core/Src/syscalls.su | 18 + .../Debug/Core/Src/sysmem.cyclo | 1 + access_control_stm32/Debug/Core/Src/sysmem.d | 1 + access_control_stm32/Debug/Core/Src/sysmem.o | Bin 0 -> 47808 bytes access_control_stm32/Debug/Core/Src/sysmem.su | 1 + .../Debug/Core/Src/system_stm32f4xx.cyclo | 2 + .../Debug/Core/Src/system_stm32f4xx.d | 53 + .../Debug/Core/Src/system_stm32f4xx.o | Bin 0 -> 711424 bytes .../Debug/Core/Src/system_stm32f4xx.su | 2 + .../Core/Startup/startup_stm32f411retx.d | 2 + .../Core/Startup/startup_stm32f411retx.o | Bin 0 -> 6220 bytes .../Debug/Core/Startup/subdir.mk | 27 + .../Src/stm32f4xx_hal.cyclo | 27 + .../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d | 54 + .../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o | Bin 0 -> 724168 bytes .../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su | 27 + .../Src/stm32f4xx_hal_cortex.cyclo | 32 + .../Src/stm32f4xx_hal_cortex.d | 54 + .../Src/stm32f4xx_hal_cortex.o | Bin 0 -> 727188 bytes .../Src/stm32f4xx_hal_cortex.su | 32 + .../Src/stm32f4xx_hal_dma.cyclo | 15 + .../Src/stm32f4xx_hal_dma.d | 54 + .../Src/stm32f4xx_hal_dma.o | Bin 0 -> 722892 bytes .../Src/stm32f4xx_hal_dma.su | 15 + .../Src/stm32f4xx_hal_dma_ex.cyclo | 4 + .../Src/stm32f4xx_hal_dma_ex.d | 54 + .../Src/stm32f4xx_hal_dma_ex.o | Bin 0 -> 720212 bytes .../Src/stm32f4xx_hal_dma_ex.su | 4 + .../Src/stm32f4xx_hal_exti.cyclo | 9 + .../Src/stm32f4xx_hal_exti.d | 54 + .../Src/stm32f4xx_hal_exti.o | Bin 0 -> 714412 bytes .../Src/stm32f4xx_hal_exti.su | 9 + .../Src/stm32f4xx_hal_flash.cyclo | 17 + .../Src/stm32f4xx_hal_flash.d | 54 + .../Src/stm32f4xx_hal_flash.o | Bin 0 -> 718624 bytes .../Src/stm32f4xx_hal_flash.su | 17 + .../Src/stm32f4xx_hal_flash_ex.cyclo | 22 + .../Src/stm32f4xx_hal_flash_ex.d | 54 + .../Src/stm32f4xx_hal_flash_ex.o | Bin 0 -> 721568 bytes .../Src/stm32f4xx_hal_flash_ex.su | 22 + .../Src/stm32f4xx_hal_flash_ramfunc.cyclo | 4 + .../Src/stm32f4xx_hal_flash_ramfunc.d | 54 + .../Src/stm32f4xx_hal_flash_ramfunc.o | Bin 0 -> 710636 bytes .../Src/stm32f4xx_hal_flash_ramfunc.su | 4 + .../Src/stm32f4xx_hal_gpio.cyclo | 8 + .../Src/stm32f4xx_hal_gpio.d | 54 + .../Src/stm32f4xx_hal_gpio.o | Bin 0 -> 715924 bytes .../Src/stm32f4xx_hal_gpio.su | 8 + .../Src/stm32f4xx_hal_pwr.cyclo | 17 + .../Src/stm32f4xx_hal_pwr.d | 54 + .../Src/stm32f4xx_hal_pwr.o | Bin 0 -> 717140 bytes .../Src/stm32f4xx_hal_pwr.su | 17 + .../Src/stm32f4xx_hal_pwr_ex.cyclo | 10 + .../Src/stm32f4xx_hal_pwr_ex.d | 54 + .../Src/stm32f4xx_hal_pwr_ex.o | Bin 0 -> 714388 bytes .../Src/stm32f4xx_hal_pwr_ex.su | 10 + .../Src/stm32f4xx_hal_rcc.cyclo | 14 + .../Src/stm32f4xx_hal_rcc.d | 54 + .../Src/stm32f4xx_hal_rcc.o | Bin 0 -> 722244 bytes .../Src/stm32f4xx_hal_rcc.su | 14 + .../Src/stm32f4xx_hal_rcc_ex.cyclo | 7 + .../Src/stm32f4xx_hal_rcc_ex.d | 54 + .../Src/stm32f4xx_hal_rcc_ex.o | Bin 0 -> 715480 bytes .../Src/stm32f4xx_hal_rcc_ex.su | 7 + .../Src/stm32f4xx_hal_tim.cyclo | 0 .../Src/stm32f4xx_hal_tim.d | 54 + .../Src/stm32f4xx_hal_tim.o | Bin 0 -> 707292 bytes .../Src/stm32f4xx_hal_tim.su | 0 .../Src/stm32f4xx_hal_tim_ex.cyclo | 0 .../Src/stm32f4xx_hal_tim_ex.d | 54 + .../Src/stm32f4xx_hal_tim_ex.o | Bin 0 -> 707300 bytes .../Src/stm32f4xx_hal_tim_ex.su | 0 .../Src/stm32f4xx_hal_uart.cyclo | 61 + .../Src/stm32f4xx_hal_uart.d | 54 + .../Src/stm32f4xx_hal_uart.o | Bin 0 -> 765864 bytes .../Src/stm32f4xx_hal_uart.su | 61 + .../STM32F4xx_HAL_Driver/Src/subdir.mk | 72 + .../Debug/access_control_stm32.elf | Bin 0 -> 845560 bytes .../Debug/access_control_stm32.list | 4902 ++++++++++ .../Debug/access_control_stm32.map | 3273 +++++++ access_control_stm32/Debug/makefile | 94 + access_control_stm32/Debug/objects.list | 23 + access_control_stm32/Debug/objects.mk | 9 + access_control_stm32/Debug/sources.mk | 28 + .../Device/ST/STM32F4xx/Include/stm32f411xe.h | 8680 +++++++++++++++++ .../Device/ST/STM32F4xx/Include/stm32f4xx.h | 301 + .../ST/STM32F4xx/Include/system_stm32f4xx.h | 104 + .../CMSIS/Device/ST/STM32F4xx/LICENSE.txt | 6 + .../Drivers/CMSIS/Include/cmsis_armcc.h | 865 ++ .../Drivers/CMSIS/Include/cmsis_armclang.h | 1869 ++++ .../Drivers/CMSIS/Include/cmsis_compiler.h | 266 + .../Drivers/CMSIS/Include/cmsis_gcc.h | 2085 ++++ .../Drivers/CMSIS/Include/cmsis_iccarm.h | 935 ++ .../Drivers/CMSIS/Include/cmsis_version.h | 39 + .../Drivers/CMSIS/Include/core_armv8mbl.h | 1918 ++++ .../Drivers/CMSIS/Include/core_armv8mml.h | 2927 ++++++ .../Drivers/CMSIS/Include/core_cm0.h | 949 ++ .../Drivers/CMSIS/Include/core_cm0plus.h | 1083 ++ .../Drivers/CMSIS/Include/core_cm1.h | 976 ++ .../Drivers/CMSIS/Include/core_cm23.h | 1993 ++++ .../Drivers/CMSIS/Include/core_cm3.h | 1941 ++++ .../Drivers/CMSIS/Include/core_cm33.h | 3002 ++++++ .../Drivers/CMSIS/Include/core_cm4.h | 2129 ++++ .../Drivers/CMSIS/Include/core_cm7.h | 2671 +++++ .../Drivers/CMSIS/Include/core_sc000.h | 1022 ++ .../Drivers/CMSIS/Include/core_sc300.h | 1915 ++++ .../Drivers/CMSIS/Include/mpu_armv7.h | 270 + .../Drivers/CMSIS/Include/mpu_armv8.h | 333 + .../Drivers/CMSIS/Include/tz_context.h | 70 + .../Drivers/CMSIS/LICENSE.txt | 201 + .../Inc/Legacy/stm32_hal_legacy.h | 4014 ++++++++ .../STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h | 297 + .../Inc/stm32f4xx_hal_cortex.h | 407 + .../Inc/stm32f4xx_hal_def.h | 210 + .../Inc/stm32f4xx_hal_dma.h | 802 ++ .../Inc/stm32f4xx_hal_dma_ex.h | 102 + .../Inc/stm32f4xx_hal_exti.h | 366 + .../Inc/stm32f4xx_hal_flash.h | 425 + .../Inc/stm32f4xx_hal_flash_ex.h | 1063 ++ .../Inc/stm32f4xx_hal_flash_ramfunc.h | 76 + .../Inc/stm32f4xx_hal_gpio.h | 325 + .../Inc/stm32f4xx_hal_gpio_ex.h | 1590 +++ .../Inc/stm32f4xx_hal_pwr.h | 427 + .../Inc/stm32f4xx_hal_pwr_ex.h | 340 + .../Inc/stm32f4xx_hal_rcc.h | 1459 +++ .../Inc/stm32f4xx_hal_rcc_ex.h | 7111 ++++++++++++++ .../Inc/stm32f4xx_hal_tim.h | 2146 ++++ .../Inc/stm32f4xx_hal_tim_ex.h | 354 + .../Inc/stm32f4xx_hal_uart.h | 884 ++ .../Inc/stm32f4xx_ll_bus.h | 2105 ++++ .../Inc/stm32f4xx_ll_cortex.h | 637 ++ .../Inc/stm32f4xx_ll_dma.h | 2868 ++++++ .../Inc/stm32f4xx_ll_exti.h | 954 ++ .../Inc/stm32f4xx_ll_gpio.h | 981 ++ .../Inc/stm32f4xx_ll_pwr.h | 985 ++ .../Inc/stm32f4xx_ll_rcc.h | 7096 ++++++++++++++ .../Inc/stm32f4xx_ll_system.h | 1711 ++++ .../Inc/stm32f4xx_ll_usart.h | 2521 +++++ .../Inc/stm32f4xx_ll_utils.h | 307 + .../Drivers/STM32F4xx_HAL_Driver/LICENSE.txt | 6 + .../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c | 615 ++ .../Src/stm32f4xx_hal_cortex.c | 502 + .../Src/stm32f4xx_hal_dma.c | 1305 +++ .../Src/stm32f4xx_hal_dma_ex.c | 313 + .../Src/stm32f4xx_hal_exti.c | 547 ++ .../Src/stm32f4xx_hal_flash.c | 775 ++ .../Src/stm32f4xx_hal_flash_ex.c | 1347 +++ .../Src/stm32f4xx_hal_flash_ramfunc.c | 172 + .../Src/stm32f4xx_hal_gpio.c | 533 + .../Src/stm32f4xx_hal_pwr.c | 571 ++ .../Src/stm32f4xx_hal_pwr_ex.c | 600 ++ .../Src/stm32f4xx_hal_rcc.c | 1122 +++ .../Src/stm32f4xx_hal_rcc_ex.c | 3784 +++++++ .../Src/stm32f4xx_hal_tim.c | 7621 +++++++++++++++ .../Src/stm32f4xx_hal_tim_ex.c | 2428 +++++ .../Src/stm32f4xx_hal_uart.c | 3751 +++++++ access_control_stm32/STM32F411RETX_FLASH.ld | 185 + access_control_stm32/STM32F411RETX_RAM.ld | 185 + .../access_control_stm32 Debug.launch | 82 + access_control_stm32/access_control_stm32.ioc | 162 + 196 files changed, 120850 insertions(+) create mode 100644 access_control_python/__pycache__/access_control.cpython-311.pyc create mode 100644 access_control_python/access_control.py create mode 100644 access_control_python/main.py create mode 100644 access_control_python/requirements.txt create mode 100644 access_control_stm32/.cproject create mode 100644 access_control_stm32/.mxproject create mode 100644 access_control_stm32/.project create mode 100644 access_control_stm32/.settings/language.settings.xml create mode 100644 access_control_stm32/.settings/org.eclipse.core.resources.prefs create mode 100644 access_control_stm32/.settings/stm32cubeide.project.prefs create mode 100644 access_control_stm32/Core/Inc/main.h create mode 100644 access_control_stm32/Core/Inc/stm32f4xx_hal_conf.h create mode 100644 access_control_stm32/Core/Inc/stm32f4xx_it.h create mode 100644 access_control_stm32/Core/Src/main.c create mode 100644 access_control_stm32/Core/Src/stm32f4xx_hal_msp.c create mode 100644 access_control_stm32/Core/Src/stm32f4xx_it.c create mode 100644 access_control_stm32/Core/Src/syscalls.c create mode 100644 access_control_stm32/Core/Src/sysmem.c create mode 100644 access_control_stm32/Core/Src/system_stm32f4xx.c create mode 100644 access_control_stm32/Core/Startup/startup_stm32f411retx.s create mode 100644 access_control_stm32/Debug/Core/Src/main.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/main.d create mode 100644 access_control_stm32/Debug/Core/Src/main.o create mode 100644 access_control_stm32/Debug/Core/Src/main.su create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.d create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.o create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.su create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_it.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_it.d create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_it.o create mode 100644 access_control_stm32/Debug/Core/Src/stm32f4xx_it.su create mode 100644 access_control_stm32/Debug/Core/Src/subdir.mk create mode 100644 access_control_stm32/Debug/Core/Src/syscalls.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/syscalls.d create mode 100644 access_control_stm32/Debug/Core/Src/syscalls.o create mode 100644 access_control_stm32/Debug/Core/Src/syscalls.su create mode 100644 access_control_stm32/Debug/Core/Src/sysmem.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/sysmem.d create mode 100644 access_control_stm32/Debug/Core/Src/sysmem.o create mode 100644 access_control_stm32/Debug/Core/Src/sysmem.su create mode 100644 access_control_stm32/Debug/Core/Src/system_stm32f4xx.cyclo create mode 100644 access_control_stm32/Debug/Core/Src/system_stm32f4xx.d create mode 100644 access_control_stm32/Debug/Core/Src/system_stm32f4xx.o create mode 100644 access_control_stm32/Debug/Core/Src/system_stm32f4xx.su create mode 100644 access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.d create mode 100644 access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.o create mode 100644 access_control_stm32/Debug/Core/Startup/subdir.mk create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su create mode 100644 access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk create mode 100644 access_control_stm32/Debug/access_control_stm32.elf create mode 100644 access_control_stm32/Debug/access_control_stm32.list create mode 100644 access_control_stm32/Debug/access_control_stm32.map create mode 100644 access_control_stm32/Debug/makefile create mode 100644 access_control_stm32/Debug/objects.list create mode 100644 access_control_stm32/Debug/objects.mk create mode 100644 access_control_stm32/Debug/sources.mk create mode 100644 access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h create mode 100644 access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h create mode 100644 access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h create mode 100644 access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.txt create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_armcc.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_armclang.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_compiler.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_gcc.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_iccarm.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/cmsis_version.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_armv8mbl.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_armv8mml.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm0.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm0plus.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm1.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm23.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm3.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm33.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm4.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_cm7.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_sc000.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/core_sc300.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/mpu_armv7.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/mpu_armv8.h create mode 100644 access_control_stm32/Drivers/CMSIS/Include/tz_context.h create mode 100644 access_control_stm32/Drivers/CMSIS/LICENSE.txt create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c create mode 100644 access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c create mode 100644 access_control_stm32/STM32F411RETX_FLASH.ld create mode 100644 access_control_stm32/STM32F411RETX_RAM.ld create mode 100644 access_control_stm32/access_control_stm32 Debug.launch create mode 100644 access_control_stm32/access_control_stm32.ioc diff --git a/access_control_python/__pycache__/access_control.cpython-311.pyc b/access_control_python/__pycache__/access_control.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e98237c7060a5c288b9eed8e1c25307646829ab9 GIT binary patch literal 2260 zcmc&#&ube;6rNe_u1B_HD~)RfE4Wbzan@8;adRr6rKHq`wmvjT4?=VqYgYEU(n^^f z5o}!WA(Rjbbs^wO54zNiaSo+_LFr#0nFWi5K%ghzRNPZ8$(z+`W624W_R!Jln;&o9 zoA=(gZ}yjDauh+!{ia(##}N8cPWnv^2PfBIu!|UCxPl6@S1P!w6cmgUw1`;jK4R*g zg3tl{d#w;-_!cs>V>w+mu&>`<;}&J5P#$z}UeHcHg>DyFsDK$ND0k2*D#R>xT?^&N z(iy%16Q)=rWd+Vt3xuinQ6bJWz)_|HjlvkrJt^J`_iT7U)}tmcn7w*#Wh-8qs32ZrAF0qgj-y+ z#ZqIX=!)w53%PPt>Q96H^&i{(r=>;#n zu%kXpO?s*9QR>=Z>e}PUc52>B&9_qX-8ks;x4_ox)9is{uxJKfW=I-to+b$P_ZmBs zsyFT&A_7C2-(Yj7++ZhKkH~FC)8&(jy}BmMnscTe`U1)7$=3i-59g+T%sk3G&^u)OhvdWL z4r`MP6hw<;{@F?bHXo7fA;~tcwu#{pqt$=@Zyx^(fNcE?=7`8g?8Z?5;P`WLqnDNs`Ma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/access_control_stm32/.mxproject b/access_control_stm32/.mxproject new file mode 100644 index 0000000..6e0acf8 --- /dev/null +++ b/access_control_stm32/.mxproject @@ -0,0 +1,25 @@ +[PreviousGenFiles] +AdvancedFolderStructure=true +HeaderFileListSize=3 +HeaderFiles#0=..\Core\Inc\stm32f4xx_it.h +HeaderFiles#1=..\Core\Inc\stm32f4xx_hal_conf.h +HeaderFiles#2=..\Core\Inc\main.h +HeaderFolderListSize=1 +HeaderPath#0=..\Core\Inc +HeaderFiles=; +SourceFileListSize=3 +SourceFiles#0=..\Core\Src\stm32f4xx_it.c +SourceFiles#1=..\Core\Src\stm32f4xx_hal_msp.c +SourceFiles#2=..\Core\Src\main.c +SourceFolderListSize=1 +SourcePath#0=..\Core\Src +SourceFiles=; + +[PreviousLibFiles] +LibFiles=Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_tim_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_uart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_usart.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_rcc_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_bus.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_rcc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_system.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_utils.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_flash_ramfunc.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_gpio_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_gpio.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dma.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_dmamux.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_pwr_ex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_pwr.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_cortex.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal.h;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_def.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_exti.h;Drivers\STM32F4xx_HAL_Driver\Inc\stm32f4xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f411xe.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core\Src\main.c;Core\Src\stm32f4xx_it.c;Core\Src\stm32f4xx_hal_msp.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Core\Src\system_stm32f4xx.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c;Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_exti.c;Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c;Core\Src\system_stm32f4xx.c;;; +HeaderPath=Drivers\STM32F4xx_HAL_Driver\Inc;Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;Drivers\CMSIS\Device\ST\STM32F4xx\Include;Drivers\CMSIS\Include;Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F411xE;USE_HAL_DRIVER;USE_HAL_DRIVER; + diff --git a/access_control_stm32/.project b/access_control_stm32/.project new file mode 100644 index 0000000..f24e2de --- /dev/null +++ b/access_control_stm32/.project @@ -0,0 +1,32 @@ + + + access_control_stm32 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.st.stm32cube.ide.mcu.MCUProjectNature + com.st.stm32cube.ide.mcu.MCUCubeProjectNature + org.eclipse.cdt.core.cnature + com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature + com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature + com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature + com.st.stm32cube.ide.mcu.MCURootProjectNature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/access_control_stm32/.settings/language.settings.xml b/access_control_stm32/.settings/language.settings.xml new file mode 100644 index 0000000..15f6ae8 --- /dev/null +++ b/access_control_stm32/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/access_control_stm32/.settings/org.eclipse.core.resources.prefs b/access_control_stm32/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/access_control_stm32/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/access_control_stm32/.settings/stm32cubeide.project.prefs b/access_control_stm32/.settings/stm32cubeide.project.prefs new file mode 100644 index 0000000..b6e3140 --- /dev/null +++ b/access_control_stm32/.settings/stm32cubeide.project.prefs @@ -0,0 +1,5 @@ +635E684B79701B039C64EA45C3F84D30=0128DB7B22BCDE154FEB5F4DBED2CA57 +66BE74F758C12D739921AEA421D593D3=0 +8DF89ED150041C4CBC7CB9A9CAA90856=AB868319CB57203C6EBBFA9F981B52E0 +DC22A860405A8BF2F2C095E5B6529F12=AB868319CB57203C6EBBFA9F981B52E0 +eclipse.preferences.version=1 diff --git a/access_control_stm32/Core/Inc/main.h b/access_control_stm32/Core/Inc/main.h new file mode 100644 index 0000000..be60ecc --- /dev/null +++ b/access_control_stm32/Core/Inc/main.h @@ -0,0 +1,83 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define B1_Pin GPIO_PIN_13 +#define B1_GPIO_Port GPIOC +#define USART_TX_Pin GPIO_PIN_2 +#define USART_TX_GPIO_Port GPIOA +#define USART_RX_Pin GPIO_PIN_3 +#define USART_RX_GPIO_Port GPIOA +#define LD2_Pin GPIO_PIN_5 +#define LD2_GPIO_Port GPIOA +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +#define SWO_Pin GPIO_PIN_3 +#define SWO_GPIO_Port GPIOB + +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ diff --git a/access_control_stm32/Core/Inc/stm32f4xx_hal_conf.h b/access_control_stm32/Core/Inc/stm32f4xx_hal_conf.h new file mode 100644 index 0000000..5d0c145 --- /dev/null +++ b/access_control_stm32/Core/Inc/stm32f4xx_hal_conf.h @@ -0,0 +1,495 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f4xx_hal_conf.h. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CONF_H +#define __STM32F4xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED + + /* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_ADC_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_ETH_LEGACY_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_PCCARD_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPI_MODULE_ENABLED */ +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_FMPI2C_MODULE_ENABLED */ +/* #define HAL_FMPSMBUS_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#if !defined (HSE_VALUE) + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz + The real value may vary depending on the variations + in voltage and temperature.*/ +/** + * @brief External Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#if !defined (EXTERNAL_CLOCK_VALUE) + #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External audio frequency in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 1U +#define INSTRUCTION_CACHE_ENABLE 1U +#define DATA_CACHE_ENABLE 1U + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ +#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_ETH_LEGACY_MODULE_ENABLED + #include "stm32f4xx_hal_eth_legacy.h" +#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED + #include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED + #include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_FMPSMBUS_MODULE_ENABLED + #include "stm32f4xx_hal_fmpsmbus.h" +#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f4xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_H */ diff --git a/access_control_stm32/Core/Inc/stm32f4xx_it.h b/access_control_stm32/Core/Inc/stm32f4xx_it.h new file mode 100644 index 0000000..37f04b4 --- /dev/null +++ b/access_control_stm32/Core/Inc/stm32f4xx_it.h @@ -0,0 +1,66 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_IT_H +#define __STM32F4xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_IT_H */ diff --git a/access_control_stm32/Core/Src/main.c b/access_control_stm32/Core/Src/main.c new file mode 100644 index 0000000..122dd25 --- /dev/null +++ b/access_control_stm32/Core/Src/main.c @@ -0,0 +1,270 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "string.h" +#include "stdio.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +UART_HandleTypeDef huart2; + +/* USER CODE BEGIN PV */ +uint8_t uart_buffer[10]; +uint8_t uart_index = 0; +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART2_UART_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init();; + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART2_UART_Init(); + /* USER CODE BEGIN 2 */ + memset(uart_buffer,0,10); + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + if(HAL_UART_Receive(&huart2, uart_buffer+uart_index, 1, 250) == HAL_OK) { + uart_index++; + if(uart_buffer[uart_index-1] == 0xFF) { + if(uart_index>1) { + if(uart_buffer[0]==0x00) { + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, uart_buffer[1]); + } + } + uart_index = 0; + memset(uart_buffer,0,10); + } + + } + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 16; + RCC_OscInitStruct.PLL.PLLN = 336; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; + RCC_OscInitStruct.PLL.PLLQ = 4; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief USART2 Initialization Function + * @param None + * @retval None + */ +static void MX_USART2_UART_Init(void) +{ + + /* USER CODE BEGIN USART2_Init 0 */ + + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + huart2.Init.BaudRate = 115200; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; +/* USER CODE BEGIN MX_GPIO_Init_1 */ +/* USER CODE END MX_GPIO_Init_1 */ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : LD2_Pin */ + GPIO_InitStruct.Pin = LD2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct); + +/* USER CODE BEGIN MX_GPIO_Init_2 */ +/* USER CODE END MX_GPIO_Init_2 */ +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/access_control_stm32/Core/Src/stm32f4xx_hal_msp.c b/access_control_stm32/Core/Src/stm32f4xx_hal_msp.c new file mode 100644 index 0000000..46bf67b --- /dev/null +++ b/access_control_stm32/Core/Src/stm32f4xx_hal_msp.c @@ -0,0 +1,149 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_hal_msp.c + * @brief This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); + + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = USART_TX_Pin|USART_RX_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==USART2) + { + /* USER CODE BEGIN USART2_MspDeInit 0 */ + + /* USER CODE END USART2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART2_CLK_DISABLE(); + + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + HAL_GPIO_DeInit(GPIOA, USART_TX_Pin|USART_RX_Pin); + + /* USER CODE BEGIN USART2_MspDeInit 1 */ + + /* USER CODE END USART2_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/access_control_stm32/Core/Src/stm32f4xx_it.c b/access_control_stm32/Core/Src/stm32f4xx_it.c new file mode 100644 index 0000000..1490637 --- /dev/null +++ b/access_control_stm32/Core/Src/stm32f4xx_it.c @@ -0,0 +1,203 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f4xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + { + } + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f4xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ diff --git a/access_control_stm32/Core/Src/syscalls.c b/access_control_stm32/Core/Src/syscalls.c new file mode 100644 index 0000000..d190edf --- /dev/null +++ b/access_control_stm32/Core/Src/syscalls.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file syscalls.c + * @author Auto-generated by STM32CubeIDE + * @brief STM32CubeIDE Minimal System calls file + * + * For more information about which c-functions + * need which of these lowlevel functions + * please consult the Newlib libc-manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2020-2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include +#include +#include +#include +#include +#include +#include + + +/* Variables */ +extern int __io_putchar(int ch) __attribute__((weak)); +extern int __io_getchar(void) __attribute__((weak)); + + +char *__env[1] = { 0 }; +char **environ = __env; + + +/* Functions */ +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + return 1; +} + +int _kill(int pid, int sig) +{ + (void)pid; + (void)sig; + errno = EINVAL; + return -1; +} + +void _exit (int status) +{ + _kill(status, -1); + while (1) {} /* Make sure we hang here */ +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + *ptr++ = __io_getchar(); + } + + return len; +} + +__attribute__((weak)) int _write(int file, char *ptr, int len) +{ + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + { + __io_putchar(*ptr++); + } + return len; +} + +int _close(int file) +{ + (void)file; + return -1; +} + + +int _fstat(int file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _isatty(int file) +{ + (void)file; + return 1; +} + +int _lseek(int file, int ptr, int dir) +{ + (void)file; + (void)ptr; + (void)dir; + return 0; +} + +int _open(char *path, int flags, ...) +{ + (void)path; + (void)flags; + /* Pretend like we always fail */ + return -1; +} + +int _wait(int *status) +{ + (void)status; + errno = ECHILD; + return -1; +} + +int _unlink(char *name) +{ + (void)name; + errno = ENOENT; + return -1; +} + +int _times(struct tms *buf) +{ + (void)buf; + return -1; +} + +int _stat(char *file, struct stat *st) +{ + (void)file; + st->st_mode = S_IFCHR; + return 0; +} + +int _link(char *old, char *new) +{ + (void)old; + (void)new; + errno = EMLINK; + return -1; +} + +int _fork(void) +{ + errno = EAGAIN; + return -1; +} + +int _execve(char *name, char **argv, char **env) +{ + (void)name; + (void)argv; + (void)env; + errno = ENOMEM; + return -1; +} diff --git a/access_control_stm32/Core/Src/sysmem.c b/access_control_stm32/Core/Src/sysmem.c new file mode 100644 index 0000000..921ecef --- /dev/null +++ b/access_control_stm32/Core/Src/sysmem.c @@ -0,0 +1,79 @@ +/** + ****************************************************************************** + * @file sysmem.c + * @author Generated by STM32CubeIDE + * @brief STM32CubeIDE System Memory calls file + * + * For more information about which C functions + * need which of these lowlevel functions + * please consult the newlib libc manual + ****************************************************************************** + * @attention + * + * Copyright (c) 2023 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes */ +#include +#include + +/** + * Pointer to the current high watermark of the heap usage + */ +static uint8_t *__sbrk_heap_end = NULL; + +/** + * @brief _sbrk() allocates memory to the newlib heap and is used by malloc + * and others from the C library + * + * @verbatim + * ############################################################################ + * # .data # .bss # newlib heap # MSP stack # + * # # # # Reserved by _Min_Stack_Size # + * ############################################################################ + * ^-- RAM start ^-- _end _estack, RAM end --^ + * @endverbatim + * + * This implementation starts allocating at the '_end' linker symbol + * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack + * The implementation considers '_estack' linker symbol to be RAM end + * NOTE: If the MSP stack, at any point during execution, grows larger than the + * reserved size, please increase the '_Min_Stack_Size'. + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + extern uint8_t _end; /* Symbol defined in the linker script */ + extern uint8_t _estack; /* Symbol defined in the linker script */ + extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ + const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; + const uint8_t *max_heap = (uint8_t *)stack_limit; + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + { + __sbrk_heap_end = &_end; + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + { + errno = ENOMEM; + return (void *)-1; + } + + prev_heap_end = __sbrk_heap_end; + __sbrk_heap_end += incr; + + return (void *)prev_heap_end; +} diff --git a/access_control_stm32/Core/Src/system_stm32f4xx.c b/access_control_stm32/Core/Src/system_stm32f4xx.c new file mode 100644 index 0000000..3bd40f7 --- /dev/null +++ b/access_control_stm32/Core/Src/system_stm32f4xx.c @@ -0,0 +1,747 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f4xx.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. + * + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + + +#include "stm32f4xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) +/* #define DATA_IN_ExtSRAM */ +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ + STM32F412Zx || STM32F412Vx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* #define DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ + STM32F479xx */ + +/* Note: Following vector table addresses must be defined in line with linker + configuration. */ +/*!< Uncomment the following line if you need to relocate the vector table + anywhere in Flash or Sram, else the vector table is kept at the automatic + remap of boot address selected */ +/* #define USER_VECT_TAB_ADDRESS */ + +#if defined(USER_VECT_TAB_ADDRESS) +/*!< Uncomment the following line if you need to relocate your vector Table + in Sram else user remap will be done in Flash. */ +/* #define VECT_TAB_SRAM */ +#if defined(VECT_TAB_SRAM) +#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#else +#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. + This value must be a multiple of 0x200. */ +#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#endif /* VECT_TAB_SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Variables + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +uint32_t SystemCoreClock = 16000000; +const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; +const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value + * depends on the application requirements), user has to ensure that HSE_VALUE + * is same as the real frequency of the crystal used. Otherwise, this function + * may have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; + + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ + RCC->AHB1ENR |= 0x000001F8; + + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + FMC_Bank5_6->SDCR[0] = 0x000019E4; + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ + FMC_Bank5_6->SDCMR = 0x00000073; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ + FMC_Bank5_6->SDCMR = 0x00046014; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ + + (void)(tmp); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external memories (SRAM/SDRAM) + * This SRAM/SDRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + __IO uint32_t tmp = 0x00; +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#if defined (DATA_IN_ExtSDRAM) + register uint32_t tmpreg = 0, timeout = 0xFFFF; + register __IO uint32_t index; + +#if defined(STM32F446xx) + /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface + clock */ + RCC->AHB1ENR |= 0x0000007D; +#else + /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface + clock */ + RCC->AHB1ENR |= 0x000001F8; +#endif /* STM32F446xx */ + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); + +#if defined(STM32F446xx) + /* Connect PAx pins to FMC Alternate function */ + GPIOA->AFR[0] |= 0xC0000000; + GPIOA->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOA->MODER |= 0x00008000; + /* Configure PDx pins speed to 50 MHz */ + GPIOA->OSPEEDR |= 0x00008000; + /* Configure PDx pins Output type to push-pull */ + GPIOA->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOA->PUPDR |= 0x00000000; + + /* Connect PCx pins to FMC Alternate function */ + GPIOC->AFR[0] |= 0x00CC0000; + GPIOC->AFR[1] |= 0x00000000; + /* Configure PDx pins in Alternate function mode */ + GPIOC->MODER |= 0x00000A00; + /* Configure PDx pins speed to 50 MHz */ + GPIOC->OSPEEDR |= 0x00000A00; + /* Configure PDx pins Output type to push-pull */ + GPIOC->OTYPER |= 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOC->PUPDR |= 0x00000000; +#endif /* STM32F446xx */ + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x000000CC; + GPIOD->AFR[1] = 0xCC000CCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xA02A000A; + /* Configure PDx pins speed to 50 MHz */ + GPIOD->OSPEEDR = 0xA02A000A; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00000CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA800A; + /* Configure PEx pins speed to 50 MHz */ + GPIOE->OSPEEDR = 0xAAAA800A; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0xCCCCCCCC; + GPIOF->AFR[1] = 0xCCCCCCCC; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA800AAA; + /* Configure PFx pins speed to 50 MHz */ + GPIOF->OSPEEDR = 0xAA800AAA; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0xCCCCCCCC; + GPIOG->AFR[1] = 0xCCCCCCCC; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0xAAAAAAAA; + /* Configure PGx pins speed to 50 MHz */ + GPIOG->OSPEEDR = 0xAAAAAAAA; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) + /* Connect PHx pins to FMC Alternate function */ + GPIOH->AFR[0] = 0x00C0CC00; + GPIOH->AFR[1] = 0xCCCCCCCC; + /* Configure PHx pins in Alternate function mode */ + GPIOH->MODER = 0xAAAA08A0; + /* Configure PHx pins speed to 50 MHz */ + GPIOH->OSPEEDR = 0xAAAA08A0; + /* Configure PHx pins Output type to push-pull */ + GPIOH->OTYPER = 0x00000000; + /* No pull-up, pull-down for PHx pins */ + GPIOH->PUPDR = 0x00000000; + + /* Connect PIx pins to FMC Alternate function */ + GPIOI->AFR[0] = 0xCCCCCCCC; + GPIOI->AFR[1] = 0x00000CC0; + /* Configure PIx pins in Alternate function mode */ + GPIOI->MODER = 0x0028AAAA; + /* Configure PIx pins speed to 50 MHz */ + GPIOI->OSPEEDR = 0x0028AAAA; + /* Configure PIx pins Output type to push-pull */ + GPIOI->OTYPER = 0x00000000; + /* No pull-up, pull-down for PIx pins */ + GPIOI->PUPDR = 0x00000000; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/*-- FMC Configuration -------------------------------------------------------*/ + /* Enable the FMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + + /* Configure and enable SDRAM bank1 */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCR[0] = 0x00001954; +#else + FMC_Bank5_6->SDCR[0] = 0x000019E4; +#endif /* STM32F446xx */ + FMC_Bank5_6->SDTR[0] = 0x01115351; + + /* SDRAM initialization sequence */ + /* Clock enable command */ + FMC_Bank5_6->SDCMR = 0x00000011; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Delay */ + for (index = 0; index<1000; index++); + + /* PALL command */ + FMC_Bank5_6->SDCMR = 0x00000012; + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Auto refresh command */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x000000F3; +#else + FMC_Bank5_6->SDCMR = 0x00000073; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* MRD register program */ +#if defined(STM32F446xx) + FMC_Bank5_6->SDCMR = 0x00044014; +#else + FMC_Bank5_6->SDCMR = 0x00046014; +#endif /* STM32F446xx */ + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + timeout = 0xFFFF; + while((tmpreg != 0) && (timeout-- > 0)) + { + tmpreg = FMC_Bank5_6->SDSR & 0x00000020; + } + + /* Set refresh count */ + tmpreg = FMC_Bank5_6->SDRTR; +#if defined(STM32F446xx) + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); +#else + FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); +#endif /* STM32F446xx */ + + /* Disable write protection */ + tmpreg = FMC_Bank5_6->SDCR[0]; + FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); +#endif /* DATA_IN_ExtSDRAM */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ + || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ + || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) + +#if defined(DATA_IN_ExtSRAM) +/*-- GPIOs Configuration -----------------------------------------------------*/ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR |= 0x00000078; + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); + + /* Connect PDx pins to FMC Alternate function */ + GPIOD->AFR[0] = 0x00CCC0CC; + GPIOD->AFR[1] = 0xCCCCCCCC; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xAAAA0A8A; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xFFFF0FCF; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FMC Alternate function */ + GPIOE->AFR[0] = 0xC00CC0CC; + GPIOE->AFR[1] = 0xCCCCCCCC; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xAAAA828A; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xFFFFC3CF; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FMC Alternate function */ + GPIOF->AFR[0] = 0x00CCCCCC; + GPIOF->AFR[1] = 0xCCCC0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xAA000AAA; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xFF000FFF; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FMC Alternate function */ + GPIOG->AFR[0] = 0x00CCCCCC; + GPIOG->AFR[1] = 0x000000C0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00085AAA; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000CAFFF; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + +/*-- FMC/FSMC Configuration --------------------------------------------------*/ + /* Enable the FMC/FSMC interface clock */ + RCC->AHB3ENR |= 0x00000001; + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001011; + FMC_Bank1->BTCR[3] = 0x00000201; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +#if defined(STM32F469xx) || defined(STM32F479xx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); + /* Configure and enable Bank1_SRAM2 */ + FMC_Bank1->BTCR[2] = 0x00001091; + FMC_Bank1->BTCR[3] = 0x00110212; + FMC_Bank1E->BWTR[2] = 0x0fffffff; +#endif /* STM32F469xx || STM32F479xx */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ + || defined(STM32F412Zx) || defined(STM32F412Vx) + /* Delay after an RCC peripheral clock enabling */ + tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001011; + FSMC_Bank1->BTCR[3] = 0x00000201; + FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ + +#endif /* DATA_IN_ExtSRAM */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ + STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ + (void)(tmp); +} +#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/access_control_stm32/Core/Startup/startup_stm32f411retx.s b/access_control_stm32/Core/Startup/startup_stm32f411retx.s new file mode 100644 index 0000000..062b61e --- /dev/null +++ b/access_control_stm32/Core/Startup/startup_stm32f411retx.s @@ -0,0 +1,435 @@ +/** + ****************************************************************************** + * @file startup_stm32f411xe.s + * @author MCD Application Team + * @brief STM32F411xExx Devices vector table for GCC based toolchains. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m4 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + ldr r1, =_edata + ldr r2, =_sidata + movs r3, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r4, [r2, r3] + str r4, [r0, r3] + adds r3, r3, #4 + +LoopCopyDataInit: + adds r4, r0, r3 + cmp r4, r1 + bcc CopyDataInit + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + ldr r4, =_ebss + movs r3, #0 + b LoopFillZerobss + +FillZerobss: + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + cmp r2, r4 + bcc FillZerobss + +/* Call the clock system initialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word 0 /* Reserved */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word 0 /* Reserved */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word FPU_IRQHandler /* FPU */ + .word 0 /* Reserved */ + .word 0 /* Reserved */ + .word SPI4_IRQHandler /* SPI4 */ + .word SPI5_IRQHandler /* SPI5 */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + + .weak SPI4_IRQHandler + .thumb_set SPI4_IRQHandler,Default_Handler + + .weak SPI5_IRQHandler + .thumb_set SPI5_IRQHandler,Default_Handler diff --git a/access_control_stm32/Debug/Core/Src/main.cyclo b/access_control_stm32/Debug/Core/Src/main.cyclo new file mode 100644 index 0000000..6be0e03 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/main.cyclo @@ -0,0 +1,5 @@ +../Core/Src/main.c:68:5:main 5 +../Core/Src/main.c:124:6:SystemClock_Config 3 +../Core/Src/main.c:171:13:MX_USART2_UART_Init 2 +../Core/Src/main.c:204:13:MX_GPIO_Init 1 +../Core/Src/main.c:244:6:Error_Handler 1 diff --git a/access_control_stm32/Debug/Core/Src/main.d b/access_control_stm32/Debug/Core/Src/main.d new file mode 100644 index 0000000..654527e --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/main.d @@ -0,0 +1,54 @@ +Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Core/Src/main.o b/access_control_stm32/Debug/Core/Src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..a74d0e1be665ceab2b3c338efe6c4a204cfc0493 GIT binary patch literal 743784 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�#`-ZGA&;}J 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�AEK<2~~$9h++wi74@UP2Gqo}E%?ES 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 @*7Dcp&ya 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%0DDW-E4JclP5@j^RX3=Ugt~YHr}u+{t}Bz&CiD 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Src/main.su b/access_control_stm32/Debug/Core/Src/main.su new file mode 100644 index 0000000..e459db8 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/main.su @@ -0,0 +1,5 @@ +../Core/Src/main.c:68:5:main 8 static +../Core/Src/main.c:124:6:SystemClock_Config 88 static +../Core/Src/main.c:171:13:MX_USART2_UART_Init 8 static +../Core/Src/main.c:204:13:MX_GPIO_Init 48 static +../Core/Src/main.c:244:6:Error_Handler 4 static,ignoring_inline_asm diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.cyclo b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.cyclo new file mode 100644 index 0000000..f785e20 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.cyclo @@ -0,0 +1,3 @@ +../Core/Src/stm32f4xx_hal_msp.c:64:6:HAL_MspInit 1 +../Core/Src/stm32f4xx_hal_msp.c:88:6:HAL_UART_MspInit 2 +../Core/Src/stm32f4xx_hal_msp.c:124:6:HAL_UART_MspDeInit 2 diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.d b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.d new file mode 100644 index 0000000..26ab8f2 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.d @@ -0,0 +1,54 @@ +Core/Src/stm32f4xx_hal_msp.o: ../Core/Src/stm32f4xx_hal_msp.c \ + ../Core/Inc/main.h ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.o b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.o new file mode 100644 index 0000000000000000000000000000000000000000..06a3e5f3cfd69193067ad1b85e6c334ce2ea117e GIT binary patch literal 715084 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%0ADxQH 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�qS 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 ISQpR!Kl8nzC;$Ke literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.su b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.su new file mode 100644 index 0000000..79f4ef7 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/stm32f4xx_hal_msp.su @@ -0,0 +1,3 @@ +../Core/Src/stm32f4xx_hal_msp.c:64:6:HAL_MspInit 16 static +../Core/Src/stm32f4xx_hal_msp.c:88:6:HAL_UART_MspInit 48 static +../Core/Src/stm32f4xx_hal_msp.c:124:6:HAL_UART_MspDeInit 16 static diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_it.cyclo b/access_control_stm32/Debug/Core/Src/stm32f4xx_it.cyclo new file mode 100644 index 0000000..1c5d501 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/stm32f4xx_it.cyclo @@ -0,0 +1,9 @@ +../Core/Src/stm32f4xx_it.c:69:6:NMI_Handler 1 +../Core/Src/stm32f4xx_it.c:84:6:HardFault_Handler 1 +../Core/Src/stm32f4xx_it.c:99:6:MemManage_Handler 1 +../Core/Src/stm32f4xx_it.c:114:6:BusFault_Handler 1 +../Core/Src/stm32f4xx_it.c:129:6:UsageFault_Handler 1 +../Core/Src/stm32f4xx_it.c:144:6:SVC_Handler 1 +../Core/Src/stm32f4xx_it.c:157:6:DebugMon_Handler 1 +../Core/Src/stm32f4xx_it.c:170:6:PendSV_Handler 1 +../Core/Src/stm32f4xx_it.c:183:6:SysTick_Handler 1 diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_it.d b/access_control_stm32/Debug/Core/Src/stm32f4xx_it.d new file mode 100644 index 0000000..9ae469a --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/stm32f4xx_it.d @@ -0,0 +1,56 @@ +Core/Src/stm32f4xx_it.o: ../Core/Src/stm32f4xx_it.c ../Core/Inc/main.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \ + ../Core/Inc/stm32f4xx_it.h +../Core/Inc/main.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: +../Core/Inc/stm32f4xx_it.h: diff --git a/access_control_stm32/Debug/Core/Src/stm32f4xx_it.o b/access_control_stm32/Debug/Core/Src/stm32f4xx_it.o new file mode 100644 index 0000000000000000000000000000000000000000..be57fba576713d8ff3d1cd39d588d6209ff2389a GIT binary patch literal 711140 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 Rb}=3@lJ8CFMUE%S{{U9%&7J@N literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Src/syscalls.su b/access_control_stm32/Debug/Core/Src/syscalls.su new file mode 100644 index 0000000..50b547a --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/syscalls.su @@ -0,0 +1,18 @@ +../Core/Src/syscalls.c:44:6:initialise_monitor_handles 4 static +../Core/Src/syscalls.c:48:5:_getpid 4 static +../Core/Src/syscalls.c:53:5:_kill 16 static +../Core/Src/syscalls.c:61:6:_exit 16 static +../Core/Src/syscalls.c:67:27:_read 32 static +../Core/Src/syscalls.c:80:27:_write 32 static +../Core/Src/syscalls.c:92:5:_close 16 static +../Core/Src/syscalls.c:99:5:_fstat 16 static +../Core/Src/syscalls.c:106:5:_isatty 16 static +../Core/Src/syscalls.c:112:5:_lseek 24 static +../Core/Src/syscalls.c:120:5:_open 12 static +../Core/Src/syscalls.c:128:5:_wait 16 static +../Core/Src/syscalls.c:135:5:_unlink 16 static +../Core/Src/syscalls.c:142:5:_times 16 static +../Core/Src/syscalls.c:148:5:_stat 16 static +../Core/Src/syscalls.c:155:5:_link 16 static +../Core/Src/syscalls.c:163:5:_fork 8 static +../Core/Src/syscalls.c:169:5:_execve 24 static diff --git a/access_control_stm32/Debug/Core/Src/sysmem.cyclo b/access_control_stm32/Debug/Core/Src/sysmem.cyclo new file mode 100644 index 0000000..0090c10 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/sysmem.cyclo @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 3 diff --git a/access_control_stm32/Debug/Core/Src/sysmem.d b/access_control_stm32/Debug/Core/Src/sysmem.d new file mode 100644 index 0000000..74fecf9 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/sysmem.d @@ -0,0 +1 @@ +Core/Src/sysmem.o: ../Core/Src/sysmem.c diff --git a/access_control_stm32/Debug/Core/Src/sysmem.o b/access_control_stm32/Debug/Core/Src/sysmem.o new file mode 100644 index 0000000000000000000000000000000000000000..46033e67d97e073f2ba9d6ed81da03ff8a73dcee GIT binary patch literal 47808 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Src/sysmem.su b/access_control_stm32/Debug/Core/Src/sysmem.su new file mode 100644 index 0000000..12d5f17 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/sysmem.su @@ -0,0 +1 @@ +../Core/Src/sysmem.c:53:7:_sbrk 32 static diff --git a/access_control_stm32/Debug/Core/Src/system_stm32f4xx.cyclo b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.cyclo new file mode 100644 index 0000000..4cc0df9 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.cyclo @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 1 +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 6 diff --git a/access_control_stm32/Debug/Core/Src/system_stm32f4xx.d b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.d new file mode 100644 index 0000000..6235c24 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.d @@ -0,0 +1,53 @@ +Core/Src/system_stm32f4xx.o: ../Core/Src/system_stm32f4xx.c \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Core/Src/system_stm32f4xx.o b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.o new file mode 100644 index 0000000000000000000000000000000000000000..198886acf07e6ca075c543dc5a68b507046c222c GIT binary patch literal 711424 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%0A0Ii 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Ν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�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

ZvH1W0$IT7?^FMKf+V{Qy)Dv#3+7Bc~ zDIE=o+g5UYFhLV=3S}YMOZBR4fU~Vd$qx2V%Mr{4ePv> zwchz=xI02QFfJHepr)%84v9{PT_xN6?SD1 z5L(fz)hQGpXwrrV@uzBnkn!pr>2zyLVuMX+U%%R}pD#z~R?G%OhNTbchfvd)DHldj zG_LBE?5&@ySF)Gum26?xJQlMm78uz0i6Dt$h`xXuL@Dy}4U02EQ}nN&nZ)MJ`;8{} z)4NAW_1$4rzd$sKNH&YkuTNdof+O<*EH3;9&8E=@{wt~`k_PUmgd!;NPW-asXHi*^ zV@_tCBhSZ{BW6h9<6}w#P%d!hVBBB*%sTscy7&lm?V2vS#6KBm!u;8pkIq2(3XMZ{cHLanU3u~O25n3SR?TK>cbPa+&2wca>CERqmdmxEES9lLz=1?B|*2yGtgB}P} z65cI-L7KT|*cjFzIJlsmFAQ_!DEBPFM3}nh)5LU~sL*4uXnCO*RX7JGzQ0fHfX5*P zVWoDsK0bM6bvy^Kh{2jgzhi4ir#=jPt9AHFB?EFGhH8kugGd_h!&Y4*@d}i5NU~nx z=(e-Qr)_#7VpL~ajh0dr=1LcM5;feaZ|jTib2u@c9^3FdD`^7&58d#Xj0yySV5|#W z#%`}`LOH;V@0Ml@6*3|49(}%``as}^d=@a)u2J#_&O2)Wc&8vFTr^Q*mJm3UFb`hM z9f=S2uwK+Y9E$FAd>z}aS}sNy3=S#u$T>lhOBIoo5e8(=x5*pfX>LZgBBqi`SVrurw(j&73uAXk= z03y)J`8jiaa|fc@Sx>93kS472Md^pU`v;icmTpr3uApAMrNv3;uucIG+ro!Q%yg>o z1dpimo6BQFwa{BmthHyQ!V*SdQ9wYGJXtOQL&UF$|Ja`_QGo-j$be1YP4Tn2aq`He(*c z3Chks#WeT!Kl2DCOpOwq)F0ktT2Jy`>`CiHH4drw>T2SNlt*O@ka0^$vYcQwwZsCV zZs0X7b9DUQlSYOMqjZeZhYx>#_v7ksAAb1D$A=H^{$2VR@W+~0|0wkO`GT~)8H&Iz zUk%C&RuiN@LKVI0Z8>xmnAyNN#Uun4w=YQFOUq#4Pu=B+0dD4Mof!$t9gJyBmx`0w z*X=8Vbk)F}-))93&;KQRs-faAvgiT5m7tNO8H8TlWGL2^uReJ?X9G&T=Wy64K1bbR za#i&q5N^|a%9|5BI?YXPJB1t!i3eT);1wWDt)Ufmu~Dv?OwSD*OYX0fz(^|zSg_AR zKUXqTu@ChKr#^})XSygTDUfQN5mt;S=YKa1n=ux)rGJyL9p;#5=(_ZK5sKf9nBi`} z-b^BUZn6z@0K7`ZdRAh;g+0^Au%|5K7VlDX6k<%T zTp^wWm!&>@f&&1|{a%APQXI<;wJMs7{QwVM z_3t{1-rpN)jQ(C!PKbl8Jk(r|$psjLl!?LeQ+L|6@XQu~P|2r~38Zd^B%)Q&i==nx zFc19$p6QFR4)7DtX8=AkFuB7$g$M~J{mtX!$9LauaA?)-_Brh)XbkQzLI??8YuDY}*d=w^p{N@u9 z^)8L=$0e&1t(L9sf<9$>M4`Jt8&Q!dUyzyqnhDEP&0+5kFZOm1_7C>UoEzDsoG^+6m@yvN`HWJhWwuWgfEJ%}B|(Ew>3dngSnC(_u}H3hH>| zDGLw1V(`Oeb9Z_Id<~kvx=aE5gPpJb?a%jLWg^f??43w*rzc*xnyhyw%d_Fv_y zuTVwht3NVpxo&*U%Q>#}mahk2S&yDE&{Obq`2RFcg9%w~k$-iA@C4=6CGC{59_o2S_x$j~=bt_!dBS}#C{-Wo!jd%+!%2gD zM^jk#_`AUq0bGKN9U2u&|017fmU9W|L>K>!T3s{qmQ}n#k|&cwB)%EapN>18xCn8&e*5FJbZjqiUHjK+sSO^;nw!s zZzU)eO93~1)L_Bfb35(EYK^pf)9I_OdEsl9yhOu0`hF1T-$9?Svy(RP@xf1`!&TapH@Z4Vfzn|MySVk<{7dK`5 z&A;K4(jf*80^s;IcXJe90Hzru&mYC^OW+k$-w|^a7eX@BZ-aEc?xxtVR?)0}J4I*{ zO`qF8Mz_Cz`0(T4GZ>5?Kit3d%qo4@I&&_-nRF0vBu*tt;CC4ofc>Rfp^~m~&dvRL zH8CZy{`%bye?9$p|F2G{8SPHLx{fi$sCCh;hp<*VnZr<>@Ve2PSXkfQ7HWl?;muW& zE3&I|B<*)yK@VN-?Z@^iUE%^Nm9!#I)sV(ebKzUku1PUMACzu|Fs{sp*MJf9n2lHL zwa26^p;s%fVQ@i^3B`+C*X2O+MR6^_(p}k^+f@M!E+Rn6YIF@BTR~*H(w#9o67VAG zcgx4Mqx6ATCf33%R=l8^ZI?tl7wTLZEV+_h*l!s>i*3#%{(wTZQ>4WUwykY-7L(rK-mbqB>*82G`t;%x{nTwY&5rq?ArKm70{RVXvN zo5X64eFlm&=W}J@Hq*b4ZPznZP`Xb#RNQL6-qjnBI_7dwwqpo z-Z!f|y0oNOV*PT?)YJF#4@||asY(+TARs3hFwF)@*m^IJ_xE@jGwv>V8Y>77PlbKw ze-9pi`uXGikC4Tbxff|wDzi}kJx_TVi;u2L4JSOHFFLuLEVws>8vdQ0k96Ek(O$Ir zDUg>BZJv+~R+D3tM6lDrW$E;3tszIC^899K>NQFgxCD}E5Qt#aczLqK*^!)qmx|17 z5X81oLJ<96k!qedV8OcQ)O1?%14;-;o6L2BWmHLxm^dtpKPJmL=z)x~kj1{CQLAaO zFC5591#&M*HGN7&={ah*pe7Q63Ry_S5&KwGrC~w~L{pE_r^RU}w~iD)-r&)GeGM6JC@j4=bK! z^$Sc1_^10GjxSt%sAu@^qf7&BM}H3I<>Q~goWJ4Lrx0k`=AJ~EhOIJpK(IFdswzgj zWDhLGK*b=mDZ#-c=zK6B;CSimna2m!5${Dg60Z3bD{Ui#O$l$ktS(35ZzQ^6Gh;ZwhVWhi^c5(j)7|xEu7lOa_vFeNTE6@^FwU3%k zowmv^Sf)7BdVyQvWU*=&DXS*wOT-lspQNnLj;-rHJIoA%fqn`k!lshL0ce4+u6*n* zz5%5LoU<^eB9&mf1 zQrv}#uAwHL2`|$g(UFABt)vc?F4I_*-Qi+l31U$(6V_I&_s199`?M+nmSmFU%i#$# z>l?R?(jzD@MOCBGX+^x6E)C}-ypA5Y^Ebnydhq8_7gs)}wW|?*>A- zp0$CxRhI^rn6NE$RrhH)mig{te!K|>PpZbSZZ1a%+V~FE`3@j)l-NH;4`mk((BS7_ zfS!uUF0T0?d3QJ~RTT$T^a{~!r?n6bU|a1eVIiqOUG{0%Ae8~~gvR88&46eGP6U>& zc1x#tz__dH1poxE9~Fl1T3+MF^$+NEMdhQaLed6_$|pc1B{V+*ny>L*)s+?%Cy+d{ zS)NQRL=&#vB25`lz89p*%H6Pf{P_8Y$N7hMkEb6Weww^}^Yi2VTSRvK^yUNp(A!9y z4#y(o>&v4P;z&8bu7PM0MW|Y}&w(^%jD3@isw42BL(52zvhGx#@RfHbPXXPg5Wwh*XR2b{Q@?b(co-#L%}+=vMD6MdmZt z7f)vE>*=`*q8$x!J4z2u>jbtjg)jEy5tawh<^vH0luXC3{ZO^d>F|>pBW0&_ABZM6 z2SC0@Wd%Ymx>(Sy)A?+^Mq+p%$Fub+eJDjkJJ1wKQPu<#&;rOaGWY;EpCJwSYAUU& z=@+a)^U26s$gWhYRWbo%C5;cmUHNyzGD~ke z_)7=GMmkM6?jugWw^g6VqZ0{C3#WhovQ#p!M>&#t7gPP1tfr(9DiYv!k z#Zld-*O>eJDdkb5Y4-#saj6IDGeG?j)8%Q%N(b4HLZ?uy*f}*Zh}N5{6L?T=fYVjV zzKj(c?VJA%IVfTo$P!sWF@`Zh!%9 zC#}`*(3ArQq%|YJO}YiT%haQK_*UA+bGOPEe2n=L9M_lssn^Ejv~{Jj?!=tByl_N7C|+wVNIr(&^Q%a>}x4 z(z#HyI9+v**ihjp-4kZ|JtXfH$hd+pDWhx)rDgd$Qf7kvWlZ~Of(oZl(yWjg;q#}> z$xlB&{%w#NwFj^$!b7_X$KV~T9L`TD5PnwoBI8yJ(K3jEOMcjX#>GL#vJp*k6Rg~2 zLg96@mW*U&y|ScCrU3K{^``oICQydXV;ANUz}csF|9%hmOw`8GQ<5riu|yep|Cq8~ zWIaHi(wQ)nO*0fe=}y@@G%eyQKrpKxfM%;s4t~oE3#tWpgA8_fZO+^JWw4!fQ;E4M z;kxXuX2%2`O00mLKoa0Au(TbvXc?oG29W~M>EQyu{7Nb!fX>P!*kz|~(UFC|X!_EL zAI<(bEU^qRcp?3Qv$D*ULVUhC<&td%hmIsTB_g8{ZOJNBMDK_u#*?ERrPU@- zGi4dFgdjbN!?P<)>pl(NY+fP7XRdcF60@4p;0^WhWCjik|vALzd=zAy*3 z-h$L1J|kNyAs~iTHCZdmLHbf10^inplWmvzatfx@zTgI{23>JdhUO8^cx>1S`uSpW z?zHT>b4*UL5Nu*I4i&a(TtwNe`NjLuQS4u#HRt5KQ#Wwe<^PXK;0|%+#kJN|52d;Y z>DY!^Q}XS)Qojns0^{$(wd@isP#6eoj!m!Ls%3;c;mqh^6%pL&)Gh7CBX{@9_3~A` ztvMh8HZdxFD}+9)$}MO+p!n?bEr7gdkRBji*;w3;BOK>Nv51hX${sngAoyS!sL8Am zh4V0&NcNjO8)WwS>Dv=jE5Vi(ej+(l-;1QDQcf-g z>W87tixH(utyExr)Hxov2@dN%0g36Ruq%pQs)4KS({LSO6G*d}t2o`!rNME$qyAe- zg4;gbP@Wo+6Q*ES{bec5jXlreG;ivh><31aC#Q$_a!@9G zNof>3%ycFMb#l_DqP+MlfDc2VVzq)DWlGtobvNR7R0v-9m0{&GJIL@2B9bLeN!ljq zo#JFR&DsU62?04_*@DwRkE)wRA(2Tj!t6NM^e6Yuedll?kJO&l0lmt@{(UEG$6C;ALgii_+6^VgLnz+%RxfXcg1R^Z@5xze^q2lkCOUv$c zB1%=k#EC3VUEr2N#{3S#XQDMty8*c)Mp_yiLz5%J7hA5NcxJG3k^x+nq{LPT*3*mS z(}Fcme>b_vC6#@8A($=4$Qzd0^l4gjD)_)* z@!z@#Lbq4Dobceu#pHEAhE$IR6FfO%vyTonS)n$#uCR229v@y;(UH)C5MDYna;&iUP57W3V-q$ zlrvhJjJ}t{F;=2!WZN?;(c4(UgS|SIaF^LlJX!(?{%)``-z{gCuh8bHd2Ib!rA{H6~5OD zDcjY=z5Rei%W%Ge?0*VjkI@+`AVQMfi(}*+fhTU^fa^IWpxB4@D}*`>2v472(%=l zo*s^w>WH-tN2wlq?Qg`I=n61%hChCj-4{qBQ^gg^L9HPLA;sspp~a}GX96J-szlrG*>T_*pgUDKmaW_^eYBK=SteR1XJ6t233{{{k8zqHRlm|h{cgwh@++SJvT7+w% zvZ*>OjtGlx4v46Sx=V8m?xC{5s$NgVzFeA>r*)6h<&s&|<=X_e7^YWCR)Tm1U3)0r zp0CcYfQ9Y(nzGo1WB96rfre>WxWE;EP1p80udlPYr}`Ll@QKfafZ-BAp=cyc8mpHV z3P7Q3otfWr@25A&qL07OHGqw#pnHDj(Q+F^|CD#eRzTGV1#ecZU=NU4u~{;00`xB4 z>5GP=H`*2w+35pH;(X3fC{d-2!R2A1$>>@2>G={{&2Y9tLgB6rA*+|XU$+sRFK3g@ z_0PPjAzQvqV?4QTAi*TE>t-B5DHZtwF!i!>$Bn%3a{r=m@bV!7XUYH zDo<$}GDVyu5Hb{7vy)d0_iBeG1h<73gg%J*6BC5G0tT8S7z$0^&db`##m6zapM-&0 zk>mMnu5YQSS*Ke!)$H#D5*NL)`4>!f506b2JLYRvZ?Iv5PK!WZ%hB=<2jO;7^A2cs zUPHFB<0>s2QtY0qAgiN%*dbrca;8(>CdNUDQ@jHwSl9+hS6TnBSTUD)Gn<=M zF4^l$Jz3i8LSYHn^Hdd3gL#~QYFK&2>P#~D0{Rjli~VqUb5UoI1);v~tul${2y8_X zWZ-G#!QsJWEf5Z=^d;T`swt34gsB3+w|6>?1QRLJy{iaVrPa4<9fdd`=Tk(ALsB`% zx2985Hfl6bTxcDjM&prQTp(Yhi337_U^q+XaB)>2hE=NR(fY|$(?w1<(I#c(_w;=` zLu#x@MN8!52Zi=^4T7PT=9`S1W%r*2#g}i6c?V zhbtp+Ls{#xlGR~M1tmc{her|^yB_qNzGqN@GUn0(X$B4gc2!}4C%bTAqZ_Yd!XKi)k$ zh2+hZ!Z8Zk+IfYAth&Gbsn$;7U9!f{z{st1JisGwCTL=2U=h|I(To4cHtmKu5 zY~zKrQMTr7hCYcNFJ4eIf-D39sY{!YJyn%Hl?tGyDd}%m5oP&mM&~imfr7t4~AQs~JiigH=H^#I?EF`i0*5@aI2&x_^B5vl5Yh4HSwv zPv$NB{`0%{kMBNgqJLlm20o$`ZJCNX$w`h=DO$SZYu%a(d1?58fllCGYT(ccaRL;~ zu{BXKG^-&gocI*B4AMk0kAx)~HXIa@USidl*P)0RP?`tc z(Oo0+jjlIjducVgHRRh{r(c;8KO`-4n!iu>+R9Lwq0j?ZgyaEYkGQHHM&^ z<8OBmgUhYbANa=9y%AcH1+o;9UCNVXx27a+z@r&P&H1YPG(16Bo1~z&UvC}e%fNjA z(k}M_hmhOL#p~%!Xw8DEsc5TlLA){d>s5rK3DO(z|1OUPPOlu`ljAfxyg^@~zwNw1 zQRk0OOQkY%mIMFXsFs;K(w9;(lpStj_FGOnJ|A8=JSo8*Q**2hguif@yO(olOyDK9 zoS&T`*4b8^10Bk2!>>qN`)_$hX_MJ%sr}l){{ToZ$rt~Ef0t0Zs0pWpA1%?U&3p=z z&(`dx*7uBQkQYEo&^grEYCk;ujBK@rYJnRhFts4t_7)35$YM$QET8_iiu5)tI+8N#k(^5y_f51;$3a}lpuW^Jscm(a@9fAL zu1r;*W>O5lysFAd;!+RHQCD-O!bV0OT3c~5@^qM^viv|X)v1gn110q3-Yc?Y22Yzq zvNcB@=2Z1)4$$ot8HlbIQ0XEl0{*jCaP%TPC{k*3d%25RJX<>F*RVbsdnRcFhBTNN zRRsdPTG6C$>Lo6N9jZNy&mof!!3%YrLJ=7)L+T>qekAkj_g(EDAZCMciAV>rxW2<1 zDDVQg@Nga>hcLy6=g$gx0KvSftU#?fmmJn0yxnXZmdAYe54$%@`LNT}vpTuGrhUU4 zVtjub9Jrx;#tv03JkFFgmY3Zy&9X}y#26a$*s$D|K4aM99)&fqrQbq1wd3ew*&zwsw zm&5w1Gk=roDp$3f@zlQI|1@A?7vO*Vp!)0ggMC~M{x545Nr!7-%72=V7LtXvM{hAM zj$XHaeyv>J2oIa{*sA0K$}>N{`vEy!S>~V?kjx(zis`U*n?G!sAwz%)19&4^*_}xP z=7gr&i5MctwbLxv&GCSGwrqcKOe@)%z}6>+Rg$)z4v3r`!&MT2x-b?+UB~e*^vRL+ zwO=*>NI{?}`W&2{ODzkt?Dy!fo+wDYA4)8pj!4m{Q%GVlJ-3vsmZPz3E|t0Tuc{Y8 z>*!<`o&NP)K7NF8RD*mZ>yGl#t4Md~a^3zjMCw}pF}i>va@+HX9Su?k>JiC5wCJ=) zX5j}j9%zoaX*f2w6RIgJ{4nt+PLY!qBf9;wq;cq#>6)IRM%n=(hL#j+n}v~p$fUy| zEXZ|iq_x@-6T4*u?)9<{sH#9EIvHMk(UK+Suze>3W=J(HqIi=wJgn-{_u1r9z&hHD zVlzI1(gZ|>70L~PE4!6`u&3P?mQ~5gumN2!Dpi5jwd&Q2$UwW7jmd=TCVb`p8A^yNUwo>C^t13KoR{o$xK5A7at3uW~_*h1yHod%%U zZ7OGJ1{R2R;th3Z@U>_pvgribn5aBJV!D`}CKA znyEu(#pu-h3^fP5z9iQ+UFj*r1FhN>$_XtTF*k&X^gCpqrs;P`(5EqQ1F}+mlptVW zu}0uSlPD-6k*E0_>CM|`|IY6yA0xp^4>FTi6aeVVp*w?oD*=e2k7S=Mcg8daUUyJV zt5?TV3V~6MA{BCqkBgdnv^=bESYbL=N0^GmGc-V;lcRYxPVlV=IEGrKY{3P-HI^fC zv9GGLMfk`)dR9qlI+z&aozhqrAUSeNP_sWg+~0e#H{Rbp8o_b=a33{rj!rQqQ4b(x zrc+?ltRE#Owq-sA_8P!@LXhS8p`l~H2Kx%Wnar9+($XCaVkdkUpsodk3@2I79T}9s zbY7qse5`AuCuv7%C6YL#dgoa>O6AXOl1_ROZ|~QbVWJ4YUMgJHHfaB^Zy^P$cqS;nJp!*-o2TOwXa~O-rAw_h{70)5Hux;pEm{$5>vnFVpLhdkXUW zT)fPa0sUrpCWCPn=jN1A{0^HDTsgjjMn14a5xxtO>Ye&%OvC&wl2#Bc+9ycPprx)W zjKdhFyPAS?%7tCe^^ma;VP0GS^TCCkHAwXf@AoudP#!`pS@5@xJNVqD2k=1v4I75* z(PzaCecj5r4bc@l{G-j7wc)`l=9T?^dAUB07)am<29O?60bOGrxV z6;;u~twG{R;eK@;$r{P284D9?0|*F)5p$jLU0K5vv^cvumBJ}51WB1jJYGF~SUo=c z93SbpuxEfilUNB*G2D2GZ4;vyXj?I5WoCyhEL-O24R5;>3aGeU!$}k>Qv1CWuYeu? z=1oAP3X$JQ)}G_9m>>8*0$e9BPSUn?|?#F7TD<0{j)!aAMHEFh*z>g_I$WOo>~Q@a#~;Ls50>yU1r)-M(R)EwAd* zU_9FVRG7p|GE&hXwH!4~sH!4;od4FB3hu}&qFWhaPJ7~~&e5pRTI}Gdixk#s&+aA6 z)sHPG^N^ICnlhJ|o)^7hUfbosM3u0z?pZ8yeM$Qsm(m#~Ds!nUJK52{vLN^`@WdLJ zGXXe<+tcspkSu8svjyTeLe0$}J9d!N1BZFQoKhIzE6uxr#{heRe1fz4H!N|6f_2xw z+<%;XWVN%R_uVJvM@e0Y?jifg>Dh*v)ZoE?l_+1`to?C@99g?eM}YL&oS`C z+L@!v;4Z$iy#EoIW4>l>$_YXX?mq!}0oPU6zZ)bMa`Jkdvtc;9nWmXEfWaLgEHNat zC%1F}ffm@EK|MiuTxmUmLaWr#+4WTw^F-UDwP`Gmu{89@FI}mr%}S2|hne!C9b>Ej zilzzPD19j6BSIfaO6Y)?^{D%dcM`HEgJY5IxLM7b0)a2dv?G*3>XB(vvk}y+-&yWs z8yobCCR?LOGAUJ+gCWl=<8+XW))F!3i-wE_#H_}~dhN8lnB4GDg5l=k`7=|IF3u(p zOs|kE2I$$Mt zyG*c@5;&96&<$)HX}lA24*y4^eLX{TRFZ(SZajnRTH8#!Odx%&IiW>6XNsJx;YnEu zYYh)G6J}Nf`-oVFjJPXpzua9|KOmry5)kiD0)Ru3iv$!TkJRi7W%^)kf}+O{(j1dP35bF`_`*v`gTO`)W-QJOtZNb!Bs;pqQgUaQ@qfkR3yl3Q#~u z2w1AzpcoN5!!%n@mZ&SOCAg~ zw=-H}U@O-;EJU}2G}2-wW`=qTsGtZ!EgZh9ey_Vq66+pZG7P&mKx~j%ih*g}9}UKv zt1~yg(gw(nf{z*l=RHid-^wRdYSC5bgDd@JqYsXyG}o33rezCi*od?$FQ5ThaEMCh z$Ba5D+?{+41@4_rJ7tzG&>XaN>|BwrmKLodHAX#|2E|(Hj3R6WUqk)?d6j|9OU5fc zGgLJ;LLb7}f@uVZBd1!t&-u~1Ps25Z%)*VUWE7oF-6Ad&C;fPNlAH$dTPH{o=abra z;E8U3BLCnzZVy>OEG0}@tzW`}%|66GqwVtzgoHO9At_F;$%ww#Pwj5gDQN{<1q!27 z*|Ny7c(bhqYMU?`*MndeEOo+bW6Z>TBWv{ZbTYrFxbNJkWs8MA-yj_hi~Sk(EmV9X zjmyZUn-Q|^^EKgvEn#SfG`3whk3i-)n?QP*0+iZ95Si!GCMIKoroQSlSCa z^D)WM=HhtfGBmjaYggdg+1hccU+GC%n3;j0U`@z+Ia8xXixvR|e+%t=1SBfA5cPrU z>0~+Ez&U(PJ!w*kZ0#!S205#DA&27CZdUMaEj@9hoM0#yDozOcn?QiTo(PA5>xNJ~ zHv)tN%KXF6rXL5}xNm+S@_@}m5F{&=jkXQ_4fzXjPverx$-yE#g%kYJ9S-Qu?RAzZ z&7!jtl!5QUH;|YSk7Pwe(m==;WjCBrwhYqhaLq7@Dyrsi{bW?lp&Xk|5k_GSJkZR6 z({Q&KS)6UjMTORIOWGG%a`9UYf(;mj?v@M5gJE1PJ}^cM3bwR2ph)F2@Qrl&51a<7)kuT*=r?XVle`btj&tCKqU-T z{E{A^XhoHb&mZsK-oAPN`My+&Efmg7#1hmx%hl-92bV%>yF_)Lh8NyWCv+BMt^j#3 zi4F1BY#pRW0Ov!%KoZvFL~2z3ttFIoY_uzK(IGEb@v5uC47vO$q?j=rk3+%sl^i~q z_@Y7rA=`gRS5E3BKJXL2$4J3Q^;D zQcHyGU|z0uhas?5Etd#+D|$sX>00taQfb3jV5LYT_8ecurIuK#3e#SgMGvRGbZOhm z+@j?Pl5e?ZMhh;n$RK3%3(dJZb|k&IWK&-+9{<@X;&p-{sB(6dY=K54D?>f31aJn& zl7vu$uk(nSIuP5Z!#Y7k)1_t2@L~Ku_><~A6_`jHQb~fYAmP29Ck8J;dVPiIQY|qm z%tFczu!lrnR7(_irwT$9l_|ndIceFBkwBpMtvw9M7|;tfg-ZZ_`074=tMINYR%FAb zFFi4q%}`AjXcM`y^uVAT=#(<3Y|y(`(+}j9k+%W0VF2~W`*e4FV__n&p9vhC`(IwT zKW3H&_HBTfT9=z6<4Wz)LsYZUD7gXm>*p1e6;zDYMwClOYK$<}!6W&`^h<6s9;6>W=6i}Hfqq1(p zxU4jbq!W;3y>5tsjf?gHPUOk-{g$9QnWy|?sxEztShr!NX!d8Bg2<9@P2rtQMx&c} zt9arPG^n^7rR{c``2`O8EtjL%%YcY#h$d$Hj(X<6$6nsV3i_DBLiM-jFt{8eymWUn zfmhmO_PWAknF@tQg4HKr5Ww@HBId~>rb~$vP>!#dS<|ICC0IB}r91n67Q4uHtnpe;eoh)J9MH3~EhtD5>xOWe; zZsYGnEQ-YAa_-_2tG0jMk^_wcH7C3b@3w?z?Tdd0%+3)1Db(EX7W-cVL(mL-!u^p> zt$9?~0T`mtb%nlNjK1J1J<58cONjan+^iG=3@f4lhq;UhQU*CrOJ;~aV+^xJEd_;P zD{N@ii1kM(0MIn>LmhPW>HZf4U763=(N<*>x4-F4@EDZ_&S2dnsqa6*?I?#wN*`R$ zIOvF=;4@0E*vu!Ldw%4cX(U?cS9iK{KFL1DYyy2OK4>N1VO=eC9cli;Qw4cdt22P& z|L~80C*j4^wB(^ssgmp={?P{#*h9I*eX~>=CJ)!SpXe>TI~q?(2aUx}s%dl4cBKGy z)mDZU$zkC?hRPNV(_uk4VZvMwIEQql!>X^#dOAa8mmi9M&Q47Kw4Foh=p-oL*wX{p;Iay`Y5J<@vDKHrGJE5S?M1&^C)mr!Q?Y z3SNPgfaA%k7VKgsWxr+vWs?^Km-okx{*}ewe}U6A1y@}+eCW;{Pmdb?rcvYHG-?le zfOOO({w0%+FL&Fk59H}`iXQU2^sR~d1#urj58P=SCHucwG${Z;<6$tKwMBRbISlDU zVu;=zn1qoy$?X6N=tWscsjpMeRWOHzTab}UNw3J$K~jojsiz=}Yf~jQjld$S8Acnm z@B>zy>ux9RAds4;V~6szT^JqIPpns_dwqv_tAc>{I^oj^34f@FRLs{}8q-BE++&mr z`rXwC5B8(da2IF5ss?F$2r(9=Dxug(gbUG4r*0r^bX|k-*Hoy4yUt{>xmjKh;D(#F z9Wv4ykKQ0%%CwYA>vnySHWZTFZ03q}I;98#keCBW&rIsGIt_^1fH7r%3kTfk!xkyg zYGxOT{cn2gm8&}{^Ym|v)HJ24Un>JdB46+GJ7nU#L$n;!{8!VHo%kV~k}rT(WOoWY z((MV{(d{{KjUbGH*y1sz8PC(mEw)z8Nt`47@38hN|E8*XgZ^f10v`Z^hCK_PSL&A0 zQgb=N6HOx)8EK8^B<^T?Fy2xD4B9WIWE!}i3o*y$^k3-4Y4VABGXij@pIrmEUXij#uX(Tfx=l~1YF=g7{0aTu0?Ro(OVoVKAHdVvU z;`o(Tj>Z?SZ-ynVuJX}jLYfoUS_axpOHVWMoS%s^-z`|YRFig;wRP~?&$>Fg@PiEb z_Zpso2ku;1`^`<)k_rixrQ|3vP=37CfVkJ6=*IpN@aw3qVb)T^#1yfMMvPY!FdUUO z-`&jN+JqPqrcKktX}w33W|8SPQA@IB$k)pm&89Di6yMuvSJ<=;ZM=0S(@&h3^8(=-6{HP&49PXdMQC;jmjmq?%-qY z^5&6K5^H5SKp>b4+)Ea`r(3T~n&nIAS^&8=NngiKr)~*;vy(?#Txgy0R>&wcxuzKd z&**HvP$#p0LJ$;zhX2IX8XrqD#$e|g@e{gK+Q@GPNMYu0bl511S z$2>r54``VktF*oB;gY9!!i?*sw0}R?p=t(0a}3Qt4aPW~(E5T4#O)~x4XHdJN4ZHS zvzQ$}c(G(yW`R+Gj*B&JyNIbr?guw=qqCZFQhKI0X!3DbszW8bHJdpX-pZ@u=$lko z768ayTAy@QH*h~_9nFqE$JrK%~MSodL#PHGmuaD3F zlOc35UTi&j#_Vwemj{fpt|+ajbrJ@^082OI?J?GExL2}n!@ZJCx>`?2mz6)Phv%4E~-|&OOHaV4S1Cq>bW^KPFSJSZEFw(jAk?dK4C?5Q?4uv zFeK1)Xv_#{idZ-D-Qu{@6+(#tO5f>|m~oa&4jS;KBo=tTol;RHU>q1OtdYWUYy#b0 zr){C-WB7*Pk#A8?x5(^l+bc!=4bD7Lyv(let~}^ASn6)b-s1E7_cuTD z-`T^zeV9Ic`189T@!4d?w+9RK^vX3*N7MwPYxvHm=_Sz;H$uzi#@vBTnQagya{Ds| z;$B~!T{D{>wVu4DKP&S4c(d`Z5vUbVPR3T!r*wIh1-@w3dJ~WkLBRCbmAjeP4!+Y9 z#`8-LdSidf0m3>`afUNC;gauw6R}t#{I!F%Bhk!Q3;@U73~CK$7Ka4`Omt?Qnr?}@ z_6)imb4e^p$S0g$E-&Y>+y+XjT6K>2e)=jfplt!Et7ISBK23m|1k}m^MIQXIe8AX% zuue4?b}fz^kbZj#kxYbAcT9^ok&KsX>g_<&gFNZdx0z;Kn_hJrNXVV>MTZ@D@p&8X zVP(@n$FzsgSHKntx>425_B;&g#74rzRRPWT1^hCAE8z+NMa73x9HPgxr*7?SyYsHL zK9jZ#a^}bSVuKW20BP^bMKvu9QR~NgC*T4K_N{bi1ZMAa=WUVZ62YDmBo+ycWp2|J z7Bf4DxCh7QZ7$&2XFff!9i{~l(NjzbqJ3%T4E-=qHr`oM_Tivy(98sL?yzJ4Sa>fP zke0@5KYD)hbaUBlvkE&mrZl~sTYXy)RomJmIHg|Q#KSLuIliX%ZUr!h02rhdS~Glg zjdCqn<>4riH}`etJz~-p_ruGCFfA@vSZa%&H_xsJ`<}ZUxg`+4cYB0wQ zQ`~T|xVVLB>G<8_)#snSzyCOhh9rhz4;h3B#!5*Isw+WoN*C4-7rNn~1RBf|(9l;q z7<0E7n}|TfMbN5E^|7tjaA&Ltfp53ki=E>7o!vjqrwhcb|M2ELJ~9(>*$(J4W&T>v z7_uNah9-k_!SDsUhtq*OPER>ye<%k8$o7oFV|ZvMf$U8GUE;dFZZRvTm%xG`gYVz` za=%&K|Lf=b50CHOyx*)DrSsFfN76g7AML_AT>3E zVbx^E0X}Y{(~H^8pWofTf6K~^pYQcqIVrWbA=!(@4F2IC20{WbROJRt$XK%L)pUNL z;wbc*Bo~-YFq1ohYDNwuSew9hUM{Y$yk&Oco4zf#a8EI@uVV`C-prOcwMMr~k1x#U<^q=O=V!}Tuv#rPPepFmV}uQAK5-ZZC;3BaL^VH?$ z`@cQj|M2iRO9_r8w~f*xNC@dgm0~Xov?YKbyzx*WFLOU_rjU)EM4M;#@8A4QM^uc` zWdvg?tBL6|;4-m9K3CbAqMl^cqp68WqJDbw_WsXE*!&juOHrlWX>w{IX>?vCyddrC9@0Wa;5FJd0H=hLvQYl>7arEC2 zubkss99yxfI;&iE@tF1aYA0u+DnzU}qWuH(J#gH4-OXWSt$I8`NXfgdFSjP|VwVOZ z1O_@W*cdz;r*}xyw76s`rTqZ0o0c?sb&C#3^2$qoDH$A;yy(hELkqzT%V+`6>p z1d!*J(syMuYsLJi3uo0xdlbWN{%qr02LIss+IWNoqq9XbQffGdV+=jwzonq zSg+7>*~LlGE_gzS4`&4J`V9#fD4B3U0l=L;+Z;E9H2HcF23GiATu(=rQfN*Uu**x$ zE`Zpyq*7iI%Df;-+pBpdxrRUBisE>M?h*+fx!SYJixv;l0TJ)q^Cs`ir@W2BW?fMM zUrl(?Y>QDh@7d(c=gngC7$(whRiaolpS~nJu)}`@llB8A)_4ziRf$~~?w37Km6773*?lUVi70A`n|VQ zc`|@rjuYTP68S2G$Zp;z0G(Ezry}sEg zEZ{UGnTJ5#8NNW#>SGOK8qYDg!9fP!>1;Qw;c#pl3O{ZeF!Wr1jl6n$iG=+sLDY22 zuj6=9Apz6ZIw63P&Zi^>0t3s%L8YhJ+aN)O9ugw(vnfIq%wh&j`T&4cT=wCDV9Bsc z+S)=3#k_jJdgWBAUafp`Vwt|4uHmAO#sP}*^u+lf#zHn1)|YvKFwO6 znhABU$*RKJUX5LK(#7@lf|SmWoT?}(8jv_4^Ot}NH_p?ZM$(C=W+(>RPWgGXFPIs= zu*5w^;J@AC!N|3$`uufDVzt0N%Fq+Jk!&idPpchgH=;Y~cuol~t)aFfm|ZUdkS?_Z z_^$9Tq7zPdL%|3Mf2ZAF4?NciqhmPIJMzuI?6>^I?WLZne;6UkBqEOagK4va84M>rQ7g zEZkQMJC^my55Q|jX@kVraOYlKbseR?cC(OxruK{C)W%L%6k#M?%wrB2ZkkG(T>NO91kW$CUPhZ@5kfv@QsS{BW zQnn2b9jOr6m=c8kCbzR0SJ>5%u^GQ{= z3pJ9t$)0*iiFB&nK|XSy@u=vbWrH5v@YQ8#Zqp@T@DJTZvKjm2U5F--eJl_TXu2rR z#CAU8+Zo&_z7==pV3&=OO}_!0m?PJ$RbF&m%^IA z>Q$WwTaH)2HOOSoT&Vi9iW-3BM!3}l$ zbz2}Dn8Oz+#{LRse$>hx^fwE@v|e&s8V!w;_Y3tFD4hJERkR9jrN;O0u5?WgX zR}tr?JEKy}k`ei<+kY)Y3K4?ix0IC-Hp zph}M19_;OwV-RvG(mPVbilAxPoQI*LxxHQ`qIrQ=SE`R_(4&p!<^Ze`m5>a}f6omZ zo{j-;g-!_cKQZ0#am$+sqFygt)urWw7bW`HLnibYK=>X8e z)q8e_k0F0X---Bbt`q1W-*z{Lzzmnv155^$fpBUU5b!~ChRi|Cjk6pg_H86a+8~@v z#KNFB?#(q^DxtcUUar5(xd|%mmOx-sqw2RN7y<{6 zqS!MX!Jpq8OAr-%vD+jkY{uv@hH=2nr?jmFQE57L17}m^zC)`Ep0@EsFtlLv@32m# z;f>XfjS*-Vb&SlUMOagfTsRV$Ou)E<`oD_{XZtuE7$e=gI5-1q#CBd^ozBk;`NFZ? zGId)@K4ex6Ih9AAM%>entSs{Ip^*bU37?5Ce&L^BYkx*&pJyF^zk9Ws+_nFb_28HDRoNZ3>En^_4|UOcy?$>Orzc6t9z+RUwiP zK4~R;DlwEN#whbs6$Is=UvZd(Y!#<|d3-~PTcVP-&t{QGE#@Oi zOG~@B23NJw)4_;wIYKv!A#}g6RBxly(4{^NkCmkW%oBsZlb0t*XHqjMTZic(rqwo~ zZu$Ac;^E&=2M93(l@7bxZ8|ydIkOw+@#+^!;EAr{C1|n)nrO3>0WEbNj=n&i;XKEu zM+ioHLh3%fnx}X+y##P72x5w|qWZM5?c>AG&yZWQsz52O7F@X}VwbS2G+tHBbnRGy zOOU=J^Ns+zSbNegsu)4LvIBqFsFS9JBes`#?c6V+V z#L6eEZEXinj4ZU)yi)Kx+nDuJk zsGstnAOipio5j0?ruPWh>*d{Mnm`g?5KpkmPKrrMhX+zfWGB2jXNlgQf#ot7PT z^8t>oF^`lDu{%QZAO*A()+}I^gNbJ#)6hse=sO^glUF1K0^__VoaL-5uog!>A&yuI zuWA5u6M>7RtJATbU0fSt%4P~o+-jn84m46I8JA*(`AfHVo3*_~F7(9`=XrUjR997i z8giu-c*9*w3gMyY)G}rqPrw<}mwGeQtfwsTiIwTFWlaxO5eBVNX6xM1+n)}+Icx!w zEG8hCn2q!4suUQ_nw3*lC~|Omjpc@c2gI_D=5sknX9HTTS3u2pt{sSUtp{pLLN|g} zeMvVGL$r!KoTBUJX1?~{dT{y(FS$0Me`)@-vQ^{7pi9S!(yndn`s6dQuE(988X-K) z%SYLt=?csPyv71)9`zv2UyxBKKs`5p*`m2^j^T=X2a^P(QzW6#ZOQiBp9DJW*0MEN zWsEufD=-VV5>CpjpWK2{=GJ*A8*C1|b#n@PDol5+G};ik!z$rsP2^-iL+IEY9v10G zPcG-Iw1PTDJgWPd5|PVF=>s7j-9Y)>zr1}T4Muq8A*3)n0LUb=1Z1f;W+pEl&orpS z(PXz=nL!TAP4TMuVv8@fF)Mxh zRx^eR0nCFZ(>W@*fYCSuFE%_h`h+i|d`mQ^R5Ed>49_{%xBd}*i!w36ku(=WL#~E5 zN@6n7Gpb}n_Eg@soM;d2Uv6lLRFU~YpG(;zKDrDz5a z6~#%WC?S<(B_&JE$&73{+g@K(Xi*V=%MyVF7_3@FL*1uajRw(QvZK=%b+R4}O>wD_ z?FX%c9ky=E5>DZR;DVO`^qi{-SCJzT;NjF(>TCbivY+h!ILH8<>5kiI*0Sm;h{MtfYhAbz_we+ z)n~6w$VB#-PMKu8cfLIXOxGFkVcO2P(iT)&J5ys8WDqF@?gDw+B@8oxQ`+?zP#3%e;~ooh z@9RnDnB1oFFMt|y@}$>}YU3ybpabqUwl%{R40(fVh+$yDQf}Ku%Eft{WjraC}+86)=t* z@4QQ&Pl+Vzq^Js$X&BmOZ3{IjsOx>R65>x+`cys}NZ|PM$4`$J_aA}qp7F3t$4QgJXOgcc6oYinQA8WGM2L2JgB?ow{Z6rt8%_--+U=J`$ zF~=B%Zm%9!;Js3iMsf;jywRtoa?w38|JKk=~?ujjBBh}8lh3E)}JjfOWFJH(;^&ov@p|C^- z9i&}`^>?+ZPV(;9CzB&~T-q%f^!2I6+xp~{2o<6@0q{ajl~h-plWwPDA;z75&uyMWv7UTxQI^*IKOaR*QB61r|*>&jhsp{X+ zskKfA#l0Tz=Q~=z8@GG6vp0kE1ky4PpXqcwx0s%|(3&Jy#x>m)EgJ_tA9bk_F@r$J za<4I#Vr(A4pxvh6>F@(hkFP4k)$3XEWAv-ucdee_eG+{Dd!!FdpJE}rr}<;NL9Y-J zuv&kv3U&R<*wAd5%eBj6@?vfCiJyaDKM%@Ywl^4sd+*lw3ViGk^en_Ug_;2ye zc!(4T`u-a8Q08msTRT8YS7=cXo`mp?o6BQ+o&o;~$pA4Bx*RfY*;1sep6Z}VSF~uk z2L4ztdkQOrG~zx+4#1vcEuf_t?V8+DsU#B(b%S5ogr$Y$$E6Je&Bz?L`-5?(@ z_`&*W>l$f@iQIFS=ByJIk?yWrAU4#q%?)P>QMtI>ci0g=zJH7=+6GW+lx%*9_y}e{ z(Iy;i0ZcNWRo^qNARhv*MF~ET+Vj)>^yl}8bLwjqy^?B-Bnn<@B3EUD&WBM^{Cfr` zT%2wvtAGGq=JVzOoXc1E0h4n+a!rSxn(cUl{8K$b;b0LLD87wcaAxGs`W`HNiW|2%xYa{{@z|9I)Aq z)CCA|xQMX*`z!6$f>@e0bTOnTk1NSu%1u zuSpM##=4#;p%gCJj0{!6z0KkriLvGj%E3)58f}?i?4ZFwN^lQ8L?uE5ZvMi34uq-ulN@h3}HfoF^?AAi2=&+$$DJg|EoDFS52kja5S=S zR`yI%O5QEkO<~74#Z`~MBr}O{qOF)lT|0@$b7KD8!iU*W#& zU^Fz50H<`gTd4V%y1B%+gyf2uXgc-Cs?8Tg1#w(#2ob}=Y9su)=5mN{lWgH#9*4U* znVkXNO3&kz%zfg*uGiiUvQlTQg&7SWk#aeK3AU7UgjjI>iAI36BX@8-I%X=%j7;iw z-yWoAK0|;k{%I}7;l*6}FM}nmD0*p#H0kw^ga0!56)pp`=<*KPAl=ysl)zG>=vekO z`pksFtCtP(dFgiAQA;*=kRTzX)Bt6(^N5IKCNi!s^-{Z|V5tlCv+fhX5VS2HR3QXo z>G$M?*0jha8&N^wrk*z&{PgP2do5uaOsP~Qy*GOFQZZPx zfKR7;op8;jQ#ZthCJ70o_~OE|3ea<&OGPNcV!J|N`f~3`G_z^GK)VPIi{aqB9^bXz z-8|SurzW7oIf2UwW>?#`caaI5Z|AwngelV{9uh3w`EeP&USPGRM*(6|tuLZ_67~}5 zH%SIKvz+lj^tyzhp6;~V%2YNTpNYAR3q2HE(qcOMt@STrCr(%5KA1FsM1&f0SohvP zeE8A+`TXJ2yC0e1j;VF+e5-`R@(x=E1yZ-kLGJWIdSjsgi5wRe7bkg!Xr6u>hT+;`Qg8Oa;d&>YM1gk5~JpAF+D zPzT4l%)A-{sWFHzD>ZDB*L#On;2u^Dlsc;Ya^h{(0Nt8Q>{r)|<*CPn79_3PA0Xlu zfgJ*Jn=e9^OV|jEAab*zkXlz3V&Nmj;=*O1ywEB(s^LBNl~2lGBbUS!QM^X}LoQys zsD@B^4>@@F>8H<+NF@C5LGk_yKfuXs2B?pRPg#6n%E7UF^Z5Aj-S?j#?*XklJ8#|_ zknW(IFOG3_yoT<(Wd~UBx{aoGJDp%!5G)+V5n1k%VA-UlY3ROvchk63D}W3~2k5%U ze20{1LNL6+JfXJPJGP9lJ*Bt;R8os83AGhwi4)MRnynV{YeopBG7uEm^-#d?e8YV1 zFYo_Gz1n8=mxqs!xWFEI4^8{RC&-tvT;l>;NC;4@t0_!>nfSgt zVlupavj{eH%6jw##e2=kV{rmr;H-N4+lT)ESk12o!Kn=%fBO03{f~n`iod@piXN5s zl^z4D@b`vH)j6`~Gw)moEp!ZwH*41$bv^ z6r(nBRxb|sWzvMKx|#g&!~LgE20Ct&r?s=_(u(u>l;rNj_`!*T`lDpd_rX)x4?Z8@FYAT;4s>T8$|lQGG5i0R4PNbV4} zA$JwYcTh}GYs0u!An33XlfNOpwt^bce#5*?1$a3~ns8^l6lMZR{}xgZfTwaGL(%)p zPffsV>6JvP5$D9JHQVEZrT{Oxo><=Obfu5M?#UR2;39+^SZdWB`y-80{DjJ>GcMFl zPmKxP(^F$2HO*6FqNMy&WASZeb)*v5tQm{2?7op&y ztE@Ukq%?6`a2||OJ)yAJ<}r9;AfA>Vl!^=E!wo&`{@Q53t0B5MD+PG&I;k{!4D22I z`f+1l*Czv$L9sVl(eu^5nL<^33YRMRy?2W72tQHNvASKJoHFAYPC~vGz`By!9D6$W zS%j+W6R~pmPiq5}uBmhRg6Pz$B;M{~b>kHj`4R8}sXQ->F4i)Rp42CULr zMQHruTvY9_FeY`P$DEk1O8`P4M384H4sr1?OM9vwpfe?DbjRU z@k#+3xD6WM5#P!30x%L44ZiM$VRxH=v2BPi4D2k&OE_y`mFu-plMRaW6&$l;`F7n; zV=6}PdNw=V8f@fb!pCScL!+fQP(76BiLE$3$E(*;dD%~WrwThF;HfwXi1mn8J+c)N z2W^8M#72~VQYGf}w1l~N)rn4Hbh~>=4!(N-RlPrn9Jw6ClbSZKFs)k}8~z&_cN1br zbk;kQ<=OCS`~&`Tvq9b2dnnwH8wOg9|Hz^!vVothzQzEKhD55nP>0uaxjSEd{`BT? z@Q=G+5B_n8|3_aTE8SOr{P-2kzqpY}>b{!eO0W5P@RjxOSXNWkXqU6Dsn_wmi5`s#P0kKEsfwB}+QQF_d@p6f& z0~S?CSLskxRX~70f+1AlPOl9jz6jFNmB|L%IMn_D_-HO#`(lfZB>popmwuWr(rbN70N$wXv4dAOES zROm?~y_Wb}AXCWcAWb$E7uthGh9hbwZxyc-frYLR*hLw1&K$A}_J5K%Xs4%Dm$qI& zZ)YC?WT%t)MaK}_JH(DQ&9GHz&w~22T~eYT_b|-vf@nMetZSS*D=bf|BwWPRWi^19 zS%2HMcKXEM8Kq%?NbVN7V|O1&IPp@Q`ht?uKpcU$OxzSJR*)he;Gb?3v=)D>Ho!CQ z*disjUFn>Kvjj_GHQ5+eNuT=W z?MZn^U&#Ee}3QTwv)CdmG*#qK5_J9}?Ly>bs*b$9u zW3lXUp_f8-1fvdi9TqAagRac@$=%DLYPP+AHFP!85aN=MsqT+Xpj z4AAioDPgp^IEFF{@M=P`YeAAa|TvcHlmj2~8-}aQbxPw5QX2sTo z7SIBL#07NOj4wfu15oT#)W)4H=7nJDMRnQeI|M5&B1YGz8w8xvqMLG>fu^27QOf^$ zP+<630o_fpWhkuxnHgyYWJ|>2(#IT~5K%i_!bLPBBEKROp9mh)Q3}&y1po8A$q@@& zqYZ%Ei_Ga)P(G{`J)l5~4{uNn!V%R+y$MeH8uK*4v73qC*4ok%e9X0+s0#!(>yK3{3%$Vsc#{z?&MAVJtP( z?ezDe(w!ho-p|ib?~pWamr zV3(5mZ+*RWbK7CQ8s|&Aaac0Ng_zRq6cYti;IxShKB}Tdi0{N8RYGpL0G=ESR=4Dp z?|d2W^#$OGw=@y+=@>%V21Qk$ZRT+UHv5aA0#Gld^g{|&`!f%l(W++vRpFjuIrc+xZn74>lIUfE$ z%)R?_8%L5Zsy_vHHe!OBv1bVIsok@)0pdYo#0Lz3l(fGfG%`KbU0L#xD39mvp7Xb# z@B1>dUfrPVxqBn7BP^mTtGlbKva<4>rVVjhow*{WU4^|ZO#`w`(3?^ysj|5ufxuKg zN3G_F=TdUNlCTRTgArUIOdw2k#Sx>mOr`N`^H?U0XE~7uDP(9cDd~j@Q`+ymi#YaQ zO8{|ChyIZ(Ytz#^v(`2XpKQ&&;N!sndg~Go4|4@YVj&b>Sjz5cX-k&n>kb7IK{26{ zctci(u7>W!q-$zm(Ssr1ugXgfCvyD6yTMgP|<=pM~c|(0!12+j-DX} zxHKFf!l)_11Ac$>S*Z%u44o$Io=7Y&*GO|BS zQPtq44XWTiPaw@mtbFqBnxX^-Anx-G@+5XoS)MI3Dk|yR&i3>#)iM6#f6&o(I0p{K z6Q@ilKs|`B%8BpF4qW4KCms{~40)>==P0xbx;+y0k}bi4Gz#V~Xj?%2b<~(~qFr1h zRsLd9F;lmvPcA&WVLM06IOUWO(GJ$5aeFC1?x+mk$xUx)OE- z(n#_z=d%K6X1Mg`nJM35``Ht1*waV%+bkyi6prVdHpIeF2iC=7Q+s7B_P58mmBV!$~sauf;{BnF)@F=&G7CObJ~mxC9W{$`((Qaey5tuV_ZsQTHm zNa3ZcanK$yc&l}Q4fM@F*c$~5lgx;h>{5b8v z#r2;-BDdq)jcQwkjr|L7JcS5ud|++C;yQI;cD`c6O|IO#n8{Yybpl=iamw)1?#ts` zLN&qo97(&7u&f@jFH0dKMo@&x73(JLMUS{%UARMMj=+BA7=!?&5jcXc%vd_@Is7H-v`j_2o)c@&sO=%+ zdtd;mBp+EAvwzLxR`ss&K~VYx7C1Xn9ytvty^ERYC^CrO81U^?i}s_wHoU>w`biD2 znv8JwS!b73;0YI4FEXQmODp#7s!1oP2QS9KQBt-G{#u)2Hv~R83F9+bI-Kk9hq$(ez$=gy>MH>(OG) z#D2I_KN7{!gkQA%4;}+*rbP}49@^EG=A|4W^ldW!r!7=~eEQ+EdyYDoP;lNY){8SF z=+1RHsY_-+1r(3hfleC`XnD*1yJ9jISC(kKD&^9YM8ncX)JPKvY4AE_}+*SHo|voHK}gx9N^F9iMx8~ z*%~_%Um=XC9!CLC#|;!b)7c%ZO^C6x>a6u0eLZw5b>dfdb0F4yiAZq#gXX~qNz{!A zF~w~6VB=|8!B8iM>HykvBiXPiQ8;PLKA=-MY!idLV|(Flq{Q>+S~ipLCT|p7YRNN2 zJ~Df^oNr}!dSdCFErg%ngU>PXL{?9hl*#st3ZOZOt@dZ}0=$1O>urkd5*`;^?NGj7 z#0kKU7rx}69ar@f4f+t9ik3~s6G^+QS-Ip;eAK8{&%WmSx#w{t7(;T=&jfKqB}lIF zt0G{AUkm34jXX=@SZYm!95DDU_lOI%mfF{o_Y@Fd62HW0-&(+WKxAPAOx<(#Vur5F6wnR=?Hgq1|h@|X7BKHvMJ?9ck z;~XRNyTYcWp|oshlhvzb+lWOVFVN;95}GK?2}QXgR8_8*h66mZ&yf}G-G?{-F@5{f zTe`pdP7#Q?;Vy3`&k>diDtmK{*Muld1z>D4V|}MYAMy^Ch)`#r=j5%*PTw+!; ztVv_pB<2h%7nB?_D~`61C<$~smtO7AaYQ-T6?)?TEWbX6fO@%VP}H75H(sv18(&x~ ziF9dsi9B)SXOtDH)0*;)ynVR-{KH@FKMpzxNEF<@0omQ4GVlG_=TGLrKyn!>M@C&W zJ+wD?lu3|^d?MMK|5>t#EEd3)yR( z%dXe0SQ_o{HG{U~uTC=PI z1pn~v!9iMitS|F)`pmj)=roc5O{Zc?nG$RT^Bqj>YYG+QcNbU}pw?z{LmiDhB{94m zu%4B@L?baPBtur^NUINh!p=^PZp>2_*=#*mS(TwIkzT|z`KP&Vu!QJgoWAS31@_(j z!}8Q=H zA;n@tP70sGt=(7h@zPj5Bx6PBq~%2~(t5znnjtc~C_@)$Pg9tNJAy{N61l)Mg3oFn zxY@L!iK=KZxJ+$xLsc=W>@Kd)_u_{RfP4|0ZrK+#n)U_o}XV zhg4S@p(`ysh{i-UJXXm%&!(UqI*0NlvBK08kOxdnL2nBFQcrsA*3G&jQ3$w>fLC#H zK|c~b4-7|G$ZjkChZ`zGgm0VqrNrsH{*JF=b~Y%8z`gp>XmvmSV-Y z>l72cfu^WULp<=qt35)-Q$4Vg#Xj*&paaVOTNI1}0`d~3chythM3LU^1XwCWC zQ!WS+2TaJ>>reM^f*Zsosq4)uVx~C_OtZni{vDL(bV_J{#oURS`E;r+P=JzcMuH|cR|t)g z@5asMVzyHMw(*G$1PW(&p`pWIf(^CY5(mVSFyK0aY7pQ4a!VP5{#qgQBg6pmw8O;V zdlAYA0nSfKp4^)CEW1*$ZJJhS6FP$?kSb4J|M>9vV^yT3XwrlyH;&|h>N*HMq5x{d zK~tGTehzijmd+4k8zR>No;F@+XwJ+w+rh!`$<1{A0wl4>bi*~m_c;I$c5em>%ID+6 ztn)&|B;LAtxj)ZwaJmv)B-u3pX9R zj*L-Qy11Mokh9fdDH3cR0GYFb{EstDBKX0Gw&%g#*CxtR^Ufwk41GQDbm~%$d!-#e zi0K0=InwM&FTuF=xxB9c2<0Zn1a=7CXSGF@(qgjqn5RRs_V7|S@dzpkF!}*-b&HHA z$J+Y%#w{*~IjK19^gt!?A2Oaf@0Z=bV(~jYwIpzjLN0S;B5-+bm?sd@k|P?UvYI2g zgy=!sxHRBEh8!bzMR_G0+iw5%=KI$lw+}$-L>%GYH3vQEPm`B`jyoZUbIXone!Ipr zGhz&WYmxtM($GDc-fT?kvD1o?Rl!+``#m+@e%U=5Fg;;tV`U6a`~`sK+oE*i1=Uk1 z>2o=AnjHx;Bbd89DmkmsZtn=8mFYQ7WQI?9y-s}EC-Bxc7Nx@y)({XMPO&JWC_R zhnNXdtR_UCLi)ReD)kO;mdn!mVNbY3s&C|h~!9V@e;Pz67rz~za$oShl zi)Uws=^-GfLJXeYFb`!U*-Dw$HvQJTPS_iiehrfkc0R@K&rb)xMfF>nn5t*|cJRN` z^ZgF6({=}`I}(0}wA67N(4OfyNS7I!`g{27s9eBoy7x0P>lO6^Qn>&?$a!X>dX|`t zP=!^ncrIeQcHkBkxB>~agfA+sC&sIEoy#CSTSxrz<^@DXoCH#}`N88#?4Ay~(f7Uk zU17^ehw0}n{W5J!On0biIE@ty{co1g?jnX2bo3Zo`{kf*NLF*$#&KR4s&U?og~(R% ziq>-fr1~2gJCPD^L9kI-r4<+2A%sTK4)>fTM`sI>H0!d6aT7s zY~}2~yPK~x33m!1klxl#D&P}Aer#1eAex#{Kq)Sg5yJ7Q0otOE7h7}Pnyyfs+LekB z%6i*Ha>BxOSUcI0ykw9bPP#2N3#Mq~7|z}auprqay1Fx^fG9=P1kio%W z$9@4(N6g0+1)EyUSHm;_3ej|%SiQvOgwBviNnAx!8Ss0uc`V@fBnSLvoeMRQ_8w#CaWG@L!p(1VtWt&^Dxt&KVj~u>{cZ4Q=UUXO)QQaDpMkWa6KGi)%3&? zDKHZ}a&I#Q4rdM@7gU4_J!02-gAnu8%fXIzeXt%so}bVu9EU>bSAhyiVlqGyFO~1G zy3*am|2pOm(KXmvlZyi+-@}h0;x9u$)9cO1NyTO~Qd)&7dBO7f=rw*OeU+=#7i;Ju zRvq2q&TiU4`lOWqQ5fh2wLO~xIqS-}!aF)JO;lo^fMnPM;?SBlO&aDU$LA}sfH^$9 zSkmu_LddS9tWDHD>3r{upn;^NznHV=!F+{()3O(BdOryXJv`QDsd^!l&cHRw(_-Sp zr{oJ;7>`p~U7Uc{JKC&5zXb`8H3LPwu5UmZW*h9UPK(}R3M+V&!#NMZQg>1(wvE6M zop~79+!;eUHoMttJ39y4=f*ET17o4l{l)nC40~4Wo=si8k>xW5@WgFJC878z7fjPZ zY* z5KTu9rFM)X9ro_hR`p542fuRFH5OZ|I+2zy!4e?A;2dreh)WvZUT#zYMXVuVXms97 zn?YvVNIK8&Oo@Kr%4nLf7o<^rt`jFwb816*#itM^)eoqP|8BsMNM9 zz-V;dpm;F6L#&;?hcVx!=Cx3U*3B9|s|1M(i2(7+P0MPOSEt7#F-xHb=P)IUhLAZ- zM2dD6qk`&-NDGYEQ=ib5!yBDi0vH=79!98>_T%f1_hY1zw(su&Y)}6JIt(Nz6C`!cqF#8e53_!CJ=u(xfgj-n z1?`z=M}TeFJsf7=inwimx_|TV;o~Pw0E1%O;hOZDd@ujP-)73)dBAcPSt38eCWQ6w(H%NYg=I0ve{n@N#`NUw|8k&v%O4 z0qZ8^4S+8OQ`8mwv*o`Je?iZ)qCyIr1(FDYKZA>V?1jWd`gx5nv{-Hg0urXP&u{8A z1|*oFExxZ4dw0b`QH$WB=xB3Y$5&>#NJo`dxKTW==70+H`no^UM8V7*e4S7;^^i{STl;ku1s z(~OWtCbPvF(NxSz4O9FJcZPEbK44JxF>j^&Grh!t~M(c+3DW{L3qR6T0n(5%y} z=Q>ezWiqC&BMx!WoGNOJ)VM-X^3Cn+dV-8Xlkw%u?Curd$?Y713N^k=ADMDf?Zs(& zW+&|L2YbLa=FoSh^LK*-dQzZ0KOp(&4Sq+T3Y#j)xuqpmV)+yJsox^Rc6+|Mxm{`x zRxLI|@_JiuV8#XifS5^5Thpl7A+|eXL0wpwbyP`54eG@c0-Whm{3$S6X~fC~^`fF@ z4GwiXLs(Ut4JQGFBwCchTz1hBmHT?=R@)JkU_RpOxhow(d%Ngn3=!G8Mmd(nJnMG5M{0M*+}# zXa)*ho|PVQtF`fPzaT_WcQtlZi%fpjubAMvmLQ|8nb_u}7fF)AdM39JWcFEJ$-3-v zGvYxAH}s;g2%W)Zi#i8&%kYruHZH)~?R<_-oW4E&Bjb_%fW{5`845--5Lx5@KpPcy z;EkR>QNc0k733&{JWW@#?WuI53nZMrxn2(*>!KcUo|`l9zzyl{8l1kRSZ%4Z+O1T< zwU)6vK{m5Pq3;F9gWfK>nb8cB=K{b1jmwr&Sn^2*IYHqUT5yLozwNxCV1?9Jh=PA}Ha4 z?}DRUW>?t@s5V1f)RRFxCF>Kz!$nWHKfv=;&KeGSrw?D*eKWz^tBjd+3vHRy=6HZv2B=_N-^+Q7Z>A! zo4)@FzQ9{7z`|Y)a)+V^PU))nKZDpLkd-yPFVgE>z=-UreBjvo+;;(V+Yg?|l)No_ z8{0=eZS!V9&;ozN+ZwuB_tATamp8yczHYcZ;Q^!n<}0xP8E6_&Zl+h; z{I&Hp;Vk;!P+>EnHCQ7`N4RFDWZ%3r!)x!kI&f6i>;r=G%x=x)#O$-%s4fbHtkxjh z%0Ol)^K1VyteNB;qU+=aI!b?SnTxKIfPstAC-Fq;20jBMhpZl5fWa5IN~CF`Vx(bw zM};&4y#5Emlc*w2;YrdLiz`O_(XY&eTHN+a0+gZz3dkx}F)>(mbA#PCNYEceHJG1Y z*Xm=uttaut*@h?=obZ#2ljFjiU$q;SL>!_Q9gS0PfB0D`(dE;EK*+T8eCqn=YZPNu z3e5d|cmYY5oB>))lNEp@SD>A>uv3B5Ij<=Rg2kCu$7!Zmao`u>LeV5=)Ui`69oUS$ z;}58e>LIjH9|h*8#HWJ9HIRb9nRi$?hiRUQGo0H zTMn|R`Vi@=EGYY8o}#jqACtDL=gSdG#IU-c`&ZdQqr(U;0cnB|#z|YJ z-Oq?eIAlb*og7%juJYCZVP)neKJ4|A$F%IuFg4Tiw_9Ll+3Hfr?g4^}Etn{>Cz-G^d zL&T4Zl{6W_rrDY=xcMxbo`8Dd79lLF>0&--xDD*#2w52!8kzckRF^xGUXUsf@Z3~= z6s$cjjju;7Xt1A;EqgDVDjqH&iiLo8#cW+qW_$5NdY*g%*IsmuTrX{VBzbAu4?K{r zZI84pZTk_nlsP{m>P5cKxRiUQvu`QDFw>?!usQ50FDt?|jWk1Y=Gll#VWhTKHY@iC zk|j_}r_D}d40Lk7N@kiFW{Ec36J|Hdd6>@>bj(z83kI73e-`6wBtRB=D9v&8`u)S(PoG|AM0HHv(M`kL(7hL{iGStvk=fPpWOBE-ao!-KHkA89 z?QngA&y*+%_RVSV%{>#}2hM^E=v$21c?@!c@=+(qMhfJkdJ5b*vT*(7?+^EHK74-v zpou}&$tOr+5S!P6I>l^uT9e2&qR4hy>Fp_sCCB}6@!=F-q{5JJT#dv5Xx zmo`|#G`gG=QA{c@%26jp$vO3LSGo6CZ@PgMOg?^$tcd!8PtGgg;cBRSds}_hZHv zb7o$UR{1OGnBhM36_nH#8zX@x45ovhUcdVnlX39NyxuO6_xj}v2F=uNatO17ni>`p zl>Umx;_|-+d-3dl8T_xo-@bqQ?jBeQc^GaOcn+TX)vjk*q|PnGBENADp;=^&+*&J- za=A)i+%1r$3&*eYp7imp^`b_~Bsm z^>;r!eEkOH<^K5k&71pApSEv4ynp!k;oVlyKThxe^7*e}E0U>!PQ&X91oG{rU*aW- zD=-sejq2{(;WyM+%vLz!5Ncxa%^1QNBQJ^ov zd{bMF^UYM1k+k^VT|kpdXl{a6Xt`^crxie+jwZ$Xg&wk+d_~XD@@DL5d3cSm(J_;> z!qnHAuI#CQb%n|Tw(Fg}XkmH&lUQ{EMSRS7_Ou=r+~VXg1hu5-FR1Uc%KN0H%~F+N zdOZ_G1X>T82E;#rfHM%ksKdCo_w9$zC{y}$_=l5cC&$kYh6jhI$D@Pc(FqDN?w`Va z9kT-dM)_wvtB=Zsz-UHGJPdLR)Q+O38|4D3fnMCUL2o5Q(<3@s$f*=ldnjqsBhPHM zd9=GhlT(6q6TTaf$R4Rr&p|LZ2ZxXFn7!~)O*W&m29qbiYEq#?p-QXzXdI-D3?(pC zCSD?WzWMYWo%8_CWEr*+1sA2Lq4^u4p%|szE~-a|5J$1D#9O8;-)GA5`=8(3|G0hl z`1(gCtJ5h+DYG65c802C+97H6(aarz5=uC79u6vvw0UglNlEgXHR$ty%bPa)=AEY1;)#1v0ui;The-W7Apr#Y4VAN6e2D`6@0q)ON<hSfSFn=mp8+`B6rXzPh z5rf8p(^9=9WKLzd4m7czrKScYWWn}$af|3t7&1yPJQr94r0#*1DnWyY;`z?8C?YYNJoO=`oX! z%_)Oo%#c=NO$*gB01twM+=40s-M^?dMgLy4Dd)3KJ&N{TwJF+r)uw2t+SFMDH&O5* zWNzX-YnnxtFh{V?0z0s;i{FBIH2j_y>?qaFu97E>akIraT(@}cz63oW-}keK2B`#N zE0j4RHAD2<B#2>*sau3g{>!K0nvDZvLj!83vn38pSV`w(7` zcP-f{09t#_F!LQ%o6gXm?BLxL3M%8Wu#K1=xF@Kx?HEKi#bGj>(lD>^`0H`;Bg5od z4`-|KCfCgQX7pPPN(p1xKAPMeSOt>O+-nSX>?_lcJstepAV1jw;49r9iO+wkb-`-q z2jDfGhno8kP!S|Zs<-;l6}bC?JO-+=@d!T1)Y{GGGS`RFPT_3aOkCcTbJCug&GDZ8 zIlxhROd=i_8W+={6G-1LJVTES`+ReT)G*-##^c@%lgU9{gr@Hj3*b!dxTi8>lb6D=jF!nDwLQZ596VGJ zqywCmjUPY!_#`5Fyci-)dN6^Hug_s|3|MNxN#{oxl!CsDw7|VIWit&M7j(~Ijo1z3 zY>b6Lp_w_s_ZP-D(muGHF_X`9gl z7E~bSp$TWgM3Z-IJCYGXZAn{U+T=JSL}la8NV;l2|8pw1wu6RkS-x2aap;)?RTR-< zxZFJW%*Np6!Dm`a3g(Dc8tJ;a({NeTk0t^5PFB`npBh&=?dqjRWRizOqTJK;V7U(cqRAy?ln&M%Ze}pXSk@i8 zmxH!2EgTJX{ebxXBV%Rp*#gJZ$T`;V^DWZb^|01WERVzj#o*6{%nHI)evsN$rSEmOWr>*n^49=&*sw@NUDi@_%a9PcB zAr;nTw@1M|4qOc5(E+*bXVseTAEe{`0LMF*+Z1H-GxX!#AkAJ3#42so6$8>S`MbD^ z8{Og`WR}cWN>hbY?4UZHilqSXB>vo(%TV`;_Tc6nCv1)I{vWlRU85gf{s95Q$dMq=^j%?D69#% zZjy<~Md?6VwIe4xlbxlkK`ys3CwpIevb#mnv-%{WW}A#lK((|5*J6H%9rE7SL$?x7 zct$V)e^6d%K3R}bG-ooI4^)XVuG|j*{P}DmZN(ac!f)Ls?m*O#mMYJIs%wdzko9tp zB;tU9H@)lvET4(Oc6>QLRLG>G2p z%%`#^K*xuy1wDI-Of*1xqsl#v-~IK&`u-hqc%YEx7PX-uORZtYygaAJw?|2!Srive zR>Q+|BDoujt0YN%9j>PfOEW1K(`<&)+_(zU5kBW6PE5m)VnI8IT6^^XTKtx7{X$~TvJpu}l=NYHuS8%bsol1$4)!tBP@#6T9>MiT{^y%+L z_?$oP9p3(~g4*p+QB>6P*dk&gV`xD=UEk|kHWPFHU6l+Wr()k|6JwI)(fW&eX<8C5 zVh+hsGgQtrwhcVQAAc+*fR>25Va_t#*siX7gT@RXG$LUt0`U(AZG%Qq(oAed)xu6x zHo_ZOAlt?*`ZIwBdxDe!bsUh3_Bt~=-p zx9I=ka&ZQWX4G|(nr{1^k^u^ScM46GjCs*XPa{f-zQMZFa#$m9STR%GWT#pi`Lm}j zkeMq#e(1nJs8@-7k&}$0X6y^g!3vcKkqVqs<_OEp+yiy(B+OJ~zE1Z~Ok5T(Lc$J` zFyR?knr(v42TWg&1k*NQn7W$Lfcp}uf+M-iV{7I84o6jRv-(J6BQg1LVzNErifaOn zM}Y1opx)~&=JIk4FPOXitY-rYDO6`XIFMb`McKn0^T9gM=L#4 zzl7a|ntkL38w2y(5_QyCJBi_?|!q7J{5ICXg9_aqm9Xdv^p?jOCxu-m`|5@bBeUIg07Z3h4VAKpG61roxYfT$B#rrc=qGAhe!z42OGnM3EG!IP(~J%Iy|!!S&A88#c``s z&z+g_08q1dLT?vn7Pl`}7@k;{y2+hSr)z2w?YzQCk~Y7LmUM@JdULfiy-?drm`>~m zLK<&5Ssm5PB^oe4Ynl?d`MV3-f@FdB++LP%IGNuOI1XnKJ*Nr~a)i>^+uI?1CK-F> z>p|QV)Aev3Ejr&05in3R(WcxEuCQu=`s`d2BzqcZLz(PjMeM9$jZ@}qr54NucM*rG zvoaIJf6S2CEtJK_e!-CW$W4zKGHn)=@P?D*TaMh7eF|#6T`!y$vPAlEv{Z4Q1?Ss^ zYijj4d4ri_E&Rod0j}Fb+X|k>i;$3+=X+J;0S@W}h)v_w`8veglxMZ;4`{wfOdiIK>nR!h#hy}(ng%=9ug|Ou$a*jRlCGw> zVitYZo)xXoq1h9>jL7C@Grp7-z}%;r2OkOY@6Yr&$KN_t`d5C&1BFpBc{^TaH9TCdWNQk zum2>!aVuqQ{by4+I=h23F{(j+(`;DYYaXv;f9M<8`a;$)eZA>3&o{Ijz%5CUlwrPT zU~T{Nq!$j2Y;gmC>aX1c1szCvgxZ)U*!oI!>biRBhq*%3Ofy#^J`%LSIXeQuJuz#5 zqt9{TVh*VYqhX&iHsjxP;-o7fMw|t0*=k`=BG}C%hl@)_4gb8v>U^WmV!V%O`8@%n$?R?svR#Q-FlA;_8Yi>E;8+MV z41U7CDZ(BVL5t{hk|R7{HV>K*4!4`p2y)H&jnoh&h^ZYCv?3X+3kq&}g*z29G8567 zHRn=ildYH*$WBH7Dx6jG7dNY^laa@| z*tD8r!s5&eLa!-Lupk0D1q;i;p0PlthrYQ*QBX7Y^RO(s(M>J%(2w@Q?f-?4hxAyw z4z$lQW5qA)h%6(|K|Q&rN&C}g3|g1k^?`+JFaqdT4D)#L9(x`vha?J!oCu^v0|FVC zInO}YSo!>+=#Z0>%m6cT9%bY9$@1a$oH-f>(o;X+c6HU@j13`CqgxHSo)`4+E4tT0 zC2vk0g+ihtnTz+I9$vqHbN_Vkry{E#Nr*cO9>D*FInqa8|B2;~X#YqLHs6k4{b*1d z`5~UAC7zw^;C>fx?YfZ$FlRy3oNE6nK)TnhTt4jHN^@)!sQ?Sdi3 zK~8%v=*jGIG$^mOru~<0^2O`_xc~g)NgObbVs0s;@?Q#a8)fAfGp&wLNLlFmDMysrecesR1&kzyv z7C=?1hX54Wep_Kqs9(V~aYimp&xU{baSclK_0X+)VgwyHGoX}jc`?f3oZ^wm;(+_Z zh&^|d*-i^lwht^ebp11BFceHEm0u*~37}C~+8)b)+j%&bwFKFUGX8k|g6C^qPSCAj z91r05KBK&X=L19OS3#K}Dm{eDMCoNX2%(~>?@;#fL(QiC41U$X(wKVRZ{^fS5C2Fy ztzE+jAL5rjf(JUk1AomgwQR_=D2LsHvC{XzU9YxYs@VvaN$}cFNtck6A;{hbl}Y;2 zrd_YJ;})id^%Ms{qXkhj9PC^-V(jW-0*VAqGfjk_>f&V+P;=m7ZlUIyDwU{4FwxibVQ_PY(xrzC*(6z)I<2 zcxaDvBWPF*^PGaEE!;DTD&aN2i7C?=A<+g7cXKbK>#nUPA)1fC!Ra#c!pNw|jR)!y z@mKcK*!VqB6WjLeCKB43K2vo< z)8F9%A4ozWtn)5`3*1KpH)?kFmZx8yv4y4js~ zaQ+a8UATw;r9{wQm-_J=2!N8%&2S;KHEvXxvUM; z9_!g^8*I}X10;M?ZeYl|4V$dk!91OfhpcVLJehEHw#h6VvDLyHO%fiZAEwE?a9$@p zv`vQ;Qy%w8M+9F-HwvnByvOv|h}?6afIm@jJ!IvkzH~zzbzc~1H2FYSDn+b1JZlZ` z2{$IT^!Xa($>5xKI|#*T)t|rn{OSAE&-1t6eGpEg4Jci-;vHz~=Flu&(F?bQ&4=(a z^TY69L@jLz)bhp|W44kF{k*s%qarbrAwsRm+=!x?-}!&Y4Td-k8AkLE@4-Ij=f$~% zzc7JY?4PGF?g48Mm@v?^5wsLNktW`*j=r#-F%6;4%$Vj&nLXQkd+B~{V?X7%O8dP$ zmmiBFnCzij8;(VK)f~fo#8F_~IA3121}DsS-#v*FEMn+!-uq+(B+K)K>P}Jp8_;rh z24FoS4jxAY#3bnLxFOpW>eHuf);@4!Z)Q2ZE2yJPku2F3+a6Rw*2t7`;T@g?a{a3 z$M3&-^TW3y{rEe0`mg_La{+Ck-^Db4ym|JXkwU$XplY(|?SV!8-AS`plmMBcmPpVH zZb*JR!7dA1=wJm!2xuOb89!`mXWvaw123%LE?W($NI=a1^IO25rbsAAH9%DGivj)w`Wjo({FX*x-CfB6ax8nIbYmeng^nbfIZ;qw(x}oM=-&> zCP}bq*M=vin2msf$r1Q@;SLo6AgJ=FK%?&$QIKzt3vHFkOYyf@KO8c2Xv9Du5#WHU z%*2O^5TOtA1Vn`{;kTJcdviC-(J4`^l<;4 z$`F!Sb2W8(91sb8mTCBuk~tC$_h%ZG0-e#3o~pJzLAr1)tmr#X*7bpKhDMah12BOXXNmj?D;=a~w4 zClS#dp2@Hsb6!nWhL&q7x;ZwZrs3=b^RSXla6!voOLExuyh~14WE=3Dh`ZGasKKxDq0Fda71(CHaoIx9@$xn z@EfEQS>1XV1P?@SNGogNpBOf!{MXS**1HAh8)K&EN=G3DmHre;4;2P25au zCAFYOV2)=5dU%U3SJbM ziKv=m^)5|g(bXf7aIVaOU#9UJ)YmmZ9IGAWNnpf8J92GZGGIbR{e!J94~{G34jZ7} zss0Np!%^zfiZa<2fEubd-=FMgsSK>YF$W&3imd`QB=Y&t$-E}&ZN6KGFOXY2&u#Gq zL&k&SKg=9ak!;W@q)o%oI6yM0I$TSNO)sHw_41nL%Ni9Lpxr>-KWh+z&q<{TA$0b= zOa#2!SI?1|@n+dEG48{}C`s0QvJX-mt23T8OpoF>(`En<+bf*4WgL71Qg^Nfj{I$4 zANB$dhpHC2u6?@*j6blBbg9PKkA= z_{6j-w)mX81k+2x``I!R5pB_9v03x@V}T3Qf=fPYRa_;~fRqZew)OdULbnXa#}17U+@$JDKk-V;I>eWhZ`omCq}hvW(`tr@=W16$;Zu1MKwTl7TIwg zbW({rt(I#(e7+`d*c$8t1ob_6ocIE)A*329IEGv@XqqS*h~PnfpFFSCfMvTq&gmKh zq>|*s{LR;l*QywnK*Qdy)x&~FE+K+JR;0fN!d_X{um6d=`|Ghbv7CDZTHyq_K~_?F zui*-8tt-_KQO5=vDdEKi&0b2hOmiFgBIJfmDgr(T;hWVpv<6Snr}JQ#38K}X4%-mw z%RhbkFA{ELc`SVTjMcsyO3W2dE}0h3hbLHGSR@00NQ{aulcvJULU(c-@K#;)Y>eQQ&E)faqIZSt!*ZVd?uxl_r7`!>Fncneg8i{BTMt!*YCC) zI_>`O_8}y;x>pI79LqG?W6MNuKQ$b&qjIVl)BCiT4P8@fGqlZ4*X1cNQ=x}C{>v6U ztRx$dV}TZ4CS994O8}TscfHSTXnLYB5-8^q96I88zv7+$Ik1#vUmD^Ud)b@+ zS58F^1SW=+b^u|8?DT?A-?#oo<^i1o?oU&}L|+PDqo{0_M>8;%?UjXMV-BDxY$F=T_{!gswhrqDqYsRF9N z@1WfDwk-PSvdGaMFd zD~{p36AY?R$n5rri5x;j3w6?ip&?pdOHX1aRd@uG!FPcB6;U78h*KFx)gR0sEdtnR z*9fc~xc;SX^&JW>`wO|!dpm%xx#JhADNVNvq!7MAU~Bk&m5qkQhN}lVqqn6{b*pq@ zaNH=JuYJ(x*SDCF)ePe2-Vd+;@2`G%`<@mOcpDM0B}NaAS!Uf^u-@>&+YV57d5QgCo(}k1$!UG4mQMM|25H%p8I;&pq{>(|m$`Ym?(Re#W%#3G ze^Eo~-sx2y%c7G86y7`B6;rfV>UKufFS&AZlOwyByYsGG=3O1N8 z6IE2RmrLx^;mCdM!UNge+)HL5Q0HzsUWm0_%au%q>sgu^jB#h zvoT#?T!)WGc99bGnCT1(l-;6n2m#(n(-sf7m?(yKdIP0PQcyJFX5B}(6D^D%Zmk3* zL|ye2j<%+9fR>#BapqW%F}|;MwR{f>a}Cx=9tc@43u%O*l71A47p|LpqJ6m{&89Ag zk`P^2b+M@w;KZv8Npl91Q)YHeiJ0gBV5M4-{4n{F12_B7aNTBMJebfJ6CsgM!n9ef znH)v*cW*se+br%p+E8M+hWkN7q zo~%ah9Bk^vTIXSu-NKWz4~IX`P}ri&{~<$_ti7fI>%uh@BTQf$CL1S8`mJqaN>Etr zU*23_zACsU-h}6!YYK;OC2^$}nPfx)Vw?|&k=pakWOlRg&O9=rSkQbLZ z{KK=u{o|wK!=ux~;pp)A=}CB$Lu~pN`h++1)h~ z?b~*7e`+osB2I4LkVOju;sa`Qs9;YLdC2*!P?2tQbeyRK=&+}>GRTwlU@~ zgy16JNP9aI@r54`2rnklwGP4*?XrRct$&aYPsdt-G(7hLhO%Q1|H~Cje@j(K^7ZXN zphQu`a0_siNRqyB$d0r4ZC4yxLS-jryVH!!;YiyOb)E){l!ZeAf%=}HEf*}I$8vw* zOV?v~Qgv2#XHQ=?lVo=6oi4DLcCSODc{V0KSpS2hb*@{eFtD#l7OPhO-T`Zv#As4J z#E|+11JgyE&6*vJfG1Itu*ZA}Tr>v79bZE^ygTTj7oOISq=+NL|MK}MW;<`cnDMr= zz9bhuUEi@X2C~GZioQs^qdi9!1$usZ^dE)no7+}ww2sb-Mpl3js6bFf!^4v9X5esW zt%SJB&CKsGQ=C0rwEI6%bQ(qhuMe+(&@-e#~%zk=ss9CBM z92LY?683FuN|tWG^*~wK+f?~{)tE}*D38LEqrWmr;ieOL0VoUvVI!Rm>rvq%;X(Rc zR|r1u%w>OL@Ktiw&_tlAe&ysgUC{E&6;I9Jg5M`6d`+id`H11 zCY6-Ggj39tAjlz(eA|_7vIc4T6Ym1)##cKs%J@QS2=&nkagEwZC=xeU2c!An&(OZo zZ+JEz=m;m31=&9H7;x&M68f5^L>U8Z!6o^HY;}gi*s``!($baY!4DpolJ@Zb&pLVR zhaWw-h(tDR`v^y;FdNbq{j9Kb?iRz1@`=(G>Dh964lQj??OBTQ+|Ia2Qv zi-Qb^sP=&TXcj93rW{8EBfZtEs_h%Z{wqwLIz1++V09UaW$*}1iodP~H5XWhI7p_NfMZm5=XA_AgX!{lNFrbAg*o*ZG zk{HUk_02q;@?b3Jeb?t@|jU1!&R1x7x8KASr}^7|R-x?Y06-Mp062vfx%D&ww<;L^(Ju6&S& z!{?G2a(;(vuf7aY0sBKII}d9$2PLU));a&pc21fBMeflPd4+($Ebng3L&ScUIAd1K zK9n(tmbu|B4{%5{O|XXU7c72dMJGCB|4*A;@~@5=wu5Con!TJ&V2DH3nAK&O3@Zh~96-3g+$!wc zoVYE|jyrbUij4bo;=#i^0lSAo3&L z*TE=24_q`HScsZ7uv>Ct>~WZWfKHwtp5l?VkK9Xr->veaBL#KOalA-c(*wHQoBKla63f32l?fY;4@^|Xhp-D_?_ddA9ipY>7Z==Ql(W9Vi47&HUM|p%Aw%{Fk<5yf3KlzbfI;r7c#^O(h znjc(HZaW0Rea~PXhB%-sl<~T%-)x0*<$ns78UCkSk)uZ}N=LMJKtC)j(j*}thb~AC z;cy4`X!N-ghMx+p7djKPRor1s$|)t&EaQBmW$rSMOsjgw4PW#9P~7HPT+{PSQo}lj z-T)mNU7yBTuL%t&ybDwiw`CBU81;$Vws-JLhLjuVeo-Qy55ahQHhT z1%wYc{?*^zLVc81h^*Y+E!GQub(%MH#`$7+G$do4eDEP%B!7MHpnw5v1?yAizJiKl#QFc3kR>$2)oICX1Ik=XeHABeK+4&&<&lviaLO~bo(LEH zw?;-3f`;K{^=iAhfd}Ghfypg`s|eTGh)iKyD3bUMkaOuj4na<`AuK5mPuZS?V1}*l zH(u#OHjd)F$9UJ5k}z1N2)})riu0v&*mqzZN$Ic+;XO)hDNV%NJ7g1uwrGrEZH@`4 znGBsEK|L+$0Y0D6vIBk|=?H$yqNz*>+|0HGr6)_KFUT1@9h5HS{QhBiFE{I!7B(AIO%( z_J%f4FuYZh-mNc4N_$rw_hw_rc|u=$)Tpa*jt@jDTy;H^>bkIaVOFA83}C{TL=3Ti zXmnYxzCkCEe0WSH^&H4P+`*yHID;l5oU+cszsjOnV1t>%w`?=`-2fr0^y*c6z7?7# z4}<$1Du`6_=!*H`I}X}eUJba$EbhF}dLrXSw@H{1U&rKmNqeYFdffV%sDs6VGg`j_ zF`iL(FvgVD1lID<-|jF?4P2Q9kMaaDSV0=-AqZVRAhqv$UTg4h|>)P4Q#%Taq$p&cs z(O6!3CSelBsEn?6D6|CYO4*ws@V|g8p=+1`qql;1&_43jYugX7V%k_97MaSJ_`qwJ z1`Q%Hy8rp%5qbMSu`DKYATahI6^1%k`Ie;!$r&vQpIiQEY}m4Jt+q**^zZ7D_KSy< z-b|`LwSA1O6&mfTqKnVcs@oTIfDg)s8COJ5>20nF#B1-sU1^9gPyQH?GlLndQkebK& zb!iNmrY5Z#Pf$ASKpkz*Z#2++{ zMc5Whs~OU%P+%YzVy#CC)_OHb+_-19{3W{$w~bQgZzCxP~0Qe0%H{` zH0G}B!0b$iZiZEEak96xU+hQ;7XB2BxX0`%ZBWV@)P+0RX+>NE;`2~iQu@F)!bn{$ zi+6p1YKRqFFDrx`nf}wh2#alF6l#v3$p!efL@9Np^<4k`)8_4){}6e!lY(*ni>oS0 z@?r9!)2{O>&Seqj*sU@}LEwYJ(W@ceAV}p#iCpm+%n(Z)gE@M7Tb-b}RbQ(E)%?^} zu2dP3lC}q}SA!^yUP<9bad8?2J0~9;ER=)+s6e-5XW*!DeZINavp*sf@e`bsy0V+K zZBNgzh01X?xz3T;r>ab_S*Q}I3trsR@B>kfXk*EZ1?N5jnwW)#+HTBHP|9Q@2SXnp zB90!o5Pk(Xr@kCIHuTf3ojrODLLT))t_#&t1etho>&5}H#^hR<=~HJ}CF4{OJpfx6 z{J>!t9DDXjFWj)v{mYWqX34iCm|jB+;t9LvAtut5uAFj_4G-yzrJY$qNj`#f8I1;N z6M*Ha6SHql8+@{RYr%25oU$6CVO%b;oS^@33o=zaE}?W$ajFFp*WO&O2aonqmwLn1 zIZdkLaa41fL>aQymZi!$Yi8ONr@8*6oF=r2y__ap)%!S2v>)tfKituNgxv(;w>QW0 z!4TP!Nbo>-Ex2VLIvILV@joalP5(g-1&*e>i@pR@3nRLU?FOs>O2Y}-cpLie#WE^= z&#gJsc)FAZ6bKzcdy|~{7&H+>&qo?3vSf101DiR~%wp{fWF$$Gq7e^KsGhR z2nydT5~A)=-htV!EG75etyy=_tZ_X}i+Oe>F*Ppi98!iqMqelTV5$9zCObM6$vZtm zoWM0)kp^1Uy3M!yI=RLi3=>U_ykoEq*A{S5zpQ0Tp#rX2>VWl4kvH;yGa33x69ag| zc(=*Ng@xS9F^e>6c?Yuvy)A2(HWK0%ME(fGwVS1Ska4iTLq~CY+|k@V3%>w<*%=Jv zw@gd|>zA}FMCHPHi5h4MSL%z@5r`(j&ZM&GUkApwJ$>@#`_~@_zh_Ah`upGx5B%*W zx{D*QlFQ6rw@`-d>ZQ5lXTz+Ig0`;^wHgXgDa!Z6H{!H_mJk_J{tJ8&JL`H4x)g^5 z(h#`eT*i~0u3X+Rd z?TK0@4JS5#@)&Rytimbs9O|Q&ky0sR$#8C1ry6FwG@POxsF7})8Sn$O5`c|SBBU~a){8Ih5}QnKA}Y&+0KL&4g1}8(CZ^0$8OzTm@X?h|R4Pzn8w9tWZ5k>-IAocM^Evd7O4i}U4@)87RwNdny zX1P`6HGO=Y!M=G8PX(p!{{e<^Fm(KugmS=co@_M*?dzdu#+Vr81)T)+y!tz}Q7d;= zF&WrLBZrV{mwJ|B&g?2IBrf!f!iyeL4B3K8ZbU9s2<4uHb%$z9t}wkqF`a+6w^Ftv zN;9FD$_8Fln#TsDhm}(G8PslIBTkt&k4XZq_2{!i+fpof1-oG*07+LbT%@4L$7k)2lk> zt$knTFwqrM$@8;W2idV9N9ZI5zQ_4R{0LDH;wy5H9UJctU5sCIgcv_cEP|_4Ri6Hs zvRFc*&>sJhF2sNR)&(z2C0vS_G>n26e*G2|S-lVIhpRC-7USLNDaGn$)fET}xJZyL zWIEVxKi)$t`}WO4n&yT&Q1aXP*W{L_QR`(|((@ex8IO?)2BC=A%RNKX>IJ=^6f251IDqML zbGy}%MJlVS1q*bcX7&}(pSIgOPh{?~U_=^*z=J!0-^2xcR^Q>+i`Jrz$^~kS8H_q! zKbO!>_c#lbA_v$9%qvb09w0W3k`m%vRL5hO+^y1#>t zlnMNK5G$_ICH7|8I-LYTOYg%W&m1^<4m-D!9Ke&Mr%hkfiWuRQMoJU+#5Th^UFIxB zRjZyA=Nc_rv@?RI&`3pTS ze4Nm10UvIch;=dY)HMC+PXlIoAc4|jD9wS~;lAnYB?~?mkArz9>Q6IC#ZY;|8HiK9 z6WZm*#0`#(nUM9^qPR6G2+DfmS3yT8Y4r zP$gQ}N=7!`m)CvMlAT*0Xd>svUl z6-|09^f8xFN26dNpJxgGY#lLjBr_2S4$89H^Fl$hpYPv%HGcEv{?jLvCHmp*Cl=WI ziU#c2&kysr_wT;_YVm0eUCKSH5aIXa^_%bG_u1#~zPtY@!20uFAmrg*f9_Z7xBt)m z(?R)4oEFtv2c6fZ?(XNlSB+y(4g?o@B)G^!K`PwNU; zASn9Z?xC+T9t0CYxgMj#NaND*5}mDX9UaS%VAJ3AQUaPi|;_8XdC1@FL#?;|2^y zd5uMxtVX z(AgFzozLu}T{Xws?Kjc_G_FGhG3kXT0v!At^XOk~7tEp0UmeD-fpgaINluBd(1oF} z^mXa)kc3Th#}V(OvrsZ-vHvfS^nGyq zrK>ZwxL#TObuR=|5fP~?xPcNsd(7uXh(kG4-98x)~57c9cfIbk4Gq!mQC$5B~*17rbV*i5N3?*KJu z5<#XuPjUp<9b8vTShilFrbI&;YM36$7fDa8ne}nc{)i05&k$1WI#rei zzV7HjGow?<9X(*<1ak4yL2u+rfH8w3XuhqdL%GlqU@sSyQEw1GXvR4{v_Yr2CapccgCFusD`NBrwL8*Nbt=CL=-P zEKvJm0W=+(UIWzx1zqwS5{DI=(*Y)=K{E8khN_4w%SlvRYb4a23BzIVy2b%`J((f0 z-F^sV@&%BFOX_IQw)Z;bpntDp4%&MibI^XY(2C=K9I4nt z%ai@%s;vtV4P8JH#I%lFfFg3Z!HVZoFJGXO%OEah4u|=?NoRjKel=SS^3N>t$yp$u z0OmVD^o}ED^KyS)TAJ+afS3p@T%M2hl}($XIISIYXXPQ-+mI%mj&b1=TOuj$+~(2sP1> z`2Z4@_{m^BD<;&Z*)ccsorWI3+gL^NB@DVdth~ayQ0;dK_7Lk~Hn_ZMLu)DYCs;vp z?XW`mZs)CR2xTH-2%(bnEEtR2WY)$$eLBdY)L>$!FbN$Lm|o0P2PP$kGKMmC`9uyJ z`BF546!*tZxYU-)+8w;WKG3#2zD!k` zU=g?(#C{n({P5#PcM7)EK)1jijNd%G{RwQt%}@6qryt+`WI25dW?oeZ;+%^)H;v}Kk_`Qx z0MbhuR4Ia6^Db}=r7S^#oZoke22KT);;R%3>O4h1P{)Q< z*G4LN#{9wnWlpJjMXcbtIVDFR{Q@aBhxLfY6q8 zYtF6i-`ry*qU2ns-!^xU>j>1aK+qQ(n8V!!Q7F7BpnccHE1cFhOyk!uLY#^4pb>+5 z7~!5w$3kA;OySr(bb&?2f$1#`-^g|jpww}@I+)DDxB_|2F2N8LRXUN!u-tw_&2>r! zp{3?VjOvt!aurEec_U`ahgaVz8q~|i$XG^L;#XH7_Zm)pQ10lY$s;z>KbWS1$}_73 z6zDJd0ipxB0q)i}@F;{%uCGxO0Q7>y3m#SZ_6J8e)SN3qGPs-@sAY>PpxkPx1cjFh zQW9eMKv&rHL$Ay{1o|W#;a)&$^J#TVLDz7eh zOgTWp0|m-txyb7uFw&yH3~!W772+g4u1 zgPLqRiIh-WfeGPX^P=NjTgS6cqtcaJ_BN5^3zv z06`0|n#{+G%ZYjRR88thqKe%^e#Kl0_Uw<@ByMg|2*fr=)k#^5E}w^VxU-v~JqYnr zm3@duLr+t`lxn75@-RLL`eE)!Cie+b!|9%td;JPQ7`Ib-zXW^u6jH4u@#90vR@U$7 z)8CC?E&3x;ZT_x;+U+Qqfiw_=xfw8&R#NVcXPW!J(CM@lgsr| zD{0x(rcA$=4Pw43wkQy;N$<5zdYC!5A-JoT9CL$Juv#h_ntm|^AraApWK?^1(`bOk zIlI^k)|jG8c*G`2p_77)$2RcE7&LKKkuZE7=2U0*=Vnl~EwTo&-7x(f)5lqKpwJ4w zk^KPQawwxPUV3t@Dy^d;-%8*9)I(F;{d3t$=cP z7ZI1EiDws_pju8ge7T1u+{&+JVqb19FTonh^KuU11&Rw3ua8N*vl@cd5Gu%26+NZI zbG|h2wdo`pS|Md8`$-G+V2TWNaX7Kr1FVl21+q3FYy}Zl_H)Gm{MIsAbknq*?qL!UYl@jEHW_C-eO57uR zzVfhWs-VTfGCw+Y7RYMN6gNN(Z#})@riPgu`SWNpTPLEKT0jXr64c6N$x~(chm&U~ z$IlLi2ZyJ}ql4km$^Gvm9Ml)AFXZ^W*O=Xx0lEx zyTG(b&rVO5XizV(F06!crUDaJH;8F~I5GoQhXb3!Vh4y4y#|$aqg3nPz?Nb{X7GrN zp%yibT0lkwDWsy8&1Dg;6 z*85VCWc8lYk|&t9oS4)yKH2Gi`ROI2z)DVuR#Y4YAzCWUWR^2%4{DlVtlT&1fJ$ty zKi$iseV_vwViK!eT1)l^Et1cV&TIK#IKx;e0ehJDGc!fPA6+}Gg49GX^wvr!kv@t} z22y8Ro(argLV^o;NhqO!{jjOxd7zpMjLwG+3|@zm)hq0XbZy778*shUN?hd`v%+v~ z{J3T=KzYT?hsU_T?9U@q7k`4tyyeHYA3nZ)_&f0^)$Os;iT(Z{6|C?G0k2*;gw*}A zOUM`dnNLW^C8U0yIfY=J!Na>1j7f~_iUzQPmtuTa$y@O{Pw04#8Y(aT>^iAjc_to! zXgl2C8V!aTh$ov|Ej;{_86%AyE80GO_z@FoWrMLZ7cjaU?;jmKgHT#t(tCHFcd?_1xj z!SovUMT1cD`DzQ>O*joG^gCZ;Ok6(%QyH(uHLSHC0zuu9Av%(<=^)R$qy+^4MfzvP z=|9^)Ag9m62~*9a3Xq6UuLdDlP$@^Mg1mpJi$t7Ip;s&#xH-W?;$0SV-HeVe>4iT5 zYYV+IGeoj{Qg)6~Sd(~|emimt5`D_)?UuKg9?__#O>>>OxT56ij@%}Z(%+ql+!088 zc7$cgYSE;wRg_i&1nR=;@*DRRqH@HS)t7)lJB7^GwXXE0Rde%7DJY!5u>$44Ku3bp z+NWlo?xUc+*FE01)@;OubsKIjr%Ffaf1UKH{;D1N4DKeXm0s2&Ro<>giKbd6FF0$Y zD^~HtmvakQiqguoI>?OHjvmS-L&YPkR2vvC%hAF6k%f>7s8br1IH=~gcu^OK@i9VW zK0}2!m>9`fY;MrVU8wXYaQXuC4Uaw~?^-R+&p`!@mG{S*!wFKT?CdB`3|nY2IY3D& zN+xk39F-!AQG+kW3ngtgnXGJ4KOzr|sp9#i06yMjF0Q+1UM6$6A26ISRe<1?jqD0b z3Cdosumv9IW3GdV5d3rmwR1C8R(K*9xrVcFO90$;j z1G@t=p@=#zRLmFa=v3gXrNhOQ0T`$toUb&RJzRd3D;DM@yN?M=j(N z4&0%|#yy1V6BPnc+GmgayuFG06RC?v2h`QCFL08;hjB4ya(x)BRd7wVwlDNCoDB78 zn{!#zH3RjbA}P@8QX(|NgSmXEohHW=k1Nl6ILqhMOVIr+W-v^k6w_*aj`M9bL--4_ zWe}TG7A}PWtV|<}I)Ap2vL~jM{!>tXKWE#5e8yOm0Qj|qHM>4bT*cmn%LFH9IRyYZ zZ&D^9sZ<5muV!#L!z3ZLi42S%9dhKu(jJDk$bI{)$+xPGmeHdO-mWeMLfqiIf$ie@ z8b&oDNO3I{n&Kca_lrAByByLp3xf^kJn-c8$8RT#DMMY5p;odY(+uQRq*ylEvzE;} zxq0AWCOB($AtckjjuetPII! zKq^mi9$0xfbaGphmLpCHW*cbT18bOe1n;zCevh1j`7~R@?=dAKYW%_G8c~626Drfn zv34Kc)z#=zUOJaJ`OYwkyM;p!O9`l)CGZ4PNE?H#b-9p;%3>Mt?h{fn7C9zd$s^aO zNn*ieH1X9szvvL37>X#AXH*p>@Vu=i3Ly2y%9yKL&yF19lw+C7W6r|dp%<({W$L;7eD{o#}wY_8*^!ZPw=-eTFC#E{-`po#o zmeBQ$o}_!hS*{RoxAWNvu19Nq-34KF;chyGOTy3|9PBFhTg|If{4K$HY!VU{SI&S? zez;nlngms6m7xNlNyr^JXY{Z@CAa6WG{h45EJ}`cM;F~r0tMwJ9{CMCuPZx34N~vC z#F*a>%fjQ8UNMOM4E=uPB*S|e9~sTCG0|DY5PFy@?wRE@*LUDcav8J;uZJfY{9Fe| zCg+R&GS8l}&=?6%0jd`Q(wd(uIy1O+BJ3dr$~zj?uwqv1=v7SCyc3h^6FQy&vaNzXPP-~M&+zQJ{gqy$_b3+Zw3u4@O5_x^z zHJkvcv#o@=cp_n4x!4Uz-9P^=!bcPNMV>V9&>-x~F}>&Oy&E&qbkegJojYEvFco+3 z$)*acL&3XU>`oaoaTbE3jGKbMl^}K24lKw)sb+0qy1`C2)Qktij(>Gbfe&KHmPipj zL{=}EsS&B7=(toga5UUwO62p1imSiFlk8nV0f2eF;#}ATkp%AB?0^|0szjN^J|j?{ z2Lb}8SK=5BRF6lBJU+q?Xe!Wr7kWMM!~z(B9io)5>0=*f^6+jH6YJ>tI6LD-55RXf zNlbqSn|(_)kB`6})hrebKKpp{$qvc01z|KKsM8(YJ1}Dw6^XZy|6o1eqK^es6V67s zUK!n_zb9G;d*ooWJlNJSuvFUrvR#j`BZHes3!$X8rcx47fwoSHC7(j}E9sBnP$;2{ z3~^^!%KP;lV=8dsXGgp2v0_RHqFfO*>s48zk9RnJ|_;;u!8cT8g0o&@Be(nnZSRyv>#AT z;nZnaEn=BwNnc1p%7x4wlsWV2ZoYyA?d|)&zPsNd?BdN^X5NXhITOq@nmamboZvrw zUX8nb#N!Z1oa_UOeh0y_3&mqTI&_ZkBY>n5!*hDw(?P=`m4XrgR0`$bSgEp}@eWuw zm1i~_Z*28c)HNWqU7#z}c!gL?#W*xi7#_VFVnk&l-~I&m&Q^D`=|TE+n0_6(6p15a zag94W7(&JgyC$F-ZanZrv526!P{qTjH?mSE=zO`Rc7F6L)Q!I`j49NO$2NM*wZvde z&`_D?Ic%l$1%=5TRE}DlsRF8Rvcr=>mtdYN*$@&64-Rr~N3CbL<2xVN3-?owo{An- zZ;ObH8T%~UqAsqNlksxU->h|vLx039l&q?p&8`i|R*7F}s>wXVE`!{X23C|!kwLx}|b5GBu@NW%6alcE$3ICov)5H8fIsAf52?t}!;IIyEN6uN2k z=QPRSu)f7^wge~+(`rgmeD|{uUaj<8{EA}K>6u)zQhNw~$v{};y%b=-=>&40} zu7L=h`Jj?dJK!hGS}RKsRuZa~lQCW9p3v97qxLu$wbfOT+uWp8FxNLz&qGGGf=Auz z<=O50`V5sC>uq9+4s;&797p_FKEF8I>>(y;_!a&c@gJlP*u%yvRk?)27Y^B9{Z`Ws z0o}VDN9YKvAfJgkbh?AR?X1Q#5~-cky(IAv1!p2n5>~L* zl+}F<(F1QtjJyKto}!f$l;FQWF$}wkUS&1M$GTzLmlYi!>sl0ke5~8_<`(Ik)R{+) zyuCVtNP*}59V#Oi3UzCZDJk(AEz9Z>MR+aCYX15RSv!M2+TJYIrctAri5JFDV7VLS z$X;Rv9Z3#}5fH6AyRgs_?F_dEvjsF}bVr0z<+uXc!Vn7W9)Uao8%zj;nRgN@80PZp zf!fTQRyUA@!|l@oFEG2WACM~fFQ1X2V#~at?>~IJfB5|IJzT_$od%hjU$x3UH;56S zcbfHo7DOt<;Y_1Ah8Aq>jGfJc|HIq2Hn))++3Kg@?v2=>)-w(QB=xwv_6CRt35z5k z02DR;f{-=zSYeGcE0Lb@-N$dg=bX%}S2w8fdiGA(6uPpyySgeXE8kh3(`4f;hD5IL zupOwpYz|KeRy`M*eIVK&99wm?d9;799^vfHtnYS0bZ6O}=G8^tOVJNhIVoa?gJ=mw zEQ`Zfifqd<+#ebrg9v9yWe_y%ip*@(FPgQEb2#D8W|*A1zFujhk?837p+rXl>K4P7 zN+WsrCEDmdTAT%WJ&Y`g0m!Y64eHlQ@7U1RB<>YAts(!ETtD4gSmfhodOaY%#f3Jd zB(cZ`1lCNu-V$DN_y_^9pvHboY{8lOg7nh;jR65u@J*fdv33oC`Xl<;XOd+vD=1cf z2fPj3HRzqxD_Bk&Jx$%VVUk;zC&$|QBf}>wn*Bj%+tqq^W{LsTcd-Rb6kr$*9MLlL zDl)Ay+CAB7M~`Q8&JaJzKreWF&ko`TkCy!VUw$(f9-7#UFDdr3yaPzQJg%Yw3FF{w zw(*&C{-&737R2%B3s-RNJK!H3arOgrRIsb1T`PpH2Jz~8<*alUG+o{>!GqT5$pcol zA)~Ux%2rQVPZ{5~gFZX)ftxE-RwoLRH=*&3?pRPs)Y5bT(CvYo9$q$E0XY-KmW@JJ z>5Fj2tblch7^Bc|jpMGrS$Ak6-Jb+`XUfZyM}8s#W7!UCE!3#pwd=ri*3RHTf;`A) z_RSRWD~Yb2z6R8MIrb|LNu=yAKfP$pUs5l@7rDI=N7rHZ)oOv;lproZw@&|hcZ)nv zd=bcR*U)Uag`MMyNmooBID~otSZ>Tlh~@M16uLGdZLZ|tW68nradxzH{X%~q zy}5GTGY@e|l{hAlfpNb?(+hX)0u`||vfu@vDHx-Nzp+A1E#g%Gjfd#yJi`G`%-|#F zF-Oa}<($B0!#shN#a#G_#KU-n{0xdx-7ZTh1v`Mltz!KP>eYeOxbFBwHFIW`+ETZ6 zu4Ip%;0SVhj%b1KxY*9!rAHgK#`>pUI>*I8$5=daH>Kvow~ROnYqxB{-L$uuiQh9D z8>a=z8)PK~IW0>O!$+emMI1P&FuTq5W>xz8myO!W49wy=hH9@C%o51x*w}$<;YB)$ zG>9`0;;3{hyq`}IVFH;PloQOIn9$r9N#9$E&XoCHH>m|usH2t9i(lizbJPe$h4TTL zu>UKq0`Tc!pY#w?d-4O;3oO&FQ>}{$e9-adFgC0cC*ef~YJ&O<4JASAgX>0qf7oL& ziyb{(3DXT}xfuk6zz>C^rbTR>LZ)Re-7i)U%FbS|XSAwQ-b+Bj=PjkF#4`HgK#O43 z`<&zQc}Fb6l5UquXeE7&6?28AlM0^vKIa>X<1p`AdwP*ss&VthKCwM3wTqv)ra2SQ zEndTZaAQuk%fEp{=+=@%WZf0?bG{N~u8Rt;>9tW-62kCHl*L_jctk;Y62a2;({^6B zSvwvp2#Rmv@5goWt7D6l6Awf4?v^eg@d=LY4N&7(oANr~;WPN>?RSz%9rk^=$H|p@ ztKO25bw~k)iv1phEvQ&&f%Y#nP)O2YJ`18n@AGxWLn2vIOb?Z2{LdJcvO}?hdQO00 za{`RICjiWR=>%Y=b)5i`*vvNVv3q`@MfNQJmd#{%VoDwBFmnAPqD!4E7s1Ji!hGsO zs$w*K!MjDoQxr`MO|);d3W=Y535gZ!!L>x>8ji7_5jy=OYTiA-AdD(lV#=I_zt~J? zuUfudjhZ>lYq-q%R7vPggw{iDx3BSo_F~y3;5uC^6{9F>>LxVcc9j%61PZ!YkqqC( z3mul+NG+hiUFpQCAdQk3T7l7S5Df2vaZX$V@UohmL8i1VD9>9JBiN%gD}o3MTo?0< zKyL1}L{9(a+b!^Uc_?#UB^o`6jooLaa$Boq(*E`T(C zqunay>Y#Af6~)Xe8GyhXoX$bU$0``zB;<7Ip5;z&s?*$Ls7J6E4t|xxU8w}5Fx!(W zzXyr;_0~6$T~oyc_<&$KXO}2&)v|Lf+-{U()&vSAAT0tR-0Om**FSb`N%fCGM#>hZ zvmNb*k5DF*`DixR@OIj4Os4fFX&eHQ*BcBSSG@Aa)Lx`!*nt|G(ETN}W}BDK_PPX1 z7f1@t-j}Fzv0!{IIY8UfQ<-6U09NghDf=#wJO_3Q7|_}&o77;93NP@?bK^RMwFIbV zOqVB`NxYUH!5y$}A_6PF8T~6AsJiBl;+*+rZ-Ix%%CiXaL5rJ(%?Vy;2nB#p;%VLMlTQ{?I&k)d-kYa<*M6| z62Zd)H7R|OoKEl!Z4Z4Si9Qv_bf%JxAmPzf?!2;9U+IW4 zJ#Aga3qbFK*RSXEi_Ll7)c$C1*Ta3vVfk4@L01$Xv+JTy5l{L=Iyr@tCI?2$V7{fm zj^+i%F@!^ivUh97eN$8bo9MrOrhhfFTrW;{D2xinPyiT0=x3D0h4+Q6q=<1Cs6iDO z*o=a%P$iGIcINOw(7isw$XT8U7Kke(*Wk}FS*)IB4`;l+dv*Kv?jvi6NA419c!V6Z z@Xteln*s!9uQ1}o75PW@cCn8|Hr#9m>8MPP;4(@xNaoA2$)Tdn=77vs8lPLRmChgY z4ys#hN7vG`m%48ng#%*F7?3hSRQH%aYHHSn>w~y|un8FD$+ZX@-@b-3IyP^0t;HxPZq_0> za@8<>RE!Hou5(13g3^JFu|UEd%6FsWkvTYPc~xfDM(mPpdVf28#n4;{P*iYk6wjO3 z#@rgL5lV$*x$}EFX!z78M}XX@LAx4OeXR*G)Nv;Qn42_>)GR=Q9~#TxSu=X}fyGPH zp1}$Zob1z(VQ5p<>=%(-$CbBs7pf5_dT_Obf`NWa%~$qx(2YD~kr7QaQoL{-&n8tXDDYN{4M6R+npWYu`J8{RrqbA6!upv4pTm| zS4q=zBl0=tU^$sK%s_j^gPg@y(xKZ_X>#qxT^r^#Be#K9;GD_FbVp|B@1PIQ z71H-w(5-;F1zwrN1fi&>+K`=-jJO`*#0ss8>RiIJ*pAuJlXQeC?P3shKdXv1jm}DO z@~`izvccz){x~R+o|&vdSn9xVerK0Lo^d!TNLu=v^#*5SkvuZc!iA3lAav;AJiIVG zrRz#Jo%{xzD`NMGbHNXv7R)%5EhU;%=d28$zZv{j6}XHW#EOe~rcDi!8Dy06xp@keEgHM+ z#3$uT3S8tStYAJgk$!A$2sYQ-C2BNDE5|uVEjsCVav-5d5$LNcy;&o)7=%k?bw?r> z)D}w_>cKc#oBA3-3LB!6LHh3|HfFL~xL|~391Ia)*Fm+UVJ{K5L{`_b8)5*-&bN!X z_;7O=g5AF_Kw?kW1fSyZ4t&m$4H~or9xwCVve^7(ctSHJRHom;qgVZ`X?NvWr-m$Ho|Kl?Zt&9nfuMab!+Zf?1js2 zfFku?=m@sHh8m9v_ys4ABJQ__W=jYimQz0Z(?#}sYXLqJJP%I5 zdoM^geERIF*7wg?6S5m`?z8C7vSBFS6InYuzzI;o1d7Hp+Sg zJsr|RA^P}nggs!V^($mr#p?hWc0r(y;BLjwMSvE<3L&3gjiJh0-@f^Fw|euP)q<*< zcF+Ehj(OH+M4}ap!h{-)(4)c!<%JML4W4YE6=iFfKC3$LEi#T-SaNccOi{m?6clv? z{zzGRh=yD4cq`4=wlOs=J*$C6rYi2Ld<=g5G z`nGb~kU<8y*a zYVAoW?YCxw{kc%Uh|3jR%@Cb-IOsMmHx>x#CH;Eig5g(-z*{e(rcW!*(C3wu*M(|^ zNRsHuL=V|*Sm`N&-F(jE zv4bk8<+{~P*E(`qjtKDFGOGGCL2J@kh=Ypj#Bb}_dD z<@uoJl(D$l4s~j!vYrl_uVM->QL(VT)Hm{+J-fX_;OvhhDKzxK*r|{!()a7Ko|5aB zlB7T^=mOYT-KSK*KP#D9utEAQg6AR9gSWiPv&Mp-Wo~Me?1x<9v?qB zJbpfctUEj!-hMrNf+`X}xo*a&4%9Aqg88;^3P3x6ai=rQM_lOhG*Zv+=CX$(XUU;- zSd`ABC$?~(s3fMc76aUOI60EMHwDnh5ihZ>?$5!LLFKyDKh+R=J3p4D{N za5&zItulZD=jN>yv&QNr}4l66I@c1vR$v$5-O(<93>BQMHD~;HW-uHJ;e_T zXJmnM>P&kI{c`@56BGpO`ZUKcJxy+=ogV3vk*Q$2IA%e6q919W>pnTs0;n6Pu>`46 z?!AJf>Y73CJ#2fM;;@6V?xqXotR38G*p??1jZdp^^Sbk(@ls__^R1?DMjr=Jx{ zMP(wNpVFSj8@J#j2{u#?s5(uIe)~07@qBT14yED;>J{NC0C^b9FcN9rAOPQH$+y?O zJ{nw@#K2B>Gut*m-H^TbtdL6W*=KEHBQIciMG;Brb0b7C8pz@$gFRi(ezyZoOE-1LK>6_(3gn z{{1gNdRZFzNT|up#oA?1o}ZH8`T(Mxs;Kzw$NN9Lzx8?IxFaWBlK(+xc;=*Us?*V> zZb_~?b6*Ky8>^MZeRZ=2knoX5dMmItKusMTw8AByTJ~+ygZM7&>7W}67C=1evo@6k z+^^)9LeIGk(#NgArxX8EBm6DqWBBO-PQb5_S0YRPviyMp3@P2&joMc6?JO-e$BTC? zTQN>kQa5W#;D3Yj%_3)2R?VGqszxL4#rgcy_GHw5*9* z(~-K~%*7+{c*Sphpf*RvTb}2=(QVf~#3MWcCPw)H+E0VHHC{9w*zM$JzYshDJ0%I=grQg#>_wQu;#R*Df@D2mEUvM(mULXrL6eQ4?>`YFi zjtKfh9gX%|pPdN?T~IR*Zyu?j(WX9iNl9@&;Z;NJ&I$)5N{`MasO*d~Br5U*q?}Bw zzLS0`fpAWIeWI5X*FODNpyzuvnO$JoX{FsX6N!ncZo)6d?5#W?hyj!3HMO#4?1S0@ znR%e6g#zIU*2?(7^P;#w*g0+;dQf@pWbLCp?Z||q`1H2_@t*b*NVdU-*}>h>7xB@XQ;IJAMUD`;+%l?}gMucm{x!M0lQxdqpdIftG( zf%fEji{w?i)r$NkNDLDTd7I>V4VNTK9t@Z^e{`^21;n~iMMx7FCw_k?1gZ!YpKC^T*Z|ZNAIUARc8o{ujKwCKgF-21&6$FZO4mi>G7CHc8SCkQ2@JCz zzN&nHtLL*}Ik@G*%`=*mypb#d=@?E1xO_|wetL|z7guS%EzZOfWEVp9v3V?7scEYe z3{~Og?#+j9|M1t#kKbCB1Z<;@Gr-U)Wetx^%bw0PNo{-CWQS^D#eacmfuV3HrjOYo zd7pgQ+ZbO}?-C=mdgPliRKl=tu0xtBJ;9Vo5#P!8$G2b9XCO#SIF{sGU zG!;*MR%s@>P)$~tF)rm7UwNlhAa%BS4`N=y5#L8 zT?5n&wjoUKObJ+#aQrCL-iAmcsW`Q1Bv|{)>&gCo?!N=$MkDGg%-0e{IhmtOOR2LtXaXhSnlG#90Z*U7 zZ$!7S{IKpVP`_2_6www{_}o@uwws6ISdq|ju|eIYb;lSSxEG4yPrlFcy(J`S{_F@4ge0*mqnWx$oTEj!Q!zBlsYaa}|k# zCKAyCzNXytf+IDIIk8yp?77x3HJ(w(*N+ZuB#GGuh7A#}Q#4}j5xrYb*XUUpFix39 zjTC6R8zgbY-SANZUhmX71$nSS;u6gVEwI4w^w2m15rd0l$M$4?WRRiA<9U8{_T^-s z-bplqS~m$Oo7oCV5FBqDHApg%7>6;Oqr`C9&$MBrje<&WChTbfKDv zG?S`sakYGfqZe*}1;K0p`qr#_oIe=pdz!#{nISVYn9$?TZ*J&+#%GP*gp2H@1{Orl- zXn6AU_E$%T&yd&tMhcKEa}tR;F!RrIH~*L{CIis$=$_{`{qCHI?ru=8>l}Imgmvg% z&&BA@zr+QS;*JB<6=Ol9J@0rx=>~JnX3>U@0S}KWq5AxiCQ*yBzD6zr7(^%I$$6YK z4^gEBon5sk;KRs@8DklaJhW37z~7c;00F0|m~iu@@FZ(L5KV^Pk&MKBW9;&%mh>!s z>!h}Ud!x`7heS%?Jv@2DG0ovqh3F;(0SpeluKW{hm|qWune0$I&Lo%k=Os%#SCRLz zquNe}ZP1WG8$*J>W};K^yP$;J(j7n|bI6~76uCFo8w3&IF?LW3p~IBx2`c?EXGGAQ z&{E|6oLV#!F<5eGd&M3r%I4U@Kmn^qcGuE5$>i+!HW>AS1&8edA_QU-~cT zDEqtmsqV_iFZOm#0GLCqZ6UEI(YncW5bk&4_B{#YdiT58a$-whza8hnCq4~Tzp;>0 z@K_|koaY{>w9*r9Uswu~NS8H&lI0UvvljEItYb{Y0ldlzm8w;vk^)UG=*m3Ri6-g7 z6Jk)5W3`5*QNw&WH?^FyQ!%a;2L2EwFNn2;M@ zLv9eo4Si}4ToYDl!ZOo%N|6$I*P$kkqii5zj12`d*luJ2h!g>EIbtRzmFgs4?AThM zPz!QJ2gb;g9&cil5B@VJM8)$0IYjz!@a$I74ja9Z9R8G1 zHCD35Ks~`Un<-$_KdamtT*D4rwM?)SEM8JNN4qYC&3Zic6)ZJCE2KMUl_)h#-L>e2 zH=*Zwrk6^5Lzt`2H(43&+(L?hVR^S?y&p2dT={0_zc+-8+=YIMrc2wCrPef#%|dJ1 zgVIpeVf4tpOAoG0Q?Mya(`n=ee8kTPI80JvQ5&$%2F1sM>-gK!L8Y4>3OhutO5^C5 zA9FXT>Yg&$0P=|OWPJDG^!|^V|Eq6CXc}b(oKaA`Tuxpfsi3BUE9QqHGZu`j)mZ#e zj}IbKUTOvM4D#qhrm(8Pb^LlQcY~_K>76u5n3EI3cF({)R%*TqBy0nlyJGx8sgJg` zDqgv-OR>;I351W85fWK{1-VoDtE><47MT=4x2X;hQn?vmeE~n`LD@pz=N-7bAmTib zNYt{qh-0CLcubH)JBN$$;~E(w8*>^guB~6e zp6e!n5LR@`%K{v}dUqK`Bt$jdq>&Bl(U=hg%&hMYHc*GH#qK zY&()nq<%nME!s|zU!L?rmx}TJcLr&vhOdA79ZWrUx6rVqN9Znl&_6ew*FQbn+f{El z_@5%pZj9P3%QG4r<2UBe%zLL}fs@ddi z9za5~lRe920b2zNW3TcIkWcJcaV5MJ9fz~hh|Ws2v84g|+OQSa7?@aH<{b>)n4+gS z0ND9J3Lf;sB(<|8QnNQ0)Yn6A4!}7W0i?gbK>oOHlRhb$L({*G+?FS@GLNkI=Y2cp!4%frsfM20sV)=pmpMWzvpY-eDk08r9%MraaBV4j+q z?}tLl2|<|~xYI|s7uF-xYK8=Mde&Pwc27T_3+``U3v)VEDQ=$3)|wKK|Hp5lNjVKV zi-rT*rW*_|Dy%^NSzijJbhuz!p%4DjfPi7xX^Z6$sq*|82idXAiVIKI8O+4A9vY4RX6TzlgO| zr6VYT3es(=(&KxgK%Mj*MTk{t6<+Zs5i*vxksP@vV@9b?bD2`#7^H?Q5vNb(o`99Y zP)lQ|!w_D^@Vd7lK~YPes#K*ko`DXfHlQe0YN7nk_gGmtj}^?$9i8>PK{yVnJ|I!{ z75qDEauVaKy69#KDDYiEEO?4ojH78UC>=xD#)32&$g!v?3+d)}Clv%C!PUS@;tRG3!B2xsWG&Nq`rl}FB zHfmF{^WlNh&>o2dY6P_aHRKr`|-E|CfemlDbGCFFX`4OTUY zwqbuk~nQwp41CQHbPAY(g9gQL#yQ<=oEsguW=GVr47SR|k|`s(!LwU)M|Io*>zR=d z73#ktA!@T*fR9W_RQItV*>QPuJ$V6*TZN{4A3iWZ_BQN0doDJ zWnV8nA|DhmY)-&~j9+9-qB+yrG)_LKW3|s;M3DTlJZq81Le`%`I$Xo6VI;=slo`st z$XmnY>JeS))*pFs{h82OI! zq`w1n8K6?|e_r0-{cwM`o4&bwgH%a>x&8Fn5+wmP`>7B5h^i?|W5xQy!3?JsXKX>~ zk@aCUFdo6LG($Q%v6(F^5RQGe7IJ(SuJz)B#PBioY=zzx#QMUN=jFWRMymX@0QwrLj zeI8p5(o$MsQ4>9x4)baTa=cJ#E*#M`>_X6{qb)s9q+q7I-_Z!6w7?mvB*<0O2v$P$ z5~E(80TT>w-MxkCmN2-p_6HigmN#*M?4*_#_YDv6OMFbHRV&L!TfyJqnP_NS_`1hr z!Aq%NPq1>aDE%E0wY#DoEu|~y`ph_7UlbcDl4qBaYzxy3U>0TdxmqIXee0`Xg=LQ6 zbk8BKCez&%1%U6~{pEIj`~AneTh{Bn{{ag13J8I>1gG(bncKXi>t%^guluA=ac82< zS<2E|C@>44ZpgwFeTM&lqQ!4N-bY@p#9{2~rAH`C54c!HbBlpRG!0x_<+O{A#xQA% zyXx-HHhf%Z<%LJ>?ln9klAB)wKf=A+RU4a#Zq5zz;MdEPmdJDhknpBwp7}6a;3({# zp(cv^PY@7Dtlf-kgNr49B`mI+({OpJpl-yvMTMtGT9@$^gtD^TR^+2sw&xv^?E?pO z2C%|bw$n8rtq0rSxq*L1bSd#oO20krXVX=V9?(?+rUy}I@u&;vwv(@)1U$BhU$!V9^i1$+v@Zst7l--E)35OvO+qlp(o841VzXoJjK}wGuYP*3$mQvNw zjHdqB!qiXc*xqX!EPL3(M@gETcey5gIgMzUn3>hS5eF~YA`=`hpX_F@kp6kl2l9o* zE?FW-7q4cC_N+t;XG9z!IH?B-sjv2K5^Q@-A=32Abvc8qcoz@UecrPm0HV&v^w|}Tb?O? z@mmTBC04NRqZLYXvD}_)$Rud`5Wp+gs*FKKcsFL@hmj@_{pWQntO{-TnIf$NBq@ zKThu6GnaCGLkhT)*N?l~Jgr&IlK+r$x?)JR@yU3p9*)fkkCm7+p4Uy@)@I@#>Z$2> z2~6od={!=&i7n6<%o4PbT=y%4jOs`MVHB<)Lu<8&qgi}-%koyH!vzbUkS0PFNZHh` z_r}q?t@9S5|g-i~uNs`a0LBY+~72_E~Pf9_dShWre z{lQ7Yd1l9&nsbS4^A74S`E|2dq1) zA8E;{MOV|Y6zrq$E`CnaTdPbW-(XQz$*M4~9M4g6|E-|8$OOjw+k+-jx z#%SyZD#^ep9u4rU#&a==V3o6er$;r{2TvboIo_|nfq1WHruc+0l%iZ6oM)1jyzt{u zu^;jM^qZhY|RrsI-%>wXaEj-&Mxc~;NPA_3n3?+u+x!Pg9iDo_2Bonw=&+EuZ{;NZy%mmGWp(${EBl8tc`)}~4ycZ4w!3;0q!<4Ndb-AG?(^37N{ z_(xB8=C(t-OUisij?3XTO7<`y9yR(!+{5S{g%p~}IQ;8$YY@RRI`*o9ld zK;J_L0x`ui94d#lz{Kqt>{BKPI;NMd1Bfq4I<+G6XQaypP!q-xK?7bo%pv9x25kF} zywVtUqxlMADqM9h$8b=+fO7H*>XcVXIv|A!d^nEmi%m!htBNPo0X>xq>N!58Aq+uk zBer|4J~p;2MV)sOeYkuDh&rd|fG$yd0yR_(3!7fjVY%6t0Vsov2cSkJB+*C``b6lQ z_C_o&)H9}&!%CkdEN&XL?AT-4c@T-2KVKnYV6oIDuA9Xw+6HVmb%;2$n*GfJy)kW_ zSuHs_n;{pduBRzgAbx6m!m^IL3~QkkkmT6Ms?;&t$-W4=h6({^LYzYG>!k(Dlh2o! zp`xQ8gtSyk_|{;y4T<=6j)1PJsEeN>aT&9(Jf(1rVcl+qGlu|Lq$ur8S6YZ6mTUt{ zO-GM4PNVI5e6>N+UOcZ9SN8N{H%XJ+fbe;m9HB&j;U-X%yU^l<@Py~L6$#^x z^>t-~zRwwM;K6=Vk0@5R2lhnN$5=2M1B?iao;Y9g_}|N%^?@tD7TV&sQ%UgnDdU?p zX}nHy!X}rD(nrn-b>KpmE1dpi5p-Rf-PfDLo)FcREz<>`rrLa9<9o&F0;m_6EC6K2 z3t=1LNl`c1YSC4L9|c2Mjr3Z}0;-3`P6+?{?a%YCPu+@_?NWxtC_izw`rhfJpmJR@3>ASj}65J&+ICU+c%(LtlR36%;))50i{RZqN z*!uL*`I?#ucItZ2pC7?|EcXBYpuY!idMN0R)&pST#q@f0fz&U< z!%Ju5!f1fQ(f6ih{6GcQyc(EN^H`Zoj^XxKqecVNqORl~$jt|Z325kmP7(R?(E=&~ zJjg>0QNKDkU})w&6u~XtO#=5d61WH2g)giZM)!kEOh+Dshc$poln^?kA!M=WaXye@X_U3 z2F5(8Ci-F@834meq*>gXXU_MC4z5~CAg`&*f{>-TNo*XsxX{gfz#-#OIgdj)<RWO|>!rG9<3ynBWn-ZqC7e^4K zvMPzG8ng_d(T2AhsC42x>pb;j*rG%JvegoaUv}Vy=`m^!y;W0Q=7J4|&AU{#3JYqm zUZ8g09V0%d(A3p1bx(McU39a=R5@pcM-bDzyYR{=ylA%I3=q$2 z1jQ}RP+n=h68(ThJg+q(GQHd$o<2Cp#utXqr#yjpisEmQ5gu9u2r)KjXTl<*jf3*U zO@An8*X6 zcOFQ>9{Sk0)s!s23xvjMCCS%O;mpI7GD?RhX@Ghf3lysQjWok5UT;MTn?~|;6jzi~ z2x2x7R9Pb>ugksZpzf7xq0$V}ZR6BN>Lw+ewhf;K zh>(s+r;|oV)TB6PmKl=G(tO!8Yg$a61L0cx%*hi&7B|~E$@9eaPP)|HVwa%Fgyan# zQg+^$QVX=~>7aoY90bbfq;;^H8lY}S(~2Jy!I?gE#;jhRm<^GgJVh|+U~eV|Zyyid zhMxMoTQdn-YP9OXc>)kZhZfI8ni;?896GkptoYefrqK|*kn$bmXWx^nZ zOqdEv6AF45t49JP=i$noxM&nsMe34%w-4?ikdf@Mn&c(qCb^iU61j(m^f#xv-!rvL z*2w2>zioA(5uy2{@}z<96Y+>Ine7!Ed!Rx#aRy)6%b2r$N8rej@O0d4hTBYp; z3*x43>UVM~JRHKBSxMU+@QtP-NGwtxr-Si;8>%ZN+@ zgS?|TtO}N+fMF7KO(sGh!W=Kdn7iuflbjW^rZP|h$?rgtjQazIf~~O@p>=##Xb4Hd zSV^^F=k|2cR~ch_Ipj^lv6LvApW;%lfaka*X1bhO-A1;^gUm9j&HyRqALiTDaF6WDn$&v=Y41totf?CQDJaJ+p3kbaAk#`Y!nWobg+iRGf z%D03nXmU;_p86tmQ_G(e}*! zsCzHV9*(Eb5^#k#^_x0Qg0{RG&w#rZz=qgxr>h?#i0=qr>1RMEM#O{`AS3pXIE6IRzl-&_$CU# zro;!}=K1XLzsfQYH$Sd@H)xouANP3hfA-&iS|mMpKxKiFHF(?lO=)2Z-dF1L8A)2(M!xTYD| z%vy@MK@K`Jo8+P3W}=N#2IIjMw; zBfc37rpL2_5RY3XRJWY$2x&uZby5v9WA^8tZvV}fGP?)5(1QESsF`h=O#^J2`7ZV1 zB|HiK)hA6*wV8D^KbeHhs7&f(!51lJW_yt6FL4BO4@Pr;ke(R`TGPJnl4T!bb;~~S z0X1cM6To1)R3Ed_+%cD0M>_B8;cJRuo}%>Z@YloVqr>N;XU|Vg4xc_7j!tgBemeI_ zC(BL+mc(zDs;kta*h|J&a2eU_>)$fD*jLhd>n_bZo)IiXLDhVQIepyb1;n^@aKsQ( zt)#SZ>t&0!M9zyi{`}VullOmKe9#^};UPiY6k{#QY|mD&!U_GW<;8Y<2GL`Dg}+Cc z<%C(Q7DPYr9edXeO}UZ&iBuu7}J@dFqEqFQ_X^P-aIG6Z3Hzip>#NBbjvH77H`g0e z)E_WI5Z|(M7xO0Fw)O!D4{XC_O2neRT~q50JuOvdk;;DHVic&HrMAa%m%Kq%8AMcQ z!!vkvsQCtA?YWi*BhGV(n_x(yh+tk|@~!fY11F?N?m-K~hZ_WzW>0&yxqWY;U`U#S z{2(d!6%JxBjdZzSyU8N%o7SMOc0_=Lvk9S5nuchfjN#ZnEGN4sCtd31h|k9~r$F&V zJ;!_@od$MH;vA;~R z$GV!q9nL{2`{MjiuCxSKV9!EwcsLUaZJ27x7+0Q$BIYE2E8VL>p5@g#TMhYh-xv3F z)pwJj$a$VB59=DF-dGguZR~4$(*Q*d(l5Cl7FRfm*%L_~7pwE#7HNQHNEY?Yz!MI1 zdm5ZQ?Vg{}(QXk3p_7`YOG)Aioau$PTqAVU_{xDMzhoTMYy{9TWR%in(6dZT8LR~n zQs+e8<(U?m&@IR&1lx*g;u^??!e$*-sQ92huqiSMZ?+?dGQz~t?~RQjcSKQB7GObN zp(v1Ww#;YZg)O{DkhVJ~r;sCu_nAP*{kWtF?)O+2sGgdCT-l^7H?V__pQUyiPN69yA~d_I zRF(;>CDrVuC_wiKlM0chE|^Y`^x(zHRIbBpCkQ_e#FpSF?dK2bKIv__vIrzAeNd5_ zgz1r}*Wh3;-=LuTr`_iE-|pc{^zP03-TLtH;#d zOecB#^Q~!M9yiYMH$%>X?kWghwba@EBH!-@516||36R2BHj@? z7y~A=jb#uS>QP3o<9M{E$4Q@xf?zP!!t{11uurscwJ`U~#4!KO5({WCmNB`(@q+09 zjvf?P9=z#`@=8HlQR`E?t7_8hOIEN+JpwHv*BkjtoC1Xfz65E0V&>|wL0Ejj;6-BJ zJ$-aPXBNB60)l|=WSTr$1?EUI@s_&6!<$VODWP4|7fCk`{LFyf|UnU4*AVyP)*!=w4PSq1)jj@4>6+7F;NbKvxV$J3sAM!U}BOP0Jtt>hmX(QV;T?=BpV16kW+NSLotPS zpKjlLfA|=71-?X2C$&FBm^m#6A$I%?4~72lmw#xC^!R^bq`&AxW2D2*NQb+Vzjsc5 z(TB!JQTD!B{a;|Dzvx3_qzE8uMmhrJ`8)CS7ky}q^vVCkNcTOo+PO!&rwF`koz`2g z^^tk4J0nb$Ka}Igrbw})q6UdHnr{F)Z{XBZA6FH~>2CKBV6LnqoiNYrC5h}cN$Cp8 z4bcXLk(<{gqcK71Jcq~B<*PX&;^wQ}?N4uSf7so9dh^2%?>>AN_qv(mp`Ln_qJvhRF3!J)dUJvu`T0!0(N-LV1j^{ak(XTZih}N>Z|2(ZG zyFx#OV0#oR@Uta?C=SObl#?bGzaJ#7ZMXZw{k!*f?>_9_zW=|qt1hk6iw$DujD2H# zVj=dXGF~)S+Kfn64v}^9{td*_LSo&1dh_A)_wRBf3`N$|YgdBPv_^nLDvj~f5POdr zGIbM**|A<3Z&;+RacW4%HAfqBCHkuaQMSq`&wOZf!Y;KnBVYg zAh#M?P13$!cz&JV>Kl?^uH7!TMo zr-qS7vViD;wsVk_C`k5JR0zQ0CIS5)OZTczynY&0u)vrow>cj#Cc*?Zqi_d1i-LC$Ke8W7BI) z5d&>>b)~8N@y)wCyoBQGgSMRh4v&aC7noN|uw1dN1SzBsaDZW5D_fSdK4~}wE%zYm zvPFZ`j><6+Nw)Gu?|}8?i991gmJ4ho^|01ZM$kP{^Nr!&z8W0(ZwwP2hAX%qu2#vF zcyfvG5g7GhbxN+Dfe_}WRQ1s7)83%Vi)5c;L;nik_+v>BDp!m_rWrj@DFJa(DxC=# z1{(3`aDjbW?$8FL*TwN<5|0Ww)Q6;%fY3CtBCm%Hx{bRWR|E1IcOz&5P(8ilT1e8) zVFpx#vBM5kiY62M@y(oL8EUZZ5Yo6LZP{jZ8gp8mB2r%`X2*G*1{CidSqjhts?lBU zR8G)exn|<}0uEVF{hofaMYx35!x0j9T6JdAE((L59oTW9S=5l-q$cep_yGF1=<6^e zEW99NftzBbk|=5)!6c%}7vqW3J0f4oH-O{iR!B{^0x3t1z~IEWZZzqYP>Y` z`H>6E5Jfigz8xjywqw51>~m3kN$qQuzeoy@d^%4V)`KJ_>$L4ti#|I7CpRm)Z(+L( z@Tnr0p+I)e_;eXdWZ~)@TbEjRuzCS>yyGnEn8rHw`SpP*f^n!)AUrh%L6 zh*gk=XZEZ{vxkZ86jQ%dJ$fGPZ!8@ z>@B8K86!_&V>3VOup&$Y4Mhz+4c&<6oM%67i{~sr7+TJGiC?cTP^P-mf?k+km=X4| zQ$0}8(8%WjtPYbK{Iua_#|ACAQPdS&>{o?{ePT3`4I(p|ObtOsQ`(&L*~w1Y>qel} zbC0GZQaY{80_CC6;*uXOS-yU5nAYlZTB|jm7ITQI(B+3y`|S0i#hr+Yz#UdYi62u4 zaSc#(B4zVR86W54#RZ68r1NUpB|QL3LGe7IhQU4{qfc#nKDFXKDzS=jtY1OVR1Knp zBub@2-Ae>}cb5~=f#^`(A|h&0gqF*$enkhYn`{GPg^^t1s&zCkfQi1Pm#h9^; zNRl{bsj>dDPmQtGMhlJg7dM6cy-$s?)@F;p_o;!ed!I^LAudC2k~ySD2s5Hh(>16J zSQYxgCQW?QKR1{~YC;2H@=lj3wxCBy*51UAg1>{IdsGVe2jvB&eQL4!A9=}aq}cr1 z{hLp>yH6iK-f1|9(D&ogd0*E)NW-1fBRW1~$^P}b-wajXL9b2I~1*CoQ@m3rLdzcj!+ zKFVZ!Mra_@nNf^JKwdCiuE-_}HFZ$?`a`&RB?A5w78I*yitQ?Ka_*${3yB_te0A=!lVuaqasa=vFE3Yr+YiiTou!h*Km^eCff{}q!XMDa}dU`r&#)-hN#3(PIc^Kco zOKf?=!#>oYQ;W9j0`kG=0lq4hlO~XXFLY!`C3LjES#05Ghre@ZWsbDV>!v)@nd30c zkftj)f=$6UNQ$I#bH0%XX+QN45=yPP<&)FlSzN1+RabvV-O^+*g}U&Yji}=WNj=U7 zuylN&egX?}fyrNN=Br7aI<2>ZW?xuAi$HSgZ{SUBwEnj#*O6n5FIx0om5$>M~Q==d5gjo1O+rf0G zZcnT-XlWKnMrlthsY(U#wZ}(WZKMwK-9XIfSL7b9Khl&(Rc2y{N7x(-)^xnOTu|3a zWvp%sBXkd3&x&&MlznDTv{`t0Jo_`@Qus%a^q4L zNpO#K96PVGD>lFDuUdH|^2tL^Ia0ZMHk)+t6>a)5TZGzV zh*cl;Sfx>}#|_m=aab6oA$Xcm8bbU6u9V}KaJzsJ3T}3A+EMbCZad@)Ph5(<$+T5) zLBB!urrE)pZ@>NY)nDGc$FcL5kMF*P2l>Il=etk$Z|?@%swYBP)r0@?rpL%?^A~ul z<38L?s@jiPzBa_n{tl&CfmXsQVY(VLd5+q~tV%@SK9E$)!(14jnso>HR~nHds_!$V zI8ZAMB6g1AD|TlYg$0_3ZPp>E{Vj`mif52P zn3}1*`>hK!e}ntaKiq!!R+1oJU?S-31060@pLzV@&HInv72;_D!;dH8rsvGm29NIkbWi=Q@Y1fF4@QTWXGcEn>x68n{~r))4xb3T^Yv2dC@ zg>3{I2Wm9~HI1c#Omf6u2{r3xy~2;n-cz#1G98nH|M(B^Z_!&JBBUE0AlS*XkvACMEHvBh?rxZ5wd_@YA3zVgPZ%OV0@jT}}fR^w9 zl{DcFd2!@it4D{S)~JZF%Yah1wVZZ>^{fo$Oe~&` zsf(#0K8CLWwZrHK`U6pEbJ;pwRUnNts7Xk1;12f10#{vhvkpV^fEu}9WLyc|8c7bt zm59_$>)M)aijzh8DRh16n3a}jdc@SHYe>J$<%Zk_u}8Q`hywV&QbALk0S&|$!1-dn z-0_bz4e4RZQ|$XroM7FrGjA07nF=eBX3kVJ_DzI2hqm*eRvqkc5*iLc14hy~Q&J2UJ?vbI%$-@aCZ{*!PLjM?AOnvyHKS z9_xD|Ki+zSojkUM9fJ?rqKtxnxceVy%>$%wCgCH`WMyyjwhCm9z(BZ0bXe8?K6wAH9SsGDC7R~_OCzOetY{zBPuOmdi%#m@y;o8t-`RgLG}!| zZELQpXbd7wDqVQGsB^280AZE3pG$?dwIGJLxK+b6W-$bwv(8zCL-+TsLF!#_?)2p= zTwF5G?)*$GuIU@K zyFzj9V9RL9c#t5bY%5lnTSvxv za{O#(Jjv<(A0c<`Cf|R1@b>#}!LJ_h-@)VG{KmKw<|8A&0;GhR-R^gt>CK~h*bB{dL>$n1A34yAfzYkv+@(j1f1wpYSG;6 zb}wH>A_AL#GPuS?7>CQ>&4_9qr0AwW<>_UGv0}EP;Fy-M;DoL$%aDU$i}HoWq`!-1Ktn22$|)N~Y09nOx-C|V z3S{z&dzZ85pc~x>jtWD=`r;tKM3vbJ628G}ABH`ra^!kg8&1UB4sZEmKD#`v&H@># z6PiQ3Ajy>8-VcR#CzM?@)VMhgVd|w5#+Qvk`u86{d^gaalt>wA0h};xEDusmnk--U zBUBX~??8}Le#h!~W$onyKu5}KUh}Xnpq9-nG2J2FFg)zCWc__?Gc#iYb{S*KLfw?NnY2#* zdoX>TCt~p|h{D}bN@<-^!xYuY?aY$j*IL%ljZab~~9I*K5uye4c#`bSnfgV|D`ho=NE@@&&RO#u08eULb za(~%~1fHB@VhAWS54~M9 zM0`vXGQ;_r^K^t)8B$n+z7BphIB?^GDg0TT@1IcC@%k}A@dWHW_t5#L0fN7y)Fh^m zZs)B!gfpf@PzKa+IC4tvcJN~mmy6AY0{j@2F&C%TPzaO57jtbtaLN^TTrFXEod9)Q z1Ju_?71Y)@U+%HHUN0Z$1;HP2(m(HQ4?V}mv((!%cQ0zIavY@vC>An9HErBH2-+EC z&vP-v(j&5c$4DXJ*3*)?Ew%wEWCfFC1nfXKS>DUK5YkB(s%S98-n0JJ4x9CSd;fDbZm5(73#vV9u6fZAeU^;BUDECW+j^0)91D0O;vIl1mPIt(5HYS=oL zlxWP1&c!tgh-Gv1Bid#RYUxV#n~lnv6Hz)w+O6mg!$5*bh!pcc{nO1i&2F?~)0ljow7G(Zngb_vbW!DfPLkG5}dyONq(CfFuq)k8Pq^>lHeL&5pg zYW=bqbblYcSOiM>uB--2L3k>VeJTkaX5ehMoj60UbVEk@NGg!DR+H_TQj4zfkkFWaNR%G@_E8r31&W zwF9uFy*TLU0KXMBaVi5OJ!KHyw}wIfl7@Nl@38E|TTdroM*Lhs4Mvl@E1+f><2J4G zY`dx*F>6Tb9BLKlsZC_CvNy&_fD;&=dvl?$>GkJ=_NMjaI;T`P-yi}GI|6S6YC^t@ zL7%xy2!3RC5qdTjMFg?DsGX{it)M{4b(Da2!R5$+P(h!A*8stEKjfl8lOHc`Q=0j# zwv*a+)0FYpOaY90^S#k7DP9#Hv)Znwi}@TOjX5(j*MbudyhL7>%FCbu>7^vuP_IO> z9sB80fQ6@$*Qq4_++dUAPMx+2TuRMn;l33f==7nNTCU^tW6$63^JDPrVL~k4yrP2% zmmY;_i#^G=Bj_*bDgHZh8(a~x+-4U#GiDD8ZV%t}kmRP&s-xq*#vn|23vIr5TGAkV za+Aw5xpEaBgVdJb zzD|0Akl(h1YmNLu(KP3o!V#N0d8Ntd~YJsff$H-d$!=*~=_ zd>M-d-OXLhgJC+m7=KeGqNpMIDA~Xy;UV+|PET!~9yO&8#8VL>iEJu9D6T{)>zMwm zScwLxS2{20*Z>)YOr=d$(n))(UR)Blqt#|oNzfgjUJ>hv!oAQ^iX&_IF@sc{QIQ$h z6d)pxUqGm{9A-tE#!{&VOsxj(fTga6UR%dG=N>anuWUagTyY!I??Anrf)I`E>ubx7 zZ^B8CJ!K>Do-1pZ%)@P28xF$qAWpYFneZG z-IEZY7an2;T$IL1AHWl!5bC7=9gaF0;IU^70n@lSoyYvR-dE#vNVPI&>(_HUafg4h zfun5H+HiVNx9JFfj&03@39lg4lN;@!ri_PUiMPj<0Dr7^QMy^c^7mZO?f94 zAX78jA$*p0ZLL^K1gli(w_P;QOn$Xf3x!BN3M_=6DwU+z1Ky#NAa8QaAk;YL)Z^6Z zhTbkd0$3CF1;Di+MQX@>c=F9;_A1w)PR2_{X*3=5nzZBEoFw%)_jc1mNDU%xN4q{S zpaiI=oCzh^KCQJa3XcYD$l}nL_W4gRPy_nrB*Hh1$&<_Ne6z5|CWyLRZ zJk-LJpk7PZ$#C?dv4xRf>Kk!+pPBr5gs55)Lg4X8X>*3)Dj?SXD zbe<5k#SB@N7t;%oQtYAX{T+gp%j*1}q0MI(Ee%hlNMHeu%qu~UD4DT>u#&K7yGALaH1lFD3U9;qEPfdLcq@g|_CVvAeka{CW5i0kbGcFu#BQevsfu(GL~E z1r&_Km;CbCnp!|}5@IsvAc+nB36Cncy_OnrHk(2`#9uN(EZrITeqJIE7c{FVr$|RN z#`Mlt(+wDdbqcFM0iH;0DaSOhHE~c|9p*zaxj4%eq>mgg2b^QO+R-fqhB+$Q%1+WC z*``bmtUQwTuB7?6Mi+hIR7E3oLHJzWfuw_j ze;*{m$dH_g+Ys>u=z$LZJowMS?fcKSg9n~t*$%((EOf%de&);my{Hw3(e{ojSCi}M zVQ>3S4F1PIy?cM_39v5U`dqLqg)rGbOb!O83$19XRvBIWQa6w><0nyGaI?$LgEs+q0EM?A~K-Bl}zxp12x9fR=GwwXNC zcw0wPbY+?Sk>slK)~VG=O41q}E{{*x5w}CHEtL(hG9$Tyh=hT$VZ)XKHT_Wm){<~+ zVG|irq$-2KIzYPxYDjozUv`V8SgSgPEOvQ)fspG?{%gu`22yXak4&#f`MA8$0bMa^ zCKN(3mhB4sG6gN-nQ;DYlW`Uxy$o7sF`Rp21}f)lb`3)Tw1<{F2l@gz<(NbSvicH6 zY|UI>ky|BQ%BP0ec*xm*(I+f*(!jGn0;VX(9R+t)wmq6oUT|4~%wldjzTG`@DxTI( zhC-kl*?czMjuZl=IpG!yoj#=FqtNNw=J>KopZ7?mpK~9_hBA-OdGhwulq-&Ou?G6U zMtHVf!Vds*Gmst=?7`9KHAk?RO?FQXPfnhLJs64hF@P2sRLxZDIv<{a#`;8lQa-9y zhkM}jc)DFq&f$Q{4wiil8%GS+1r9Qt|8BT3xA&)W(S9&FP9qGVN9*8md`2F|y@Tq?H@x$ydC>X}z*#15N&PraIMvlnoW;2RZ zC~2Wxk8^%~N{x3->SDh(ee{teB&krLjBn}6=8eaXJ}XBg#H5uVJq)ag@OFx%I&_EF z&|HaR*%yp&hG)#R9qlyOkv-XYASMcfaRKP~zaFGtY1zgfe_J?5-saAWR0^j~tIvnePp^%a#}`B2Sl>m#l_K^EuNgcfw~zM;1O) z2n{aVtY=%4odn_0(7+DK6s1gs)7k0u8FW~D4?f4(Akz05>Pv6>;&8BW!j1;dR!Gr3e&88x92BA%R0r<7KK84k}7U8%}5=cW76(-XUjRG3% zFcs-9$g3B_8rh0>p?Z>)X` zIqmJ5CvnCr9MJF%T)Z0j`EBROn3bD<-@oHL2X|d;FA{T;z<{yaMJC6>vt1u%dTP)x zS6GigZVN!Pqq&s7+A}Au#3h&;O%Xp-&%sh$U(8(enlh&^&-Q)kR6DRL^od1BsuE>3 z#g>bhK)qUnDboIX8e6gpL6D8|Qhw}@*#caTa)M}z6`X&JGicDGw@ZyBKn-EYmVOTW zRU>vBX-unG_tRq#?IBB0P5}~(2=-PBs%dc`f!Va^hEyTt>a2s0RHqs@LbX^VaS+}q z%cqt!GghPclu|e@!TJL5$R2gCa-RcSb0NyMMD)T13bjt{t=vgOVCFc*w!;H$pNqovH^|>=opTJ#Wr%-BzfF z=fAgG99?RNIz#(|f;KjD^2|H@tm)d@MrS=WDlNGtI_!p4= z(=(j^;8PK98dT~`nBF;f_}rjPmpLIN6O>|W50YE9!A=ixZCx)z4ibS1{oJOnYo8S@ zbELGQ#gfOSb(y;#tC~)lz~Zb+mS11t3Z%}IyUf_Jn2cO*Rg%&WFH|#NkAOj9%e+h? zx`mNI?QR_qEIW-nGik}k(*bHsg{MH5SYW{BMBpGJIbQR};}zpd%k3_|KnncAiIGyV z0%2mVZHr8%?g$3BGU=nSpqa-d zbC`!CD}DwNfhouW!ldb>Ii&QOeCJzkr~y`pK!3lZPd61^Q9Ey%NR8E`(s91;qf<<%J+T+fK3(9f(T zS3lT86u(CWZ7R#qS@Kxu>7=0q-jIN$U}_Y6UtL`~f6c(Btetx`n`}{xj8bDoR!$n1gt*hia%%Sp4}iuO^nNEcI~3Isi%n4) zj_q(HEOHtZT-D|2_+qx+DqWx0EN{@v7=aSwwpwESnXkh`W?A5F@BrL2B#~;)^ry#3 zEqMr99_vvp^mgfsOb#I8)u@7jRzSva7~oq~$OK)vi;x!w`9$H@i1J!x+(ru%nsJ{} zv8U)5=G~UYR9guXE=c5(Cl56^62nw5=cNJP0lqVRv_{&QVYPa9^c*r1bu9?w*RB6B^ijd9|(^-TbJQu`~zuw)B-@X+@F?OWEoGXMFh?{V|cFH{%^9XpE$t-nC z^Ygpea?)`Oi^+4KjTF_JGo8yJ8;eOo?r~*og^g zV?NsgV^B;E`S&6;mAW}~Kt4^Rl0&Vpga5J{SYUp&p2O*lYAnqWqB4MZIHa#w>>F9A zG*PtdS$@n60Cy7$8I_A@yLY;|o1Gy#yRHlxlZfs;>zZx^#jRNYqLrAgn$p-em}2BZ z>ZA2WcPL>|g3IzPe@2=f>=9@ChJ*|TWD_iB)fyXjcVc<;tr_R1@YODHQSfkpzNT5i<`9^B-qf90^j;# zmy2hEk1N56CUEt8fij5*e;Xd2|K1pm%s})gFiW6D!9vl{F4~%@7%vzAoKDHWk4^Q> zRVR67PY*pVpELA$FC!L{E}H=0)f)Nz3MHDc9T4m2!ZYS}!}BP#X{lOWm$ z*&b+OsyBQKDe1teYSrj8rQh0!j1mgq1DR^of>Klt4p<~vjvKo_zWLmGZ%9-+2{W^c zMAJgH07>kCO@9VT1PX$`ZYWVA2GJ1}I5gT}#SW!XG#Wz~{7Fj%Rk{c5TAj?cC|W`S zfbstj0E#^UTja4#Z?LP!W`XuIuykDr(vEY|USe6=K%r~vwh_W~SX^UDv=uSQ&f)g; zaHN9C9CY^#X7VRG0L{ds>T4ts@J#{!^!UGm>7^~{@bD=JPi9DMZ z2TOPoeVY96)#Aek`}gzaPj5cmGN<9=K`@kl%K;F8WX$h*{P?TEB6t4^Tgsn8QihYe zX@Mjg!YG-$S5pu)IE|<Ml<=0%!cK@!A_s;j+KXa zp~NF!>aej_`JsIbiv)4SLDmIkI)w_w(A97g$%e+c^wZy>E%|){+gTdxgH<=Z zoS&PScQEd+8{@(|62Bdubek9O&B>w~3^L{|VkaGB?9(+E2EM;I`@HFq>cmp4Rs7s+ z3i}q!6U2LqsGA{fU<)(EZ1(Eu^Fitj0b#s5-NE&cVRsMTCUVQcl68bfV0(5KAT5tA zFQp49Gs^A_NZmzWJl}{r;?oa5sqrC6A;BS4U)P&svw~5pUo~sv{6rJ-S#s3$tr@L) zS2`L>y&DsaCTXrx)IiVgdO5=e~olaXmp@it=p{B*moZrkD%xp+C zBv!S)Fl_|JA!5<0TBC6oUM!8bp20QG*jkQICk|#?#ffJxHR`4f`Pb?H4-*(dG(;14 zr9>NF4-l_m5*7vvqScYJ8=$_g6v-f%Xby)iqh-Gm>5N1 zxduQ-8VQLBt#~E`-^mNQ>DyENQqSd1RYp~W1gw|z?wWl%J(`K08B9GjZ(L59R_G@fwR7<;y428vOhtqp(xpts zNz_l=oI7!$H?}r&s<4w@ksg3OuFP6Ut+hb76Fr zM)qmkD;ojZ$_SQ@Gg{h{aFiD52_Dbc zFU^Di{5vfQdJGS@4^{L480E`0D(T@G7nlq#L2=Vb>j>FGwGKM;f|yPhYdgS;hQ7V( zzRbm5g)1`FQOW6Gk{HCis#jy=}4UT99OqV%+xg()i1e6`F60KAIaIKwh8E6%zSKY9OV&3?a5Y z^9oto1YD01%6?wtwq28#8%>Lc^`a_byGb_hVkHA&ONp+g{c5q-S{E`Ki4?ub zXOZ7sy+TC$Vlzgha#-vfL`Lh~XKJX>XL#`VpZnTT2d20EXixhw+H(vab+dJ4v`d8b zb1u{QRK!!9=2o0qDa=9+c=04q5Pu|{Qy9LQ@}5~l%H`)D7ASL>2z4br;0(Ji#r;y| zFqn3)&7Sh~A^=5pXgAIGv`G>nJ)nV0>6c9LlNg{4ma)d}3gr6+o@{UfSY9p=<9Y%A zhh3H;n8=T7Ln&greyuEau&vKF=gSLASlMZ{LGckVLT%ulkAqZ(DmcGAG0{WMmxew8 z@E)@LAa6jW&i-vd=uPVVq~~TkMfjd4B0xHqvGr=L3&D> z!8vo?%(rWBGmfv_6ZgF6q`OnF>-E)(tL4qrZhn0wWe3;_+1gO#sRo#C&+6ekH3f=a zX!Ds&4oAV8@nWl-boJ)x!Zi+aZ#~?jYQjg4Di~KKD&Co=V3&ONcSzaUbAT|N(`J{? z2gRvHNrr0wIl`!}86N_5(9sCNxrUNF9q@Q4g|XAB_m>(gQ^Qs|D^GgFd#Tu!CE)H) zkZ+YIfG9!<7?fyZyWB4{v%#-HX#{?)SuhbW&|C`>p~m zo11z%=td}V2{In$%6PN`acWFAi|THJe}Q@48eolqS~s9*KV~jmxC>Fq^-5BMrJE~A zIcZWR7^VU!XsS?UzeoWezb*$A43;e9q~o2s9y#b07Z zvjrfUwfr9T4Sig7q?uGyH;T2Fq3{N7DlKo605*lNMw44|NtV1yP!!8p3m5b%Jh}tb zV^XW9LmjXAIlZm=nt(Jxc~z*!o<0d>uPBE$kh5BrlbRVge|SS0VVyH7F0_4qO+@O6sA74%37iyIra-!}M^7U^QA3oo` z`S2EYW{kUVp}|Apzz+JE@t|A#y?fopbt&J~T#p@;@=sU-Y3dQaExob4r!`-#Mqh=tESR4{7JZ+K^6vF+4iJVReqPziJc}mgEpc2u%D-HApQzyGWuX3{82C?b5C6>Fz4~ zNd4f<+NqZOZv6SLA13ery!gODPz&m67^>mg9y$ni@THzYQoUGgQN0)v=yYKTutrD6 zQccNTW>H+F4U;Tf0n)Rw&L8#3ey>0gazj`@hKtk#dbqD1rwKBjruERzTX1`s*9lM5 z6?OV>vO(1x7SBKds5o)=_Rt!UJ2UG6gwJ02yBBVJqGcgMcwYTo;vo}E-w_Xi^%mZ~ z5cp8?%g%qguwaJ3^IyW_bTJvuE3x@B(n1Wq1M1pIU=D$>p%$neR|jT8Lw@WQv2bPr*kbR$(X|F@NaFmqKj&Y`md0 zmO>7Mt6U3;5gU3m6v->9A$ul0K$<2K`6vTHg8(O7Sosw9kggJQ6-oZZ{5H=`D_1he zw&k=9;d`}Rx3ix`y!d&(}Y!Z_ApzHQ-9q#QMA_JaG6_ueSQe4Q?@YM`pz~k|OD~@*yVSpTQy`)k(RB+8@#cO+R&C#H@RbOh7tGQrU?#P{z zM{2XsD1glpU+KX*9k-{_4@F+c8&9FmWErkl+ZX7LnI1tSgcLHsLZ}62+gebh#Q4n(<_IXLRYZ~w4v2U}G65U_?JfL(Nwv;U(eKfux6evlS>s1TwtlOHx|;(Dp#nCJZ_~!FP9vHyaaD zpH3msjhB|uD=q}Zi;5Jr^2B&@l>;4C$a zGG8(Hk?vBaC&2^{kS#?S1OFZnyUahhzQiqi$b@)7e_}LZR z62Q3N-UPry$+bk94Mdn*BHW{Ac9L6karIj9QsHB=m`-RfUe8|b7Qrr& z;8qhJwuwP+t57*0l?!SlL9ty(o& zAx6t@RocM*9zNS7-_L^tyLP>#!M$)yskvf9cNKY;OO;~y-zdYie{kazP<7E*O58d$ zGUM^&hg27lL3P)Bl_-?0l-`Y2bIgB1xzg7$v_00n?sT=>!c!7O5BWr#VzJYBxUVms z7EFyF_h8fA<}-ejY$^fCxXh zkg0&mZiNiR$Q-Dl^U#r=u?v!!@OM)r(D@yG?qo8^ml+8%2e4)_Lo$gv-}ONm=%F9E zVSSvoNa^|y-gCd}e*p8_L+lb)UywV!Jp;AW#CnuxlP7XjpYcfU9+=(WNN6vpkF=5{ z$$>^VtjNeP-)zCYU_IhN4a8Vs2>{hz5m#)@8mU-wkIOo?o{gmsvg%8S7wWx3WqVXL zTCP!tTC7_!fClnNDN|6p1x!6MauEqDRo&L|-!=Dk(#2oj5glkG` z3dj&2CFsf#OuGkf9}nIR{`dbLT$BXXt>ct5i^uLuY3jbsda(Gv(nSfaOsQs?5Xt_C z+GWZ`s2SW|nzRCf=rKV7Jr@6B12u%9^N{LqW6(W53z5wOsfzVd5gXP{ab{=u9|CNFuz{P`82JcqyyA6w!C4E z_b}sl7hcRhd6?lL?L1LrwA13>Cg%M7Mn2k0NG?*6=se(l4`uwfAOC&ez8dr=z=QW_ z&zT1M=qnttai-ycGdRe!y7qT>zdrwQ{{G{Sle_nngX$X!hnf=MQ`)vj|7km$Cp+0) zI9?QvvFrm0rgZg7l=XmjXvE#rH7RQGmFHTfn3*>RY}@KCDZ6AOtB zneFrE6@JDDs6gI@?Q%Q5u-v$@%i6aLGNBfzv?Jwk6L^2mWFS#k9Itfz1idITgwFleUbGz4`#QO;NHn1)~ zHdF=>PmoKjf0gS#c!rNPb4!+8tvyH7YNx2Uhp}_8ej$7yzNGqqd3}sDHbA`@WfZv7 zRcM5_C2M#(qv78RFMvHRx%)B4>1_}_F`95{KV(_sW)?bN-DLh|aOp~COtD=#5hZ8< z!I9a3pk4nE+aD{W^e$pr`$1%gi9gg1;0@4Bix)-X?n@H(46u{Yzii7 zMv_~*V4~)uj7+qHuav*rm%KN{TO{~)pAN0tZIeRmw_X<*N;Dz8K<2s0y|0o0F!j@n zCdy%IMzn!VBA;Yr5E1|L?@0xHr?(t<0oU@YyylRLr(YT=DU4=HjxD7op@wKY!saMW z7wW@&ogPSHj!NIip(71(zEls9EDw0S%@&cL;^a@T{L*x=fQvJt5E@`F>zOwmIJxpO z+8rpiwYE@1$?4igfdXqrem&i~J_WjM1jg|{8211vWT0kcAcycaU-IlklJv!jEXYuN zNWRV}2kD3z58)tR)zIT>vGm7?q~g2Gs=)@Tdf8AAkSbzWGb=QdX1SeLhvZq!lXe8U z-p&--@EsToY;L`xN(-{y41;a`;D-6!#!Y=a20Tw#JAOB@bzVDuDhUTH>H=7c1OVCv zCdTnuB@58JrUYSZ!Bl{AHAtCMuwr?QaR=*`SYA8Tc&D@N+(q!jJtNVCdtQAh2dE8X{W6WW($Jx-KSU2_TPZ{=Jw7;$8#wshFL@_KD46 zC*(Pi7>ab1`6-&&n$WeYiBkfIsI`!2UPrGdgu{+t{UQ)?quz32FEvPg;8G`>qMgX4 zLwXhAa3ge~x^25 zE2aBYBp_m2+=LY*zNIP}cLr(zSVm85*cAT4aDgv79CeY3lC3=vLuBhNs1wICapv`@ z=TYKG8ZmcyyL}Z50`?+M%#7HO&D@%8Zdc_c)O*~cW%p~aO|AocbI-G{*ps!MK>f#W z*Bx1ue#-1fZyJX`egEycAG}@n!?){x`|Y|PypOnS^&P+E`tH5u`tHGc!lQtv-exg@EjB7-?Zgkc5a$aV1mq+gE!y^2{Vo9`US@#6f85@b=%e)OdC~;mRM>q}*W(tpxI{sFotR&A+(FCr- zxrrPWBtC%EIaAR;nhEQjI!Jbd~2 z7ti5|#2j$oHkty39zt))4E!QkY3Nkt~#d`kp#xAJ6e)59J%}g#~$S}spq37)2mqJ-=A1?!8z(e_kYo^T#L~>qyTQA{L0NrL|l5fch_jb^&`~r+@4eZ>X6?OM? zsqqIxjO-gJ*{%<&0_kz$T_-0fF}cE%P54chBjeZ$nE+`!xhMBcP2o4op^fr{D-~k! zwA4u-545Je>1vULD9$Z4LRF4pvk*WT*`sfyvB4nK1bWhea!~2*YZ&2#v{V#9tqKRw ztx{JXn40v63n0r*mj1PsW`l#TqvT-D+B3I4#xOCOOW&E2GH^p#F_(Vz0u2WRq$HAK zH$IN33={G61V?ZotuKWbuJBV?>LZaFT31j&ZXneRl%#O8!iNS~y0xQr%1qEjVu#P> zA9afqA)y?dvp~LSSxY|H$#2)o6*s_y%TdA@<*7_6ldJA>ifav8GQXz`G6xsbd8P?I z%ug5aEa>dL3YZZ+gfw^y)k35&xq#{xs^ag zQ}#~BdDAEqv>0f(7Rf%hSM3~9RN}~LK9y6R|JHq=I#uaL?&LW_-G{X&VNy2`$CRN( zIy&}d;tOMnlnFCMc_UgIj6~RJ+2j2Ws4jj_=`wVOOk=n|qimd4cAO6rIs(h+e`d`Z zIODIWghUi83J0P{xas2BR+$>TzWMANS%wZ|Zme4LJQBV#CN$;#ivUqjAvq*4bLkba zo=%x`x(CjnI@y z$#DP{gn(tl$t56{E0{mg2}_Y_fe)wd-G@K-8Kkkt;}axT(eJSYZ71Pqc)Y-K6FM)Q zrR#_A>AHkpWkx~x(@sy6TnyIxiGFZdBBTeUU0L!uUR1f=A*f?oWTY$8L<*$OSKV@) zE&&`>_ZO44K?QZVjF^s0W8#7lR$47oFLTCT-miZi+n@*)R zb0rkg1(T28otyi6O9phPf(W=r0Bf^ystZ}Cga{XOJh@kxyZXnKR;iLtz;F;1>qqwW z$Y^#BtU6x@Rw2d!EP+SvqjLG>&m1eR^ShP|1YQm%yHHIYSBQky z;`U+kaGz{*{pSwKhD>nUM&cZwo!*rl(gIr1pyhO8#L3uA#QT7!DsyzC_2yY%)qx#@ zP!Fr|Mpd9ysvsP8SbhM!a8Ea6Y+h^pigzJNe}CTrp9L4U6oPfOZ}w`sy_Jn7pjcF& z=iTrN?TdI(5;wZJawLVQS$8~o@#5zB%j+*5J%9B1&drx!JST_sqi2sly=AsGGb9!K zxUT>Q+<{5lG+}Lt%&ESFM%K~Qu}2)I)gXUsefcLRd;UU1pxR{1?|zJyX8_uD36HgFlrF$8 z7L?$A7xzcAI-~*m>p80RF^00fr!61;7MKAgrXm9Ej7c!d)n^)HF>HYjkr$a9#X}?o zLxvY)c~Rm{+(p|Mp#+#tWbcC)FF)1D4E>Kp(U{2xrG%ihs92u{rp4!pj~cXVBpdH_ zhzO8lET@Q%!KqW4xc@vFHWSQU!{$;tAB$u(+ZAlDz3FxOwFb%8ho*KZ@WcX`rM1{A zC~1WT{B%gDUAWQ2{4~o$*S=J(MrYwZiIW3)`rz0$G{<0YFEAv!Y{Tf{B-})(F>thv zDRTU5o0HNF6>p~d9o-JeAe8_C)#}Qze2seC$c~#yoN>)1Or7a8CUCGupPktG3rA7ZV5LN;Ic3QPFl4fX zkH%REH^cj25`ep?w!43eZz$f`f(A-B?s=qqV!cU25e{Y=0D@X7sk+d7lM5Cer5jh8 zdypGsJwnzQ!~EIJXG&JcT%5#ysv4kpgPxT#CyqjvM%}QkEt4#Mrk@#6r@yyggv#qT=&w@HM^hy4`&p}a{^Nm3pUtl(%fT}S)yP~93oikgAS!F zamm9N3U4U)@#US4O6K~B4}6W|7pK0bhsSA&DS^q^~E|Z%gE9L)A?3S zzGW^RAO#~+ebPR(8SWzuIB+Ue6F#&JuX-XtPAeyTSS<>bGG*>2E`hh{9b^zM5KN#9 zcPT?$;BkV2pX%*lj+qRo=!=|ze#!v)@SsDLGD9^lj7BRTf^-wK;Vs=OQ3gF+Xtcur zwu}Oyde@`D%thOA{($=!A& zJ0w4fp?8SCgAL}e>rqt#b&HWuj<3uh=>obZgzT@X_Szhhq1K_$PvL-mNozW!V}~#W z{O~|rg{HVLDP_`Xo4gD6LC1uaQez-kJ{4ZmOWdz(Cz%>QlA=o(QiG6#bl;=`gf@w3 zb#+|@(4gXFM8!TAR`DLGCSW=a$V2cYG~$hON@rbU{LJgNUkxKB$X9&dB&Q-HNlZ$W zYsCF{^hPm(Qskdh_)IZT$ZRYXVO%nrtmGDt3u7+hLanUL)bA)eKZaQ@QX;7 zNnIJf*m=8FSqJ)YVkQ1~Qb=`&{0Bvz1DDO9!OXE#uZx_jBB3mmf~SH|^xNe}v&n-6 zSg_1XL{r9$>Rd0)#zKt>s+1)o ze2o8H!-KMjB^+I=YO-Fw8!?_;xL!|wK}N)nmKVAHYiPr2pl)a|+{tp@4<n$BCpZE zQQgntAr#q{R~s&3i2ViV3LulRUBjTIP3WwWOkCS~cW>#WZ!r4?%R$mL|NIehA-s6; zXxQJZc@3f$=^&v~$a}fv@qu=XD6u|zp`==Kj_)BDtFsCOrkMLKPrUTUz6Kl6@=LRO zQ#AmV{>WG$QxuGt5d#Ni^0s!eQFGNTRGf&103$-E^eiAX&k%i#Dqy;DIu*SH1iTwr zehQ|E{KF?&4)RrtW>kCKBY`!UdO~GxW)v3d2Jmm0twCF* zJub<=M`qrzyqUopyK$_b<0WHkwZY23SY@nD)xic7u;w34DPZ}ZB+=u<4_q1xdA4FD*(vVJRdEtoJf@{d&L)e)9thIL;xt#loT%>7+d z>%g>J;IWsC^wJ8*uOgpj7z(0ZvVydn1tzE~Vw^#9I19YP6B+}BlLJZ@5qqHN1NXRl z+ASSl??54Aw1Mkgou=BWX-C?0InZyg1U#JMu;9^cYH7AQCVrsyg5pEd2Ph z=9pVN`{a+9t~2hKLmBZW!{;|IUp;@SMmi)h?)T;iY9swg6EJLd7dNx#pZ@rVkDuJw zW||^x-pS)9NZLYM=YdCllnxQ>rPs3 zQPD_xc*iJdy3~%rIH;VcV<@AsCy3H@Zk-{T&53FFO07eTEkhj(%~Vb%nj)pgv0_K} zwj0G1d6BKx*-7U3BHfkr7q_1B>|sV<_ur!)#?a)n^rcSh;=#cl zT`8L;?IN>b((a&U8dN-$F`eH?91%!Q(b1TLme$H0)ikngP*<$vT2?JUjg)4<5-Ku{ zB9FVM7XWby#hX3udJMIT9VWE}M;4x%U{xI)WD%B*j;A3CIk1c%GZc1FDd7HQegh`t z&y%$dY$a61G$5&}80F>tW~v*YCOeQbxW!WhsS|~jKHYr-xAoBj@F846EImlx{9=PJ zT2P7k`h*6jP-p-1_c|7jUC5oY4o}?ILtj{N7_e>@*5#7LuoNVP0@CC;F6XW-j&QhT z22-Z@I_nkjTN0Fq8Sgb~S;I6=Ti#?k?qB@^>>o$xEvgPY>FBGcFO=SC$j!o)bzO@a zhjT{V5~N4z^CmcqaToQ_^iy?)b!>t?jwq`eQbUi76<$Ba4zYj)YRTlX&|AUMx1JUZg`dgB?}i9sO4gXfU23(kLQx?>EtzPga<(I(c#^4N{QP`E<`cp2$& zI{?kd+nf2+_lIdi>rx}+Dnd@ZyPlvB2%Pl%8`|apNws}z zORFn%H-@@AS4)(Cozi_jDcyhg=tno#%w@~}AMQg@;g}MR>31qNqyyACZxMI_3sXT- zX4(1=^LI25ll!P&>M0>7T{hbFQn>;tR5wml`1jdH4D|?Ii8?(B%yg>KBtgxS=xU#c zEped~8d+#(&sVg4uFl|FLrJx2Ty7Bd4#_Wc`6~692sO4e5AS2BboJm$Mn%{?iLX_qwrmy^WJ%4yWX|O+~4_Q8u0})3ZH{ zz!`_e+SC>{EHnKUHX4$$1kwW4;{Vua2gF&z-C43vyFg%W4)se9;kN{unV9XL#F5FN`$c3O?#rLl&kU%w;|MHB3+B8EVzXl^Vn2 zpOH)qhDB)@OQ1CmtlX#^NLtlt1=0(|LbifdV%BRxi~M?gKdPuPz1G9^>|w40RyGRh zil>L_{>YVEbh47A_ZT6!#9g%?^yfa^8#iiw`hIiAx(%Fr-?e6AvL3Y4p_m);BY~B& z7cv})Xaaos~)J{P+5y;l$Su4Nty)DBbx?Fd@#tRl>$QznHJ#rh;+?DIK=|0zZvz*AAl! z1|1WNqk&XhqK8{LKymgWvs2ZiW!fMX#FLAhuPl-p)&eCYcMdqBs*|3z{r?M6$s#W5e~afZUXp?QP6tT2%y6(9rr-Z zz@BXnrIod|QV`utDDu4hn(xX;&^Y?Ea$31=@UH^eR`6x^rb*8C8RmFQTb0;d?hzi4JqxDO=Pp5Frd)^A(6e z3Rh0{*?j(qGFqoR*v324gY`zr3z**EUYW_fl26YTQjbiE6*+XXy`ZP*$wiL}HKP8; zs8Xi}Ze*x#5)PZ6ZAXa)^erKAx|ot%8RGFM|Wdag&fIM+ecm|lsiF%5N3tsLQx5N6v}Ptv@-?3C#4M;hL~dS2lt-xD~8Vi zPSRU)(D$vc@qpD^ESL!qq|{ZiNbOeG-ak@ixCBNGMVFG zP_QbjiFc3*A`c$ClPPCyrTjb@zD?p9EEA|%9ah7~;`81vtR~&`y097>`qf3IEw_7V zOVtA(40~p!NMm)_qbq3Agv42TTzkE)+%nE9fa=t6+Dj{-ORYeWlTqb#kgsowlr&md z+iN5MxsFEcn1f-vhYs|-I0h&WzDA(5ID)c+yozU6lZD6hyLZ`4kv-jZ#{_4+@|=$L zh{4v3^9wk9@;#Ng>S5CCL?V|4=1w~h$O_qu#sa;T$m`eoIPvcALL&)sy68>53GZH9 z!GZjYzHuMTr&pIu?ma!7teFboVuBiU-?+Lwd4F%bn13S+U7%qSyG}o*XHP$Ui=-SY z>!jC_n>am3GSKtc0bEa>K7R2-aTrKHdRnw~UZgrM+NB7juF`OCF7JH>gSt6>83&>i z47TO-=_xcLeX^|4a&pH`M^4oFl_TLcsADW1%Z%X80VNB*A8+AKnJ%?Bq9ujW+7ETb zwp5O869W;}D8H~-B_wnVuOY%b5&V1mM}<_eSlrj+(bTpl z1caSvh19^*s4euXAJ;qGd~*@st7Db*}QDS6DtoDiDv$si#xhqEFd1ih;-PTmTON9M3gPO`xUx)xZl>b zIk`1RQ9jh%DUUpOGC$mRv2BF4bmo)`^3^Pm6g6xE}5V4IV z2a%{4_E7R-i+kWq+6L_i9O`n+0seFpOEt{#lLw+D&$n|eMCv@iEj>(xFz0YD$>$eN zE`rwDXhZsg1jEs*59S5hQ_ftMajgIY`&LB0A)NLcHP)~f`GkU}?(3mX}1KSufjp$6>q@IN;T2BmJw73R%ePvIRA+#E%n<^S@X@5g`Yw?jC2i8yC(XG>>mwW@T7iFGF2sM1#^2YgbIbK;d>m-G z2LyDrNkqvwRvJVPjPZomBP*@|Ib0#&k~TnM* zb6GFR>cHGA0Q9F(z$HcUpj$gd;WpUWa@ULxvL-BSzu9k11hDJCVvR+hN<((EC^LeK&Ug%hM_GkoTFZC)JKpgP9Z;&W?`ad4|r za);tw#WtXul?Mu?Ofbv>gA`-Pg}|3W?iXq?Mr*cw0KSRn#4BF(77Dl9`Bt*$d z%TrOlbd_ht^{ivB=$kIpBQ^tyBB0<8ot8zNj1d{xap4#FiENmkAC}NVomBK? zL|zK;ilb&$cyN_a4L^uUS-ip$(wQrHqlD~s(^HZU`1#dEE6SRa+WGuk&f#=S!Yy8n zPfKkDEcg4|JiWLjU^ds`9dNQ-Ahjcmwyi}rIS3RzbgL@be;esR!3J3pK}#K4ClRzZ zCJ~HN9=`6A#VVireyxQl_NR_19WDL)*Wnrp5^YWp@>87O1t;Btz(4U^?r2-?G|HB7 zN7;f{@bAgiib=jBgDVbyW1pd0*_;oH-};>wVI0jnlQ%NkNUkQg)YV7a)QFvHyB z0{_i5^_aXS(kJ5BWEx_oF2bRsvx{b5c7f^-VNz#CY>E)0Tv1Icf@FvJYZGk+i01QH=J9c^hEIeT6d4mLrAzH(VSpFT}`h!0(`JSmoNs)0MTygEr2goFkbLH~p z^DpdnOx$;iUSZJhcI%WygrT-uX^f3V5-f+|I#?IGER){JA&p8dY|JSYh-ViJ4L4?x z8l5f-Qjf8I5Im+3%IZrY6l83O7RXZTdEX{ao&>Yc?1G70G4sTFF^=J7#v4r`_~7ul z4@RrXUgDCEgKW0|BWXmSv`Bo;(qhr1!SNVYJxEF@p7@-+YtXo`uEHf9=FcSBhX+&2 zGoDgkxS(f8nw0<;d-99ihK;?!cS5P)RHy;zBVq{Q`;HVoZRPsjE;a+83W)R^9l9=p z+gO^s&CScz^T*GgKYsa>yU(A!`r`4^AK=K`1`=uZ(DDs7TEsBRQ%5oac-PAfak!;o zEmXtebj#g?1d)Eou1MVH$(ev+cnT=8$C-RWL7cXo6+DK@GgK&0!1S($X}?q5(E(Od zt^~9f-&<^!r<;3OW~RL-T7^A@8BWm@FzP^|jNNQf(4Hf=?KCT700EEeklybo&I0$I z7%L+^nygdp_m^m+pLKdp+eP2v+hU9zbEkL17({(Z!RcBn^EV%r? zJNO8avim5XsUQ#R5U8NVr(Y|UUNr1J8AV_>Q}xu~*wP#Z7?(<7D8?QlSid0f1GgS?f6RmB=mY(H?_tVd8}Doa;-ykv%F}q)-Tt*zrk~ z-yv`9vnfDnzNf9l1?tOf#u$RYfN;JOM~mmedi7eSS6vEaM;3UT6Xe)XY8+3IDzDNz z91S%yo~rFgyHk~xSI1ZG8$kl*c*wn5Li5zRA|I~1#q&0|ZOX8lacboCvu`|wDhCmK zH!r785dEK0H-JuY1{^wv_5wQLl)oWzu$v-_Wor^M=|nd4Q_^%_m-o{NLZyAg~VYo!0_PzeoWBoRiUC=orL!4Ju- zgOq@cT}KvVvQ--_0E!Hxb4_vXqy}PVi!i|CnAitEgkK2P$i;EF#*$`KGv}9{4w`!| z=-r!_S7);y@0NO|@M?hg!NG~;^<^xGZquuMq9PALB3?efdGz_NyX*o}$M%zIP2^sn zudZ>D*a@49V{c;+6aE z2J7(}pA8w_?r*LSbGyuvsInzV-ZD%n+nk8-%^=LsbDG;<+(Di_8w0>SrQBCp^?uN} z5pm};37{PNPtWe2;t?qXERzL@A|_ygXW^WfwUCEA2ZKhmc*rS5FqjPii&VhmRR4^Wnloi2+Zl8P5;QaOKnE{l@B?W2gqkY{dn^4 zGALJX={(c?qe1E51mE-I3d|hFY5078{xk+$;t70?f-jqIy#?Wl0|jn_Nt@mSQKHk~51{nK(;*)fsk>8Kr0x#I(E_=^&UlXCg~nwNS4zW= zbK_*SF`mNL8&W7G(7I9aiti7BWXu45{@?_Z?d0Y6u0Kchj`(7pdR|cIK9a9)?vEwf zz?i2C#~BEQ{U+HOfI(3oh%cUR{z4mwJQZoXWz zL{#PtyL!u5dp|s0+g0NuIZ{FnB%2Hy2i(T+7MyXiX4rq+?2vJaW`_^42gr>h+)NAvm-YrO=&* z;p>1JAm5E;neKdf3md(-0%CJzV7dSqscAZIYB-C(*f)^zxhF!<~Mi3G{3pi==~;? zQjDjNO5#shE}pF}OgK~c5WXm_UatZ<6|58!CLz9FGhux|m~|&;f8>k~Cf5mRko+b^ zbo5Hc26dz~6I!{sq>S}LKc3R|Dn_ppTP0^9Zo60-GKCX&%yM`4<9`@_HY89ZM+J9 zhI)0r7SCaP26K%V4?XN&eOcds5;5^#=JE(V%eSQs5$x>*V2b zJ?mx@s=#3wE;0+uvtih*&EP9i(2d!0%H(K0P@7P5;ThFRrIAH=d^m%M@}Wk8$-~TI zz9rn=Yb>E*3oU_~ZmpT?*BbSjrdRN+Qg#AR+GRnOe2PI;y={LS*@@*%u-rZ0=HPWHF2P>*}AKEAS7C|HPa7|8ULruN2^te_Wq@$&hrPhJi$y%ohy z0J!!32S17AD%yl7mQ7RXL#go+K9ogTa9u zBMU@iJ~$42Ds_h@JiF)Uw}yL&zWusom^n-g5ULNyA2D zauSp^c2(hTUe~t@H}yHz6DP)iEV|iY9>z{NZmox<~l$sHdxAte-ZsOag#0` zp(bsKaw2&NDr@E6f+>PZF~rd5Ag~ct0Ir9?CiQcVvU9sDu5_PHeA)x&i^<2v|HhTz zB)jsKFtS^3vIeM`$m$U6yuDJhn70-Hv^y)8APZsfpObi56gvpX7X?IbNeysNg2hFs z%~OKgnh7Sth33;wA3qzPKYRN4<+JCqP6G%(oIbENVshi#1IKoWDhgOE$^)lVaJ0^-UF7N0oIivYsq?AR$ok zUFt48*w8>QRf`gAWWt=vY2FDItxW{GP{xic+k9cVys7~BLE zEY;4yBi73yic*URQ|@5;1*2wTDs5~}Nj<@uE_X%2+D6@-gN8=C-7unErUk-FM(`4q z6;^e5i!pX!MpHb&jb{~=C$hG54uL>qiu)htHZ*y;UMA5vJxNh9uA8xXy&0xGfbl70 zBWEGCV`26F=-{46gbHCV=16*i|J(NV2g2prxTKmDqNjm`aIPgLQ`ycChjtKkgFZa};O_ za)FeMB`wM4wWmp`d0}lN-i067h4_^mi)3|-Ftrk(ck=8$H;*D5-lHg)x;IA6n0&6Q z1LY&W!fN?!VJiDO*ko^3a|mOqe|J8gon4)W`yq=S;Ncs%7Qw_v`{L&Ol;!zY=DJ8-;AdG;wq^*{6#mJWVd1Jw1Q);*aPveD?IE z(GnvME=dGzL zRrFhX52wO0lq-0^aL0UnO%a8CWE7;Mg(5`nD;ej9KtMf1k$T*5?m*y_F(M@ua@_Ap zVByFG49G|G_w9Pm6*RdAihH=wCvzYoK5M%89t@h?GO3b+kF!vgkz9#`U}_UD%E-!! zP*k1Wy*pp~8`-T)-)9=n@&>#-Xa#4TjB#X+>B!EJv$dcY(WJ9?>Kbjht&~bGk=(&s0&ylxL|Jo$HB3uh8`-aig)A<4@1v9TwBY%` ztX;E7=w|vJl9C7!13eRAF=reQ@Q=kMJ-*eHACH;syVV+_0KA>jI6sf%i&=K-GtC-sQ8_cG4?n^W&?#I3iyC`0_Emsvkd-J}5<>E2w7Q zbJbzPCV=i1zGQZkans!pXh!O&s|94(&0_MvY^=p~Au7T;v|?xZaj6FB(cCla?>Tq9$sjdaIBeXrIcDKc*dS=iQKJDC=IFv z>Xt-2JW~Y(bI87l?1kadnmG#bJ{HS`ga^ArvO@V%Jzl(g^zzjUCWNUX()JUgQh?{# z7~zIVD02*~VfoYC2aStK$Rn4E-{U zzp&Ku7CX&^+q4f4`x;F@7>TIU?sW7O$CZJ?- zfR;KbYKA+CDmI$r30od2=sDjpqN|05SmXorEEQ#oZ>x|$uqT_MnWe5mJVqgT1lPg4 z@Bv`SYBB0QRQot2`Q;x%uDkxQCjMo+W+Q}_t*490D>WGEf;ulRc_+=EWXfx+=lo;( z(Okd0{^8Jkqk+k1&?c1z#vM6Llh0vjuFCPSG6Fcb%1fHJ!2p@CDZKa3Co6cLFV`PK z7?_-6+Gxr!yWaaB0J1(`+0?nM&zi3BM~>PsJT#qIN3OpwxP_m3Z{Ck5r^g^N1QraB zVY>Bui7ZUGHR)`Ps%kBBqODTEeJwyt+tSORo`ESnP^`XGH%EmqUfjXyEkPQaQw*&a zkLToSarw~|T=-!p6o}Z2H&W&l>pVSWg~D`~N$SeqLu*>A_2_{0g@HHWlW?|KLM_|s zZMOB&BkaML*|tyvQvFD+h@3z3H8Wd;Cwm`298wY6bZ&MH=+UHyBqgn&dUbhvN)Sah z1d%vLnJs|_hOGs#WO3RPTBn|IIP!NgE1>Jv>;%Qd=H;_5&Jh`sHe$F2-d$SdF}Jv| zAOXd+vILh6x>$6&0iJqlBRbevauDPpAX9>~>|`}VQL{h)NoMzV&M|#y=*6nwV#n#j zn&^~hO>JcZHW~x19`Y97zuq9K2%`DjqaCnHQ0=@2S^sKg!BR$a(6i{}-EO@Hg@^UL zHGF@VdY(_99?8$_>;0`Ed3DHD-x}h`h0gQt*PGHV;jN@sOOZ_@4>k66PF2ZA@ zDBNYa6o!SC`5eav>{P+9UP3AC!0B`!{FJ}dcMh>Ffzqx)`~o)TMe6KB4`(U5e~(m62QidotF^I{@=px+Je)TlUEoMDau!*`?Z9Mex=Q(w&rE{! zUg2)7zjYtUrcrw+O(zv^bn~T2G)V%dWvlx0LotsF!yr#L}o274FL zYt?ZRZ*RK9{E{W$GX!8!EZ`p5@DuP9)>_AIfZ>v2&*e|PxcT(vGjU^e>+I$;<$_hj5#&;Z z4##G2RAYci1=lEbvd+Oq@KnL4aYwKzcxD+>Z3YOW*`r8ip2^ckPo9<4Hr?GwK;vXwUvTZE z<@}O$<#0?Z@b05F3Znw)?J?vi>%L}L_h2|BN)~~!tLx8Ry}0=l+;s}+^L@UhQ}v3( zea=zoH9I8M&7#E0oX7GN&VZGH+}t{{ST-yD+O8T0X`t&3&cRo-8n*(Z?jo>=LMU=4 z!CzawcYl_8>|?+**>a~{HKilT5h<5-R0 z3aQid21+R;w(?9^;H#IGS+}^>*lddx#_9du2%oY;t&oe%zLY$mpA+9MN)DqJsP>p1 z4MURe;#zO!i6WCGZ*x^anQ!-W0we^PDN(U#%gb7`7KoTB5l0K(=^^|fx?xb~o}iTq zA)5`37PO{u+sFBNgUMtpToQ6nc`~ zVW&lN!BIoA0gsUT;H9f8UumkSkTvy~*`Anoj1CbPu!3kY(VJkh89}Rq8cG$=RUVfN zP7_|0xF3o5j?2n>Wn)@r>1&xAD#Sx_qG<~`kA{kUAFoW_bQY?=hZfIeAw)#?rtK3Q zt$7h+#+XGsJ{w%=Uasp~N!V1p`8=ef*GzL|L1`^s>KYd-TU&DN2&xSvGhGG_vpWF;T zdG_=Lh&*;`6B9SOPZi31jnkzz2l0uKwy;(1M7!RjjhQV9Fh`(y*t9YuFPiN*wO!1Z zM>+hgkFe2uwl|uA)YL_SC4b0zFHoq{&hMMj{I(7nzpVokj3Q@ZS-FtX7*%nrpxXu0+2h`{G3}3u&gW3s`5jU29cfQm5{QU^#-7L z)@NhhPhaO7!b$0Nu=5RN*es)ia&XzvnwOv7Xsge)njms#dH3XO0nGK%3|3mE2jDn| z17bM~8P+beh$IN6J=(k5U_}Me@&z3WP6~ffMDyeXM9B2TEkLgzZCNAZ33W_5%Ja3m z1bF7feT3W4mcbXVkzwHy*=rFcGF@J=-U_5gXs<4&bJWhXAF^@e3pfJfPSg{xT~Y6@ zItu>P-A%{HRum0EMKBHl2t{$xLz<_(?rG#Eq^E}8)$6usFT5gk>&0$29U_{nQ=YfcUPa)VSp~FMEba(t z=4+wS)++&ZgG~xITqyS_TAxf7REIii*7cS{Hfi?X?lk8Qkg6hUgy8o)J(-*>Odg@~ zI9jx`iFnW>A?HnBP#Mm21eIkMA*8ma1-Hm`0xtuM{bIs|Nh9ujk_XgAhwgR<|JVN3 zUnZwYAlPHfZNCQ;&iXx|aMAAp?QehJfvi$yBwJk~)(b39S9#D2$G4ImRovS!<8%j> zI2;S{fF2pO#IwJPpNK}#`)HIrPjHUt|7gHcpnk4DwfRY|18!yTGe zRv^8Jdo;P3gxEs49p02E)6}nPY#?HXsNzSRHUC5g!6lb|2kCvm3P^b%1H9kih|`7Z zHXC@HD9%M&KKXP96h@{4#}C>nwL^9z6XMox)v!{;<`JL1oQLaRqf6G^a#Giw~O5=>436 zB64XHZPu{-L@Y%HYbuIG8fn>rA$5MV3)gL=c?_HcYcKB4e`|>~w~t>i>;$t0gV57Y zzyA|jz{R`!M7n0W?qKJHa^9JNie^72Iq@A-rZzn^A}v70v2|2#6;wCr+#xHp{s^%E znKRO*J_f8TNq}&?5Dh#>cuEjZvF5Jlg2ow{1nh**hw@SLK_x_E!t2oI>_TZL?II_f z)T1FMA_@YXO|q0%Cai4ojU&}XYV2X%2y+|_Z+e&eWZkg`C}PIE9taILW*ja$r<5$6 z3#u36kOzL_-AEUr#muc}Aw;K(Te(|jR(38x`q)q+Kp_HV$d}qrqZ+2}TIA%1(E72o zP~Acei!5r0Du(mXLlh>f=>52B z2~RrNtCb6w?o&bMJKZ#R7oc&3pI>3}$)6}7xnF+niqAN9A~8ZI%Ay7gh~YXn2CER!; zGl#Hvo&CF7h$Np;WAb2*u-zPmh69T9Q?miDj65~&qJdTOI$~Y{1oHFh=IN)K2NuJZ za0W{1`DA*EgCD^Mu#0DGY9SgYUkY{wD}ww2g+B$5gj@493gKS3KEj>{lgeD5kuUQa zXN79w!E@7^3^+u2#LLc*cNenb!NBZW$Q7RSVQmZU2%<*&_W1J-8gh}5Mb#lT`~dTFWq(eo&(1ZJ8|QO3>)VHb6;ytTwUa{aTz*e*}@Au zyXDFOn;?A=wGDG1RZiW;|<3djrxhzbBZuX(oCpH@xqw|#~lo%&R zZ1BzGX|Z*9F6uF2n}sp@`ig&ZUZIQyso=T|hg!}voG;2xfSg`3ipBQ;qK9Nugy!vZ z!&+rAWtFQ=nWZmCH1u@a`)e4UhMb1T*1y!meYx!#Si^}&Q}9gG9|GzX0(8;Aq6l;# z!VH1a5^-yunId0nrJ~Ptv&kKJ;n?Av`Zm9!K5(krhs^=5D9%$|>8U(|Xre%LSpF#p zw>$GLJ$n8reaLP~7qYgUysR)H8>M?P0_67MV{`n#&O{toG7QO3>;gF6MuD15ZrFtrXL?}C1(6OfgBY^{h z^zaImt)s9K+jX#GWR~MW=)>lAyLAi+2<7272O`H^P_lzd)R^3yAmFc> z0VKgFzZnb;m-P}94s}bJlLUMf%&9pgiHqTVJv72hEIDt-rH(z@$jqu!M9Q>gp2RwZ z5t8_MLIqgjo;nbXTp!~O2eCCwK}sugW^p^xP#+kp%8!_VSLx4m)B{Z;m(Fw}tE!P@ z>fO@t=I8D*V`JUTkaPGz*CZm{M35$#tIvW8sXFK}uvv>p}qs^|`Iz8HydF4qtLH z@HNqB63kW*JB;otC`tjkH@UPu2GDSfv`k{xEjy$UlMcE91G?}MiH?Q^+DPXlZsYVU zu@mhm$!%0%8z}LK^3)W8B^=*Q?QLaod8I3R$mGGNMC_jT(NpbR5P<1tcPJ(@x!oBF z(!m5#97pt&F6O0wNej~>p{P4K1Brn!i<-g7TWIGSKmP3TH_T*>z-GL0Q}KJ;O3|+8 z07E%C#EmglO(b;3QUXEpiC@4`brJx6Jr{QuD3YN3W8Sy!fpkM*m)r(Fdc*yrLs&0k zPFX6FqT_2zS5$rUZE^c4WDdl6FE*=bf0DSWgKn)(`myxzrdfgDqR`KB2f)rz;JjHV zfz&b}(7Vqap^(ZPlH)Z((<|$m%x_4ZR8zs;E*hGM(F_X-%?8g2{xVf=)2I_7A5iEA zcB~d|ct#~h4oZ@(V5yrLPXwYu+?nC)UW<+aO{`l3+)0dAQJ-J@rd~)*`O$ZO} z>sG+2WsukYSyCfHkkn`KPR^QT@l(V~X?P|W)$me&j`+kPHEl_Ad%*gPXpdM4B&XXx zeN87lK<9N9)tqUgR)CKVznI!kCeN0{2{yhkg-i2b{_tv5ghv@x;n-0-UhlS8x;`-6 zehft@5~w0t-^^Z}c1^6*7-so#mrP1LX(BvS9eUqL2}Q7%1IIgIQTMvAc0Vlo7Bvsd%`Gw{$tujJhwf031h5kfT{G(fFRCU^*LvVf+O$4_3~Ja-SEf+C`Wc?Ff-EVg(xQH{tB z)l1V|nCZW&dESCo;L_%`BlU2uH=0JNO_gFzF(UOF+&qk1iYv{t#^LJNmJzREnv__` zC=m{0&)FuY0j`^?g*=_g+Z@8La8&vE^ny%sLz$KIHlE7A*&7GSO+xn>*gQZZ!5g1I zpFsQHj*Nj4;`|rb-`<|ih|RIN zuDudt8tsg;vWf9Xm(_Z^=%IEbkk+)$)g?q-scpkn8111mDFbJ=km1h&8Wev;r#HqZ?l9BKkQOXJQv$H$9aGzWbKr$FLf35AUZWDhZ zqhPnX6Iqu8(xcfz`ztcmHOo>$Y>I90X6!*Jh2ZbZ9HdGV&fek3W2TO6I-D-h6mrusXH;!EQf)faWy3lMO~5 z1GxL-+4mnkp>+XP1QbNc^9%jPe0{b;#(hKvgxBnbZhCv+rU(CDy6GKS`4{kU(m`*< zEwWb?-j!viWv9h1zJOxw5-#6b3^0IDn!)RIp!uAh z;KfL3=TAZO=@61}+t!!`hK-c~hc%T(@P|+~^0B!%uuQajJ1B^rC8lqgt$0G02HUw# zPUUTB%^H_jGJLKC^}19L#>WyOe5p9>WR;h9y`|9&l4NKs_Cfgv4Utu2MCIO~=|#PE zB>_R?$@%aD*o z<}vJRPwAoP_u%CGZV8M!9rnZ>%qcNh5owXM05(Q=4%9E>xJ^EcU@Cd3@w>5ScGAGahbMwPZHw95sQs z9MVlw=aFK2y&X#Rd|KVTKusndSNwaQmWTuH4Y0=YJcwP;?WReg!bW*;CKu4IHA~h2 zb%SQsBXXPW6)1IfAIUhLWn|`we|C8y3s#4HY(XOH7GP#vNTf_WJQDgZLX9n;YhU ztWt3FsofasS@+V?&mlBzwPfsSZzo$HAogD+sH*hwK4zW$V zT_b^r(x2|70B8!zy_Woq$mw64yTcJPWaND}-7}Sa!EZD`J=S^6%Z*Yd)!VCvse9N4 ztfI+5Vt6KE!b2pEv7%hzR=dvWab?%BOGLijJ;4!N=h{xO1~MeU8!)_P%?6q^TMPOn zl$U9WNf3_DW@kjreVu1@RsQ|si$lOu*CxTPM4uv=E-KeMv6jL=9EcGLOT>C z1B!)-`Kr2TzNM}}Y8ngE_2a(uaKoB*zzGqP{cxKhrRbp7>5HAg_TwV1^yx9s@cO_t zlo*)w9R9=;-J0t=&_*VUZg_KYT4zR7tWHB2`H+(o=grUrgRp9iu+Cu^Ctb+d z+DV^AWcALD$~7jJJ)-@3s19$ zv~rhJb-~P89^0JQ0;KK|dJ&_la(57s@Dn^|u|E*PTfeu4`4sdNXlQHu1RAut~NPuM9T5pAfy*36Q(Jd?;=ZT1u4F= zNTT$nBugggfVUAZ2n7=!gUnM+J{N@Xlt@KV&S+-~@X?ET{!@**pvOFOm4@1-uI-90 zo^2{8+IH4~_obYNNa6`b%iSNDX6xYu5h8QAikbbVXwe*TM9TUC3R+q?%XW>EQWQ3(hMT6EFcIB+`nI(V|Ju z;MSyr8dSN{@w7FGw@`hJQIgf&2{zjW;$^NMoR8d#0gc>kYLy>8oD%VAaLq@pO3R;} z<2(ArTIjIOp^xX6+!{PUO&;Zl8SW_)y&U|dnF#_1RU1w|jZ=yw$wavR2tqXkr>~H> z#GHYmw-h*dT%&qdD3v~d| zpn12mM?9Ja8PJY81jiS*Q>7rB1PDSJi>b z56uvLX`I^B4z|KU;?DYj`lzHGo?Kq8jX9!5O%vtz$@OC2CNA46QCk@6B~_4RS<>u+ zIy*boLN(BQcJt|=Cn?&^c$x}fOp`^~n9rggktwottLw3J?!#Yt+reLfw6!eX&uyI} zyGO2VGD^%uKpAr~_a|RS-cU-pB{<)dqGI=KzVfxEnj3U>0(}PbLVm;)+-rv92j-dcnJJe>d*$&{$tj!=ElV zr?7yOUe@(Q4!1-=aL&-K0fRHV=dWf+i%}2gH61mwfV*D|3TMUxZa2!nqKEF}u;J;0 zthH2-Q+xsGAL?Uh{UOLK67=*xJHKOE9CQ1>6G@4&Ibeyz?L@iI8&-`R4t4}~+@YD>Gj2&BR-3K&unyeX=0MuW28p&?~c*}aBra0aOfIlmvjfaBE* zQ61^ovbgUWp<+-Sm^)V@Bh2-^`Nw1I&Hd@Y>~M~WuGW*Ht_KH5$Z{1%tW+2t%lH8i zxy)cuNrE+kFv^teT$0UZiZww2P8h+V9MLj0ZJKBsG(5Q)x#GcU&xMaJ>}<(+FDZDp zsq4Ey+!0CzMUjSPtqK+^^=t9@@NRV_T-`Ngn384t9L6DJA(+z}$5Tzgr*jQo_=~#; z9Xv4(Pi_lzTG-6aJshf|(P=?CwL%OYi``6DnnIGMTvZv_EpipDBxX8%x8&JLAsmau z&BE>f3&5jGKVlVQ#1vKt5Pd_SHq2+;KHk*GmR8~5mHV~ra@QR1_cc8x+*<~ug z3;z(dx=V^Q{msZTg*sHj zC`1K%n5_r+xcXAxCXDkSviAJ1VVXyh_oRVA&YR{s?cB|mE2!pH*urLDrC82?W*D;# z>^mN}h!wZGQMjjvZVif78rJWBL~pT5Q@OpHo+6yHbjDKWn6%@rv}*AM4K~9T z)Jm~iEQBYaEeHas4EW3Y9xM@AYVB5kp3qf-wtU*JE<_9I+5s&Wz1*)Z(yeKkX15_??_m4Y?7 zjL#lU)+b~5rJN~R&XeoVZoODAUx1yaR3%2uIWLsmIW8<)W(74asEi1J1dB(BR|LO~ zl;2jmU~5=F?w|i3LJZKNGS2OH%Uthml1!C$B4gETV;<}`0pjS}Q zjKxn()7*p!aHQ%m$hjaThSjlAXwv>&sI-fqf)T{Rj2KWR&>98Llau-4fjRxD?xO-k zm`5P^S?$5%PI&=cENQ}mp>msH%{+>VZkoYFAaF9?E*aC&ZGB$&)sRG2I&rX4B}@+k zd39dcz20|>B{u(WamSKy>P}2W5#HZh`#_)b#y-%@y|Irm=QyE)n4GHA(#bli6$v3V zD{f{S_0rS~v@h40LtQc!!S)E%o9QJh8248YoQ9ni(OaZ-LOeaP!u0BlI

`JLENC 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su new file mode 100644 index 0000000..424e879 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:373:21:HAL_GetTickFreq 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:389:13:HAL_Delay 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:415:13:HAL_SuspendTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:431:13:HAL_ResumeTick 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:441:10:HAL_GetHalVersion 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:450:10:HAL_GetREVID 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:459:10:HAL_GetDEVID 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:468:6:HAL_DBGMCU_EnableDBGSleepMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:477:6:HAL_DBGMCU_DisableDBGSleepMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:486:6:HAL_DBGMCU_EnableDBGStopMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:495:6:HAL_DBGMCU_DisableDBGStopMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:504:6:HAL_DBGMCU_EnableDBGStandbyMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:513:6:HAL_DBGMCU_DisableDBGStandbyMode 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:524:6:HAL_EnableCompensationCell 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:535:6:HAL_DisableCompensationCell 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:544:10:HAL_GetUIDw0 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:553:10:HAL_GetUIDw1 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:562:10:HAL_GetUIDw2 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo new file mode 100644 index 0000000..c5cabc5 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo @@ -0,0 +1,32 @@ +../Drivers/CMSIS/Include/core_cm4.h:1657:22:__NVIC_SetPriorityGrouping 1 +../Drivers/CMSIS/Include/core_cm4.h:1676:26:__NVIC_GetPriorityGrouping 1 +../Drivers/CMSIS/Include/core_cm4.h:1688:22:__NVIC_EnableIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1724:22:__NVIC_DisableIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1743:26:__NVIC_GetPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1762:22:__NVIC_SetPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1777:22:__NVIC_ClearPendingIRQ 2 +../Drivers/CMSIS/Include/core_cm4.h:1794:26:__NVIC_GetActive 2 +../Drivers/CMSIS/Include/core_cm4.h:1816:22:__NVIC_SetPriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1838:26:__NVIC_GetPriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1863:26:NVIC_EncodePriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1890:22:NVIC_DecodePriority 2 +../Drivers/CMSIS/Include/core_cm4.h:1939:34:__NVIC_SystemReset 1 +../Drivers/CMSIS/Include/core_cm4.h:2022:26:SysTick_Config 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 0 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:298:6:HAL_MPU_ConfigRegion 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:342:10:HAL_NVIC_GetPriorityGrouping 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:369:6:HAL_NVIC_GetPriority 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:384:6:HAL_NVIC_SetPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:402:10:HAL_NVIC_GetPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:418:6:HAL_NVIC_ClearPendingIRQ 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:435:10:HAL_NVIC_GetActive 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:452:6:HAL_SYSTICK_CLKSourceConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:470:6:HAL_SYSTICK_IRQHandler 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:479:13:HAL_SYSTICK_Callback 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d new file mode 100644 index 0000000..b7d0b4f --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o new file mode 100644 index 0000000000000000000000000000000000000000..e4a5874f46d683de47e9c9e431f21674a2586ceb GIT binary patch literal 727188 zcmbTd2UrzJ@Gm-Z&g7XB%{k|==IoktT;m!SGp=cMb&act7{P>!f+!#eiV6xC5D*o! zU_eC?MGS}-5F-jI?^gr5yZ?9Zckg@W)2Xgp)6>&kT|F%6(z`3mvds4%%hY84!5C)t z7ll}S6J4Mt6TyV*d3){|s z%L>~rfXfTpD*#s(wpRhJE^My>bS-SV0j@13f8*oQqdncezVcQqbuduxf(7&)90Jyub9S9gy*xm!U7yq3imLFt7 z=Q%8NG-iv&JO`~;ier?+amRii^NmH?M>*sB_e|p`2d-z7;|&KU zwrKO1uA@G23;*cGykgRvBA8GPx@8oyQ?l!SdCTC#*fnqF*3V)CrjDADH{Y0D!65b^ ze1yzaWO5B}JAA5Ak%`s*u^P)fB)k9BwHN9t|Iw}3n6zWx^;^%x#=e_@>whf$FYK68 z)Sd<2+czEnT|FXWWAK(wHhGyZ)bI(f*hB(O!?`|K$IFt?TfArTb6pPXC`{ zZ|U&;DJUte9q)!|dOzCP#4xq~yq|(+{@-UKrqSQ$AbOiq(~ez#SmbD6~j)c<$i7T8;jaq`I_(qRF{ojxAN?oh~~RP?^}T8FcR)lgm3Db}oDu+1BB2oR+XR*eaGZrRPFN zw)H>hjkxp1EO3l;oHv=;hOS#bTN>E9mh4)fS5miGVD0;x`CT3u|9;FKvD7yk^!bIx+B^ppz0nD8=s*Vr zdUDTBy59fx&5tGBf5s}!bHnGA>*WPlW*$?g*0s{GHv;n+@P(ztg^no;$_S+~YPK&( z;RudcxLt?a7mm1Q94_b?>Isdv|{(YYXm01@X%T!?(tmc@i?42_LQ;psGyOF8R_C3!r zHQ9cLS*8~IsDpv2%^umpF+Z_)?JU!f-FeT*G-5A)GBSpJlqS-ph?lcXoCn!}MTH z^F-zsHWc?Vi2a-|FoV%&!muhLBR^|^UR+_Ujpro?Bd6l)l)Q(h#Iw>C*1+%vzQP~@ zK(z1X7}?U6WB5KLzmfpQw;TxlIq<^wD`hnhNsMrVj>M1776HU_Wd)`j$4{O9GvK(dYM==+3L%URgiP8h%3^$guOtjvX4BmL5V)VAA4eT_4 zIia_$S|_w)^>$HhVE6vaNp>?#mNfJpVqi|`^s0umN*r@qZ`U-u@G>xQdb_USwIVWS z^mYToZyP!0tln;7&<-)oIlbM&aBQ%^oY&iJwEkTOFc;Vm*l(|OM*E^3b9b#n=K;(m zz1`c8g{j~&djT^24TC1IOg#GtZ3q2nC$Jf4&oEu1(+&^ht(o`Tu=AzAZ zZjbR*X<(N@*ctK?_xC8Csce<%%Ps=$)0ALj8qoX9a3wl$Oe1QtT(@=t(}c!7$Gz{% zFinXnapvE6rn&y^b8YL1OiOAiT-nt|rZqKH&h>%Fw56uTP08k&cGNU+1Bx(A2WpzR zGo3N-QPaZ66E0!4?_yvPMU{j5M8^1lH6aYVhKRtsYDaXbF^Ra;>qIK@ES9Gi)7-*06ClQ~J^*BNNUNO26{>&w2|YBpXD-NjO`BOc*xKWlH2^h|DhC zURhnL?hmP5Y_0E7rTym`82A5SZ^#cxcec)V$r8^!42;vi>@E5s<@7JF)$wxA)TOY9 zA-2RHQZw0Vg|>{f`{C|qvidVHZ2ZHx^L?zhrh5c*}!b73Xr3YlJ$QsQdAXNQMsDuq%k>x>%N4JBe3NF{ej@cJtcqI$; zj1a4C9Ea!f_(!}Yb=f13wG8QHU>;Zh{$y*U9fx3&J|e({!J@r#S>_^|Ou++uK}z(P zFIN5jP>OcO5*+!Dh*>TaiLCNNq}wM>->er7tC8PD{0kq)49h1Mk?}8l7><_Os9yN@ zEeLCT&EUUz#<*Mi9%WJY+eW?oz#vaTj7!KGJ%9+> zMwyX_)#$ry?Onr-47*9JOmYPSCLMBm_kZt3c8h4#38f)J-NSl`M#kE)q{xiL6JVI> zMDw12vXOB|d4XZaiiP(wULR<{yA}9z&<7guiMREEHc}sGz*iOEznUCTDH<;pMrS%1 z#W52Ku|G`d4+LgnAvTpMRvbxAHyx!ICh9RHQw-D_Y&Wq*ftB$_>RsUdzsErR3;g#2 ze5CHP$A5hG{EyFG|M;BLfM@Fe@Y!GYX;k5pMg?16Z2tYBTicw$YN_|mAYH2E52=!3 zl4lJwsw zOilg?Oe=`PT#jj2#Kzi%U)5p!P&l&akybJyu)?L$q(0lO6zLeL3xxmb6#a*Zd;h^)q#G>uFJGl=lR!aZJit>-w0y||aj9Q7K zPA+R>tC@@70hKWiE@5M>CFYmFR;}=Vemu2;KE-S^e7P zUzE=Oq7={zD1&r*fBia9zhY~KAEk}Bb^TggzqZh?1(pl0l1?dDZyMc}EMIZsX=GKEO-9+wD^G?a$wd zO|}A}(M;JjX54}+Z`$E*U^rtt`@g8hU2GA)^kW~`YG5d!7lyFMQnXNSxs{!T=VM&U z7UL^iLP6-??up%;7_Iqes4W)Fp@fKV9KXTg*WeRZEE9hHe zK39$}mg|d<3pxIVf``Q!uNn%Tf-%TYp^&-9P?0ZM%)$6WI^R%9XBjsbQ0Mxm8;skH zDAEwlKQlg!622>-3`4{4E{}2xW6dUX=2{+CE(GNm#`RC^(HQUQ#NB_9=>AoR(k2yk z873X$o@dg2B5pklAf7pg3I)%!cuACNS;Q?bl6={}i4xe7WKNKDv#rb>5TYqE@7P z>Nd6C^(V;?l)!lA>2s2)wuahi3bj{9({-93S^k8r9nW0tN9~C_$U@~tB>8t7S$OYE zlCIO}niEBSU7|?x;7V$5Y)10oE674fFKTbq@9}jM>3$wgcX2$MxZjqLg?gok{^wx2 zrX-V{E=baOX322kE|G|SwHsMZze`$!BFSdh3Zi5*C2Jq!Nxs)XYTsB!?T^<;SL8^3 z*<_+mOeBiS6S7}xD%lL>$xh#cbj4`_uEz!wx79wfaC$UpEe|G2!;-|UNJTiN;ul?V z6XKiF$8~0l|#3|J78%*sF5bh144FS6O^3Tb_;MKa5(k!4!~ar;gn$##v1?t>|e zXCg2Y@=VbsWT$r<(w*O$t~n=&Zr?)mXUnPGdn{=MMv{dus7>^%)|`5hb7B*!!tq6h?4S%BD_jclwO zn13ATI=MZ`JDwwM?`)!km7@3uq!E4SF0yd$I9-dDCOad|bY1e6xT&LwE>xu$jL2Vj zrUniaiurCc0IUcN$h z`sjVqdpxz5{7l@tUFePu{7v!~Mv`Rz2f7^``S8rB=fo{NljM8XqHEeP^7t~AuDws` z@#|x<)bB*8u$kib&84fW{=Cc57Y@>LVr zDbHLlMfX@oU++eoCEaBG$(B#0NWQcn`=j;wt!6fHU-c&X3YM;m^gfSRM0RTG?cqP&*z+lE{V5ll{YZYjD~!f!fJa zD8f;<$WDb|ve`f%haZqSW0k2zy0uZwzzDoblHC`Q_s{wWoP&}+&#eDS*WK|HTYsFe z;VoWEGRbWzs+}Pe)gL{`zE2aPIH0O2FnvanFkhip|uC zWG?G(+%Z(D1!j2waf@P)hq0lrx$)!3esBQA;P;a5H>C|(OIlCzVJpa^H{NuCc@<6e z!}T05dYWz-)hC|$bvo&G{+T=u#33cJn&lj^8NSrU%eeFEo7+LIQzOdo2F>n)>)_|- z!5wlZ1N5OmE1>i1eN^N5VKoy$8LsA`J+8`ev?pyZfr$Tzp*d)--2}>#xGcyoV;^0B zkQ+NG8Z-~q!x!$ivL$DMxQ*S2vtHhlor@|I@5Odr4QJcgKoZ%(PNo!jCmX#UJRjCc zLGZq8b64p3v929~?P4E21?JBVehP&E_7=^ByV>fUK@4Os)6)%N#}0>wJ?s)^nBL2F z90-wM*0Ke}ee9ogV0u4$VLT!`z;5t_LI^v$Kh#6nl(XO+WPjoj#344Dx+{#W?+*2F z_A#Z95$v6%0EgMRaR5iy^v_T~%B~NB>0|6{T6H4X&O-r?vrR?O2XHpN;*4* zoZ1b;@b4X2-j`9_Q9L$mSz#f4V63fKek!p2>Y5bt(?J;`PTMZUG0oZ?@lC4Ylj zvlqVo6PB?-G-JE4PYwWE#a6Bc(bcRUl2u_1JK-`gS9TTBVPPjbp#{`@*jj_&HHV$n z8>YUpS^4Ow<%R|n+!{j?4rlo-hU@3y+|#homlO;l!z$%Ew1bquxUqFHcVOtBJp`#}cExdESJ+dv zF>$BH3oJKXO1r#f4Nz*~n_rX;#%rwz4Nqg1C!q zn+EIvTdy3jBdjmJk`RuudhC&`9{h1uk3Ndk!;fb5_+wZKS~$(>_Yud^jTCf2d76xh zRl5murIN10VVRFVgHmZ!M}$(%<_k)V1#J*|y)F$AZo|p3~ALZiCfmek-s^DvVX%Fj7t89Z@yA27r z_Ap}U;|Jy@z?KtxlrsFKY~wiq&aBrZ5Vx@(XyfV0j{OFr7aKzx=v}P)HxT_OZoRr$Qlz-MSLSKCu<)X|FKM zL}8L&X-G(d=~V`|i6D9y*3!Da)sTtfcz&CKDFXFC!-J>5f(*OdfbB6%n*(sf@cSGX zJ8D?95qifAhBCm;89E-tjh#2RtcJ){!=T0RaNAIgb_Dkgsoo%_8g9`p>XD%a4#xSX zh8m|K^1=|a5ZFh!AGOE1`IV;!OJ<*exC1VWYfa}Z6{@w6MSHt|X!uj7Pa zFxzR}W!UMQdkp&BmZd{t(y+IMgQIi>+CkL1b`-q2&)y>HpPoI0M5B&R&~7@aA~ahB z<6M((J!uUjf9|#e*AA67g3{TAD7~xKgzli=7~!vj0B3}#WPnRT&A-7*6l51*$wF;2)Z)c=D*@h#U!Nk3rLqI@ zHp)GBfEZzpW^vz9W)B-oZ?sy=L1eS_HL8mG`xU}A`T$A_Yp3+@K3kPm!&LVCC$Jx~ zK8<1G5gXeQ#K-KU12D1K;71#-EryKN09y@lIGM&+`D+0%FT=s}z_uHLS?KLBJfakI zr@>(oc)o@n_>715GsL;Tn7?75BZvWpKravv8}94{IASo;%6#20?H)o(G;}%x^_vEj z)|Oj_9F$5ioGzvT+%e=*j(*p0GZI*eL8GeIeM1)-RjG#1d*G!R<_?6ThX!}rt3Ni3 zp>5C;LzzrSJ~e!zGEIgdWg@UlL-8dLd2V6Qij1IC^P3H3?XjF^K{1wed5}LT`+Qxp4H>*t;1--W#jbg8B!e z6`w}%ImQV%o8&(kztUQkYrOsudU?jnNznUhjHV6VH)CEBY%b;GG(_gi1=BulId}FA zcq_PM3v909ZVZH#)!bZqGhDfPv~aj_^V6ZQj_cPRy!G7r3E*wyu1$s`cdi-E(D}{W zyJoPmg*##cww0Sa0AL%p_$Lszb7Lsi@aF2!#J!Vy?Fe-rZbM`6{5T(4vUhRK7r^^& zZY7of0=Wa-;BOB%+XlV8+|L6cvX3*A1aUv7wuDFswGPm6yAc32Xyn(;M8TLaGH6;A_>)b=y z&)(n$M?mBz7kV975;vp>yx-;;*9A!C7UHa)zsuF3I>S9~1^!Ngzt0(PD8N79=HS~$ zK8@R$1mG zUIlR}e;r2%{4#zPZQfk?#alsK!MlwHaV0 z=eHz*w}Bt!1fn~C%LyWz`0EyU@Ze);^lar5eIe<|$9X~0i~mCFsW-oN3$Pu0f9&9R zAAb68aOBH(>H{mg_(VVG`SW+{1KZ6nr{Z@Y??KDXUVi;JV8Q&$E>PdkANhzl5Ac^L zfeYnpP(kz{Kasj8ocDYHUIbsWDTqh-&7+`jlhZ^8E@d^&$=1Wae}P4HJV{4;*=pOADCDrP`(sqk|dV9SJ)cOmH_I8a)?LbyR2 z|CK`V4gjl#2m2thM!0C!zgp4fcWeZM?5YijrfCRVig_VDT_(9Na0eli~ zFT&(sA^BCv(UUZ`kEhr%K8CT*|7#PJ>o zB0?NRQ~F`CQAbD~6-(2~bxaJ~58iRHXM5;HiGi*#79%dE)b4~hs4=XZ6i-)y-YM}u zyssriAp zZ79G)F~SFWk3=IjWqi8GE=5RBMVZ#{OtCFZxX;CmYq*D3;x`&SSz=Omh`bTq;()ys zr!9o~2XSO39DNigP`GIsXmp{ zTqJ>N^(&-Gl<%#SYKS1NmYQ{fl{M0+$Ix?=4#a@CR!Ud^$@Nk(+I?-1ejf*(yR?Iz z^d>3707qM-KWWPIki4%V_|uZsAChrWDkV$jq(hV?oR>b#faE19n2I`=rID{;Izc)~ zCEY91;5NXnNvEi!e_c98Cv7*Re0LCUN)DL-x25THfOJQ?OEu=ZQtOs5mLkom2ZdB= z{!s89NVBOz`$)P$uf=2OQ4@%yOC8IA_*6PcYt=I;iMlRR>gNv+FQgq*u6Zdnr>L`} z5ww$dE&Uu0e{Uq|Hz>T7e9l1Oz4ZDBjD3*&iTFucPD|EjY2!q=&6A2#M)pOrQ}r@m zYSI`yCwVO`n9g$Y7GTTdD?Z>YmtANrULnWR60%BmuMYLqa$Iw`b(QPU5uux$FdAT; ze6%J+*2_bDp}tWz(9wds+_V&IZjpPIgg+0t(hTsn$uTrDc*%N6gy|!)Hzh{r*hU6fDCy6Eg_k5P%I>$%hF_6c_n+$ zyOJe)76tZ3wmbuPE1$Umx9{adO8q{_-gHorBL~x5{z>jac|o3BApo&_k+Z(Q<~Moz zGhq307X$Q`DlJ+-!C4tbvA8G)=0b0|GOIXDuT-!?;u$Hgegasd#IFEwRaUNp`dY%y(o1ml>(zxJJmR2)mQz1om3Tkroo?9>r;9jr>0WT_naCv4&b~R zJ_W`usxRn-?~=NyDv0rF&S*#`s4a>CTva{jjOCg--v|$hYJwYrzoBYo=-pB$Q}&yr zRxm^IjvBERSh6~rcq!^unrZK;zZHRcs(Ld3dJoh`sORwy)yHFiJyQK>rhTG5)F7Fz zKBxi74D}rCJD#cK=#_b{UYUYUexW{i3(2o)eiIOvYsOcQbk~Z90NbPuqXX&9TJ2;I zw`hCcLBT`o<^h{qH7^HX+qB{}AmXVF9s`B#nh(8P-dZjtmpioU)c|&Cga3enkM^J% zc)r@0#fZ~SQ%(chrB%XTEAhLvg|tNs)QT>ImA%?f8m7ToE@fo#nvVwW30jk3@OMRP zOU16Mn&)eXT+?FPL;bqeHwajwc6BVQ+|V}A@x)E7#Y$kew8KMTGf5jjL-@9~?zw8d0>&(sc3eebz8?GfIC2t2Uc5fa-r=f>@1}v=6GO)Iht|dVH74*ACwVZk^S19#D5o z1Ss_u(@R)?8RaQIc}#+2gCWhpZPd`d^O zTa2O9zvXNEu^8Vfx;-RYf1qMcn-V#=fws3Iz-`yH8R+f(sJ7Z6wm8}y&nKYW>31sM zcK*;2lD$@t&0nuk!FAHj(zwq1D*<$8wj+Jsu$GuT+hp~11Qku6m@>#C{-1*-=LSz%a;3aHs z<~O$j*uqcA!>xMo9cb6Em48I3+BV(+e=3AMQX3iqUVI4}YukDALWp?tRjDs`@GWWD z+sQwr)X9gxGacdj@~0{Iy-KoIXmQ`BC*g%s<)# zWBd4VRA<@G|3ZuH0Y0$@cp?1wzAzTbpNa(3R0K!Vn;-oVrtk0uni7-w zePOuUySy)LL{s=)I|1(T!|p@jJ|9De6RG^4UXXmi|DwWJ8Xuko>>=Mo0``cX6$8gpBMy` z!g5-O_Xu-~0^2LZ)`P!bp#m+vM}=xf@pEg;9MFS%NUCG8C=|_TM3LRp?3y z!!@DLBoMC)7iou`D7;t-g&V?t^NCPqAsnR( zvGlRcQ^9{IY-R{PG<7`_66rglOrd=}V9$lT6VQ7hRBa9`FNF=X?z|FCmWD`{5ceze zUJEg_%4Q2C=?v|Su&^_1z7;~+LhqfB;R-A7g&nlp_#jvpf%s84aS4(+f-wI3L)6xS33<}O~Di5uG@_NNWHhu9zt#I2(C z64*9z->)$3DV{0|qL(=KJlt*w{W-DM0*UpUl(VO21pbKQ9=BMIQl5SO>yQe zDBKd8gh3%mOxy|Vws@JQ(L3VEUlByIc$1cpyP}m!y(wbjCD6MkPVfcszPPtDK&rTd z>c$Vmzds>}G|{gE96c0E(ggoV4Bi0nSUlJr;EA}iA4Jl{c?)3dshFAzVutuDCD6~r zKCs{mUj1-L`fMJl%)#O0Da3L&kKrk+O-E2Tp} zLvNKdnvT_1OC9>c*cz$XN{F~h@wC3XNm@sUtd-72fw)dObQB`%rRLRPdV@5w4|p4; zt|eg1U0QPi*d}QY&6t~|{dDZOMQTr7AjzO{zdUY)`4xHxRuL64bX# z_59$^TdGcF^&QgMRH*Ni5)T6Nk^J((^Oe%71NcdMHiNfIdQP=yf2lH6c><(HO~BhN zxloZIP_p0;0{I|mj{{8akxmnFuartv)?n$K3yAxq=P!Wmm)6n3en8q#66zt+@=*vk zRJuG19u7)HDe6N~`tKlyNoAHnBwV`BpeG`vHB<;XEPc+0`Vr}O`ug&y^v6wrW0Hdk z(~(jNl~<2T4_<&6BaPev?1Yq28+x(Q;_JXpOUvlsB~I!>JJ2&y@yXzwmwb8fE=Z$u z04_=m=>vm!$&tP$NsxZ&iy*E@y%q4TONUt8W}@_v63-jbFi(Ia>AEizZcD$8$35JU zLTGkNkw$L=xF_uj0k|(k3;{1ydJ+J)4#U+B7_qKD2^Drquomu;)?;y#X(zr$ylCrIbml{VQp}Nbs_x zJ3j-wmWodYFIyU+B8WHA!wbOPN;5Nny^~rzgopQ%UqyKMAcgz|V;`lA3jjG%TBemX)L+QOX*t#H~AqYvukCQ z_6Y0bbSlfPmp{=qW`kUZR<(_CB|4&Umygpju}L2H0ARB`nmS~Q%*6tD$fFI2Wvkqt zwnE$FJE2hbl-HVJ(@TD~0N8ffpAva*xisx=cE~w&=(|(?WdVSX+;s_nubg=n{`}-Q zv=!VXN9IAnUv{hx^#FMYKAPZn%luUE0_7>SU^+;v6)88GEf)LOzpQ4g!`bx0?Yg z&*fkh#1}H^e|W3pi?rQ&CD(fdEK4rd61VbNE_xIq+47`Y;JuNz(i-_b@J{68W$R&Is@==~a-?iq*(X-*`lf0Hzr_XXWeXyD)izQO}@PoHuL4GeE^)4ac(fSRB8Vldd^DA3|LvFOqmM>7o{O3^2?R+^u6B-WmGn> zmC9&ZEmkQTXmhYyiCqH8HOk?^&~sIkose`>V!Ocfdd0aazy>8sUuBdbG^92ws{>(W zi!$~UfQK@Qii4g?Z7S$^Dc#D#%68@HBk1i^O49iBQG_)BzREiK&ck1M)ei~*$}e<8 zvs=k%4-lw~q@^cF>E8sBdzAKrp}tRfdkd2Lm1?wOKcKvFgh+_uMw3;j;(QOW98_vj zXB|>z%!cVO<&_(-aHZQP@FJ9uH^2@nTaE!cqO|!HR*ov;p25R0Ws?B6kxKb+@Qy1( zY1W8R{-XCGT3JN<@L1&y1BKJd13wVsl%$>jXOs^`z&op?ZGe??N~KtcoL6Eg&$^%# ztA#GOsJv^7SS~3=sBU#xX-5U>c;#hXfCRCeh++9`fj zDl~?_Z^|P2P$gf9&jwhgzNZbGi&|nJc+1raX^>o}?lpk7ULBnPM;p}oGDJ423u(=9 zS1(ejWs^F+CctL(HSI;Ws8e#l^H3`_0=8A{La);{l^+h^sSdaf;HBQT!q|4TDD5V^ z)%g+v+@bb92ECo?;z(dV>T!BFzH0B~Fzu%fsfCbssY&Gk{MBX0K@3n0L!iD}opc*E z1J!LlPzX}}=~nirzJ4I?RiDj=0;UHlyzEn7zXor=y2%&dfclc&l@PUyGpvNFZvG%1 zRK=x`JfynrKoDW-d@8zytG$EKbrI?~`q<{MdNdW-5%pj_NFG&NQ6_LqUE%;J4=^?Wb?5%ju48sY5BUJ8DQ4ZY5cr z)e2Vbs#oc2lKX0vPH>y5K5qc*fjWmOCu!=G@i6^R-A>8uBlXEBSb418>jmBub$3xH zq^oVF0DG$T{t8}(D(?n(rkN;)40_L1=X78%)XCJJFV(>#fW1;1(!!plI?xLA zT5Y@;*ju%~4I#Z#=Ta*DUadx@fe-31cj$doTb~2SQQav;{iJT9`}?d;%L10GibG&C zPhAxXg)i#Cc?jvNI>!mbZ|eE|kjz(CR043)CK#ZwRP&)a2ZSYIDU8DVc2$8vJskAz|X%UqEtksS@2Uw?laRhO_CeueO8?=;~ zAa2xdbpmkLH0t?H+FV*!Hfu#FH{GIbqHgujoKq3RR;~9?5VvVx>CbOGwUtz=_tJ{D zfWPh9E?Qo^wI-C*?9isu7Zp3TyUCFB(e~0>?5mZgf$66$-42_(v=Ov6`fHcsp%wTG!J630ix4 zI9Id~Kk%+<#d<>Fnzq{&#;$88Gl3;)Kf3_Cq1CH^;BRWTs6=y18`%ONNh>lG#M@d{ zGD5ney{!$K$(k3fad)*7R;Z_FYoj1?Py6e4VE472>)`Kf#hQ?OM>JRt;u#6OV{2}w)RvzM)^dBCR5J$Oxs%pdYKwdobgs^t(O73 z&}tQh`b%vajgVKGYc_~k+Ba_yUu*3~0L#|K(|~@XHKu{`R@-zBR^DmBy`b=3i?{>q zgLZ&}!bfdPKCm2Z`T&4W+P-E`|E%>8A(^W!&j*&Ll_8s7wCU49{Hi6Ehu$}BG@ZsQ zHJND*cQ*Obx#=>Kcn@w}OxfgUx#=FgYAZ}tXtr5tGSvWBWvW11h1I6a%@A2*+MEf~ zuBJ-U!E-b1`HCRcn�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 QhxCVRW6^s?0T|*e#=Ct85 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%0A=1kvw#NS64^08c|Eu6hTwAq}wduTVHk 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su new file mode 100644 index 0000000..6ed4c17 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su @@ -0,0 +1,32 @@ +../Drivers/CMSIS/Include/core_cm4.h:1657:22:__NVIC_SetPriorityGrouping 24 static +../Drivers/CMSIS/Include/core_cm4.h:1676:26:__NVIC_GetPriorityGrouping 4 static +../Drivers/CMSIS/Include/core_cm4.h:1688:22:__NVIC_EnableIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1724:22:__NVIC_DisableIRQ 16 static,ignoring_inline_asm +../Drivers/CMSIS/Include/core_cm4.h:1743:26:__NVIC_GetPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1762:22:__NVIC_SetPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1777:22:__NVIC_ClearPendingIRQ 16 static +../Drivers/CMSIS/Include/core_cm4.h:1794:26:__NVIC_GetActive 16 static +../Drivers/CMSIS/Include/core_cm4.h:1816:22:__NVIC_SetPriority 16 static +../Drivers/CMSIS/Include/core_cm4.h:1838:26:__NVIC_GetPriority 16 static +../Drivers/CMSIS/Include/core_cm4.h:1863:26:NVIC_EncodePriority 40 static +../Drivers/CMSIS/Include/core_cm4.h:1890:22:NVIC_DecodePriority 40 static +../Drivers/CMSIS/Include/core_cm4.h:1939:34:__NVIC_SystemReset 4 static,ignoring_inline_asm +../Drivers/CMSIS/Include/core_cm4.h:2022:26:SysTick_Config 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:141:6:HAL_NVIC_SetPriorityGrouping 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:163:6:HAL_NVIC_SetPriority 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:185:6:HAL_NVIC_EnableIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:201:6:HAL_NVIC_DisableIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:214:6:HAL_NVIC_SystemReset 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:227:10:HAL_SYSTICK_Config 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:256:6:HAL_MPU_Disable 4 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:279:6:HAL_MPU_Enable 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:298:6:HAL_MPU_ConfigRegion 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:342:10:HAL_NVIC_GetPriorityGrouping 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:369:6:HAL_NVIC_GetPriority 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:384:6:HAL_NVIC_SetPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:402:10:HAL_NVIC_GetPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:418:6:HAL_NVIC_ClearPendingIRQ 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:435:10:HAL_NVIC_GetActive 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:452:6:HAL_SYSTICK_CLKSourceConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:470:6:HAL_SYSTICK_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c:479:13:HAL_SYSTICK_Callback 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo new file mode 100644 index 0000000..29a68e4 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo @@ -0,0 +1,15 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 15 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 10 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1151:13:DMA_SetConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1213:26:DMA_CheckFifoParam 15 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d new file mode 100644 index 0000000..3eecbb9 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o new file mode 100644 index 0000000000000000000000000000000000000000..71f90e09f0eeb89c97e3f1b98617da63d352b7cb GIT binary patch literal 722892 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 z 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 pT-RBdntsip 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

  • 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

    _)CKY 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

    P=!y0_cfhYL<+|;gWUoO#!N*`Kt1_c3IED7uGmW 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 Ws5x0P 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su new file mode 100644 index 0000000..a5b3ff7 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:154:19:HAL_FLASH_Program 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:212:19:HAL_FLASH_Program_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:259:6:HAL_FLASH_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:382:13:HAL_FLASH_EndOfOperationCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:399:13:HAL_FLASH_OperationErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:431:19:HAL_FLASH_Unlock 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:455:19:HAL_FLASH_Lock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:467:19:HAL_FLASH_OB_Unlock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:487:19:HAL_FLASH_OB_Lock 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:499:19:HAL_FLASH_OB_Launch 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:536:10:HAL_FLASH_GetError 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:550:19:FLASH_WaitForLastOperation 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:610:13:FLASH_Program_DoubleWord 24 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:644:13:FLASH_Program_Word 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:669:13:FLASH_Program_HalfWord 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:694:13:FLASH_Program_Byte 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:711:13:FLASH_SetErrorCode 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo new file mode 100644 index 0000000..258ec29 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo @@ -0,0 +1,22 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:284:19:HAL_FLASHEx_OBProgram 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:343:6:HAL_FLASHEx_OBGetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:372:19:HAL_FLASHEx_AdvOBProgram 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:428:6:HAL_FLASHEx_AdvOBGetConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:460:19:HAL_FLASHEx_OB_SelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:485:19:HAL_FLASHEx_OB_DeSelectPCROP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:951:13:FLASH_MassErase 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:980:6:FLASH_Erase_Sector 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1030:26:FLASH_OB_EnableWRP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1066:26:FLASH_OB_DisableWRP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1099:26:FLASH_OB_EnablePCROP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1127:26:FLASH_OB_DisablePCROP 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1160:26:FLASH_OB_RDP_LevelConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1194:26:FLASH_OB_UserConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1229:26:FLASH_OB_BOR_LevelConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1247:16:FLASH_OB_GetUser 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1257:17:FLASH_OB_GetWRP 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1271:16:FLASH_OB_GetRDP 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1299:16:FLASH_OB_GetBOR 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1309:6:FLASH_FlushCaches 3 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d new file mode 100644 index 0000000..f7a6dc5 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..b169f08d26a65253d9ffc92554842d6c53319e53 GIT binary patch literal 721568 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

    pA@NNx^=LN>= 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su new file mode 100644 index 0000000..75051d9 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su @@ -0,0 +1,22 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:160:19:HAL_FLASHEx_Erase 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:231:19:HAL_FLASHEx_Erase_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:284:19:HAL_FLASHEx_OBProgram 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:343:6:HAL_FLASHEx_OBGetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:372:19:HAL_FLASHEx_AdvOBProgram 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:428:6:HAL_FLASHEx_AdvOBGetConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:460:19:HAL_FLASHEx_OB_SelectPCROP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:485:19:HAL_FLASHEx_OB_DeSelectPCROP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:951:13:FLASH_MassErase 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:980:6:FLASH_Erase_Sector 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1030:26:FLASH_OB_EnableWRP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1066:26:FLASH_OB_DisableWRP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1099:26:FLASH_OB_EnablePCROP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1127:26:FLASH_OB_DisablePCROP 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1160:26:FLASH_OB_RDP_LevelConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1194:26:FLASH_OB_UserConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1229:26:FLASH_OB_BOR_LevelConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1247:16:FLASH_OB_GetUser 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1257:17:FLASH_OB_GetWRP 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1271:16:FLASH_OB_GetRDP 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1299:16:FLASH_OB_GetBOR 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c:1309:6:FLASH_FlushCaches 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo new file mode 100644 index 0000000..bd71627 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:94:30:HAL_FLASHEx_StopFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:111:30:HAL_FLASHEx_StartFlashInterfaceClk 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:128:30:HAL_FLASHEx_EnableFlashSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c:145:30:HAL_FLASHEx_DisableFlashSleepMode 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d new file mode 100644 index 0000000..30fb8e1 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o new file mode 100644 index 0000000000000000000000000000000000000000..5e2f472a3cc90f4cfb7e1138d0ff7698dd8cd4a9 GIT binary patch literal 710636 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%0D^@R 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�TfprSlllh6OH7^$u+*GnhkCMbp4q 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

    CPbuPe`RoHKNxfpNfMC;7+q2n^>rc# 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 aa1pc0QHk)Zwt?*E0!>1rcy|DxF6G_K%>u z*4dU?unlTo@rGPwse-A0w%bvdhp{<(e}LRsn=7qhuE0?h9v+}{9bbUWtvPvg@8taP zd$4{fh|vv0AcSFF+S9|%&TL2MkFX6PRSpnR1TIXLAo8kxX?vU;<;B@Kq(; z=P}!PgB32EKch*R9?39}e&Iwof|~u{$H!QM;wsIzWf=Fw*M)?P+>cmdh*wxlM-I2W z53Od@@W@oz>AaH2)tXUSs1{D#7FZP6<%VMM7y!)+O`q)v#rW;n5CPM}Ot6c*)hF)Y zRpzojx!qu9S(%rJY3zJ~ku|{1W>5F*>gKr0!!!Mh+fw}^Lo>GrjkqUv%5A84v^xY^ zVWYx+bznzJAuJojb&d)9@B>l=bUdrYe1pW9_;$E}Q2n6!Djxr=(kFDGnzb+*T*|Y( z%2rZ=)Y&R8h-U>Oe0vRN`I5M`5l0ND$%&X;Cj6!ZN*`3a>+sHyX3=q4+k#j9vpufHal~(sfPm{`C1f zaAq`K-e7u`C`rj&Vp>WazOnf!&(^$Ewefk(M6jZ4X$w>&Rgy&ztte0DmI1SrJQPHV zG?$AFN*Jv>M%ci;h$Ag~>Z_u|If}fZOz`67V$f~Uwut7+miXOLbY5%4)FJQtLjIYo36p7GVb8y^o)MHvQ%bmM{20&{C)$8Tq^$Z*j)J~Lti z0=<>=%7SYrAKw4@?RR@m;Uo8eo7*XD^wZ8lc$>{t{0Z7ggdRAykc0@{lR4G=&l+CH zvj+KE(=CkzHXFczLE!*J3s&iPQ!Hx>>KZI7BgQF%$w<$(yFtQl_vuGbbiGrj9uTS8 z9_0oaw7_ETq=!bn5QNhrp|U-hADQ-xXYV|}I{R{pPw%8nMb(|;naykkO$rW6jv54> zoGKU{xHyH520zp0l1dAr;7rnZx)NMl(%6jk?)jj&e6DO(O8Tm$Mp!WI?J#nJ?Yn=B zbnN5t3IAVwS>;&J#C39sv!zDU%}Hr#!m~;V--T)-(oCxE#nqBU>EXOrklzNNZ_NtK z`GY~brwOc=8R|m~3f=zv_Lg2`+*aLY@x=6A%sjDQNllI@6vPBwv51r5M6dC%Cm~S5 zfx%%}V~Suk`~}4hG$8GPcc&fLd#c=D*fue<&vQ5XnAj%6&+zCoPkwsLIgzE?IU*Z( z1H^@hHSy$&?y}4ECw1<)E?q&~yAk2;_%7)NI!wTc3T_-7!yS3N0;*3g=@1nv>uaPE zfFabfINQ1P5G7i$61^4zoE(`scTslT9qknc@VBKIfO``(EIV*OPp!;Y{!$FT{XjIu zcEq}QT1(DRB@J3|*hy^z_eS9=PK1;Z94SsXm^qxE5Eq5;fx*Gol_!FY@9V)Z(-`X0 zJsHtU7EG=p=41P`oeZ_0J%gr()P2pArec*r_PBpLfJD=f_W)UNZ?889Kf+_|1lR5j z+pTAu^vj&dKzBlYkvDH@(M-f($>8xNC=HAtis>ps?vqO6fsXnxY5ct`)DzSH$CXbx zx3wflS_$9|hHY_UQe@E}-0f&`6FwD^NKYpXBnFzanQfY_-VU)iJOoPohm{18LcQ7Q z`@8z7?Yc?&yUnEF+|%0?1Yj$*oP{8tBy!(EU3i}N_3jU|<-}&)e*2t*FMb-ln{DDU zWor-gkyeOX73KtRYq5<(L0E&U30HU=CP#54iR$E3?85aLQb7uS ztoX1r%9k(arma&VDF(sfAeapFpsGpl=lX{!kpX>Y*o;(@s1{y0VvZ1JW1x1CZdGdJa z!bN8*PAbcir&O$?2m_2wx3UOQ&~v>3OzgXn1v%qXrp0~4Tx+V#OL4htO=v+LQ-v{7 z0Kl6V(ue=duUNSRaHfb!0&luoNm*iN6_^L8pyA2aNfeR&|Ms6#-4iYjfcoIl6Ulgh{kSJ<*ykEasLqd-TkrnZKuyAYxX&Xd2@;D8Qn@eSeG za=yu?Er4~DGN+Rjy(}DkhRkANm>3yP-CI0e+8JINUxKqPj4wU744VLkjf~qA%q~$7#fqUwr7g?&$KpNvx)iHRJb*Q- z40g&YaV&vU;#uA5Eiy-fxudpKnB*qJ^#uYI24xF_7j{RP`6Jg#-Y>Rw5Ib6&$q6R7 zb`a^w>5CPdschznnWW2?r`Oysi>t}AlAR(*`W=T$AmqYSA}^AChjl;0^t!YwA#YN8 zg!&#X^RB{Dg(%AnWx3tW0@)><7zJuSa>rCX(w+~OgVQC*iSzG14KaYKi-wk2WiNMJ zFwaE+ct?o0{0{?(d&a5S*XEd8&foeUk2NgDtIzkO_DB{7mjYi@NT?# zfo(*`ZU^8RDz75%kF?3BOC+;VkT;zy2h?TLpAv)06s9ECU0`_%)3$Fpcu+L1kD{^G z3)}yo$9I>i1FLo(vZ>a~Q|?1cwF>fp8j|vzd?cq*nT4uDq-fSk8X4eZVcU^Tx&R7{==#K-6<5Mr5${O*S=(k%Q?MS2B0yQFe#bHx9 zDd=I{z+rXa^3}CO@8Oq=wbK{DnqkBun=TnEgh}!&G@67Gn5U-Z@}YKiLQv-V?)1^^ zg+W^B=P{$bb*1<8^SR*u_O&o?^c|OhCvy`V_J4mDP0D`KSu`BbHr+T|QDX^4kor<6 zrNadT7=7?BEshw5=`gVzqBEY62O(X`%tPHs`ibm9(P$m=}>$rRPl)NaCZ(`(!evnN0bCzY_xbvA zx!%XCrZd2MRgb8BBL?x^b+c#?S$)tSr2cCq>k?vfM9qna>-FYLp%^6jn&A*9dVA>R z%(!4a5q;G!`M^)8k$k*`K7hw2_((edv-9os+%k39Z+(q4VMzU@g-z)%MDgFfz+Us{A72HJcm%}(Yst9 zuV{0NRrG!Bc-KNT4&pC7MfDBT9Ku-tXHS_(|=xT_jNMR_F^J>D!3Cb{=9-tysnuRy4 zS(WAHh}zkROQ9qyHpHm;C0y_6!PwU-)W(#T&qHyg#m&%i=R!k@?RH()$ihGd%ui-I zAiWrh2o``4tqiKt1?vmAJH!PW@5>#v)tf08o8qx?tt~oNQ;c}(M4M1X14(0NKWfM zHY7VPZ?7jWpkk}gl<&g_2FTuqeWx5gvxu*jI?HHrgh7PrE`?1TX)j}vk!`zkEEA0q zsGcS$nBeF;NYiH5S{-3-p%Wi{DPbKtq=)BlRN|C)^M-!$m3_VRh->Nctpa(7Pc>xqN*Cr0B)+pA)Kzv?#FvbiHiEvmHExWT2M&i+}J0m94fdK zhfg>jfs&n|<<`hBHr|@^?gREhbTXbT>ENNj47Z+_h1g=K~&d<%to3#f%=a#35Zw#?$ zJVlYa^Ru+)n|9%pMi&mDL$_tv_3+4~Knp27DUaO~9Cy5vOm(RJjjJ4F{Oj)keFO*( z!XlQR?|=Awzni|ke~rv#f4lqm$?}!~hWe*H&_@jJv8-~e5+3|*YH?nb8)7nC4eZ$W zD}Afh3)^s~gj+bt`_{99Yv%bN@o-E?T_I)#vA(duLFaphxMw-=vDm$9pm^#8h|Oua zri_rM_2mkOJ`%GP+9<6~>4Ih0RJQ2LT*HX^t_sP9j~t>XpQ-?WGbR@+4%XHPZ}O~y zzFIYKi(8abNsf?EsLWoiAPXElLpvUFyoZ--K{a78!omD+42UxU&`?D#Nm-TQX}=(|(};VBkxcX)IiM(&H%#SQYD)mvA{1AkP5P&71)M64TESaHJ;wGXB>LuVxxShJ9bezy ze|-C=&-Zt`-NC^pRK9ro;r+qC{AT_7`}ybhZ~i5xj^;N4<(?N5sE^-%NIUS{#mG2c zpwQXpn&}`drIiK-oq#mS?6g-i5Y~nAEL$FUiRi;x>oti((_eAL?>7tdrEX zFx>ziPnMgjC30YFeKo8k)G?xGIKhY&KIv23{bzHQ_)RA-w)%1#B2YJEd5O;de?o=vHy=JncDOUiv!W2@wGQrM_b&rafi0y<4P+pJZg8Z;Th4)976bo9;Tu~_C$1ZP*5li zMg^>7fV_$M5Zb0^o`^JC(I~&3Asf5XY5Cw(0nmsZ8@|8jTdS>Tn!{1cAl5KFh?0UwK0(u*{FxmQTBvRb ztUBY?Afv#)FHt$Q-^;(-O;6!cB;VlH(BA-cLv_6R@qIYxZFSO+l_fB$-$JZmyccOQPqPrlUI&$hp@< zy7Yl_>z8HEpSdm4shW!jRS&JZxI*~rh)%|Zp4lLNsa0!0h85VAwOvgrPD3+V+GF=o zM&lR3r-<*NVIxq-A5r$Og^z+UIfHq9XHLUgrZ`6yai*{kS&#*cmrtzN!JrT13yWQ{ zMEpHojRnBS6ZT>kQs)5bk3)9Q->kVaZdBTOWH%c#sh8a0S(SY==!4e2@Y>r=5^4=c zNQT)UtD#sTZsnUqnQ&Y>|3nHv8_^(sJVG!7B12!&i_Jnr%7(N$_(WTtDSqu)pSq7$ zD9r`TS@NVwn zab=>?#wX7NkBi8{$rB;wj7M#g_qdt(hk9!Ijk%X!6{JPC$IwJv0HPhu9bb=1By>qk zxpwIY;tOnv6-nOvwKhhjq$4njXbq+{P)j;!7_VG9?ZzR)cD;>nAuFFSFk+NaySl{@ zyseXw=4SPB69EJPC^c!#aoUk=^`OOoWVr4M*&KS1B&Sm+f}6EjCNGYkfqV3HAW(L^ z)LD+EwmmI$V?xDi;KF0UE#SD}D6?a|T%93baF$#d9L|!|9bx*KV#ftS_JQpK5UvP2 z4Ge36lw!8EQ{4u*ya5Z-(IWTt(3I5{)XjJc<6A;q1~4&>2^xZ{%S=3J4k+3+y(Qud zkBmy7@F0%Y4&|dmOOkY5RkyE~#%QR9I#h6X*8*6sqYJRqSr62seCva!kF(MYSKq)h zP|xI=>LbReX~EUO;VG%gOS>Kwo8SG?G%xPL%-aL~V5ts#^;5Eh=#z*ru4q-zRH=Ej zC@SJCS{4FGsjsG2OA)5g0gR8Up>BMs0^X)QBa!!&|0KvKv;oIJx2 z?T0Di(*;!V8f<`f!_dd??}7*#Y{>U_ci-;*{^l>QKkn|k=PF&WMJdQErIVDc!u?nX zF!gv(#nd+-eT`$8SFIj}IjGXE9brsavc>uIBs})qie6~c!@TFo4Bfb=H$Rb59SI%e z0vqMFn6VjVb(BQV&I&U--1vh~(lJrr3B=`BV%#8mJ%RM_8?f_=7Jl)`vo(DQ5(ds- zKr*q;@v*e+qa1G1kQGUJBLh8vnlN&qAl9V|8={k8VYdIsK8<16nXe#p!g=;`3XoH|7KXw4C4@!a^h&a9S9o-H+2QmO5s-tT;W z12IC@@o-@UMD4J~!-bXLWB!v#5c`<|zcUw31NZgP66S5mmzW`QQ&a;k=sQ~$V(^-z*wc(crq6oWYkLP{<23-{(4E@TzUw}W-2Z^jy@$aX!x+Q5E? z=an+eo__3R`v*i~1fp?-C|<)>AS?H!*Q3A&6^Y=<%x^0aK_2Vt$_9O(bLGH{{iYnz zux=0Rk|;;BVA>QI2^isUzQ%X%XR7+Z`h>#hm8`=@&X+jp37eT`i@(BIyt!6Hy!3av zHan{~hZP`dqg$dGJ}nHqy^?eR6t)>#4-~}?WvpsbyMg{{3i_O^DW9e;hiCclM4~Ic=7IJI)gBBw>}>8%(LWj!Y)U@V~36 zTm#giuH>i3Ed^Z(DB}Q5d`dlJmqu|toS~_butt@HJkfZ#ZQBlM#L-ieMr$CB9Emap zc81_JSxh&uCOhXZ9wfR10!R9{!9IXcBv>)lvz@KmYEms!^MQhPj>|qD)WKFQ#gVdE zT_6S83aOHzB94*3eYR-UICMB=`#G{H+If|mhQmjfYgrGArH}}L?PdTBFVST&b6(@Z zLoT?usnmlLtu&++R4c2*)sd+S?ah0fFfMBIEQHrQ#B9@oV4HR*Rtwdfm6GOkd~*?k z$%tAxi$1YE*cI3?>QM#LQ6j_+;hD6}zmdmG3Det)vxj0-m6ccxT7uAb!!r$pJh7m4 zH3{-=(IJ1?YKhcLJ1hqC;hOVp)s&aG;D}+&E>*F@fEuh9sNJ{Mhz}|#c@0zddO?@S zPYt%MzN@#3ZkAk0-ykvu8)oC97n4hyWpm?pH{2pabo~-3e#Z3AV&Wck$nzzw1Tq+V z(MtdZ2ifMrIQQks#Y8+np)<+$4y6E?Kzp0>W|5J~L3&TSp^n@AbZlmqsI(;YD%7kH z*Io`a&uJI4L|tP3yGB9->!mzS7*m0;p_kXQs|iBw;14w$4W1o`R6<-VoT*$nZCrjT zbyG4hQg2sk$U!ElU7&c3rW|n1fSbC2kv>N`4{!v0JP52Ymz83*hxs6QhbYmk3fi zJGvpUYU04mF%`OsE4>jS|GzKUn*b&;XgsV(DYT zc!*KZLz?b9VZvAUb*eJ(TDD*dRa#vmcz$t-V;`y4lwUqF5cvQRdNJvA(g=x~l>5v) zNupX>Et_UdiwS-pYipl5=vDDsFs>jgT41+au5v*OyHpSHTTo1bj|Q9hK%%vxg9ge| zO0KPNoa$&S8=!7T(~2LI)tO9q#;kmvSkbBo(9Z~(0E>1q@3lQ23>AzM%rbyl@L}7*7^Y0=hqU-=`E%Qvjfnt-Ebm*-jfsYH7Ul`l z^$ym7jGiGCKN`lSUnOT zxdB&>!9}C6DsqfaJd6`6uLma)WF*6qz=b3t7qe8T`tXpR72C>Ol2{HwG)e)p-DeQyjMM}5~8lQfN%&``g%~s89hjE#uwMK0bAq{cD)Kn8i>*xu9mCy+4RbFHi{|N=>UC{JFmb8&K&$P z2v8fdY*Cx2w4BdUR!(|h@-%)H$8b7feYq~$Mzlw^URnlf8Rub4fZciz{o96C4%T27wVl_pMpWjVPe)nY+7H;c5jE$L)RHv?d@s z_>4k~gaK)eP#Urbr7hz$$%7`QWld8K=7lyG=ge7I5*#VU5g4D^Ni>@wb+ov>aI+VP z>p(!Tp&}V&ZL}~)d5wp3safKe@UTjV*91B+@WI8%%R}z1L-(S}-eZsfu|w*mHg$kO zw8+SW%JQ-Ow4?=LwaxM_t9HNXJu4iD$Gxv7S1q8AAgQs;1GyMW73+niv`Xz-W$2#R zph<$BaKl_ec8-$b(BB!Sp;^QWCyTF?`4wkU)PPr_@$la!3c#qu2jJ%U42kXbq*zqd z_1zwmJT2gBnRC)prkk;h~bX8B?CTY@`R?o!#9}-hFuU*YNKC=)20HNI%Z7N+{nY)~&N9VgiI>Aei~t z^4ZsZazqJ_r!LQyB|M&@gopE-s2LlpU3*9npp_N_kdnqqb5MqnLv)2_>PxV=4PJ1! zAX+~kcNr~wuhUf~1>OiPbWdP~@;XmvP-jCC4!&qNIR4G^PmWKX9S=vxPfm{S zzCIcqUpS9oS%KVn1&jg)?r-zj>WNjbqzjrL9IDd_m4c)+mF};z;mG=sirZeULbe?7-6_ar+nfj(wZ z*X&^Eq6^+)CeLgFZ5m(#&3CC6FX4FbzkP}YRht=8^OH#ijTEOo7I~2ZX0`{3S`(wN zQeZdt$JUvhf%6cgpKh7DOO5~-t2+X4hEPzdH-if%SCwwFCKviUR969y5`@dOaeX~} zHWA5F6pxKoWKA>2j1D#0*zo^c^uboToC z_e>7|)qr>EF3mfh5l0(8Uk9wIlZ}0{i7&UYCviwb5%XtkvE9qxn16jG*lftO#(kUG zw`|cq%SjK%pZ@WF^6syT_uBX;bWk8m&3KG5&AXMl@zdjGd9fXzK~5Q8;oqao$HItK z%e|ly$vlp)`EQ%B%otr~d?Y?FbNzlB*28x_WW>rVG(;LfU0EVB%VsnB%vEDXclQvD zLI5!81{o)NEEm<~bc&dm1`YT15-N&*g#Kz|l$cV^k1KF@m}zuU%zB<$ zCPGM3ou!60ywi~es3KxcrxSbWFq!1MJ`X;suF%5^4;v58 zxG)@&5ty36n96;Dlq|w_LYm#xk`ija)~~S}iJSQtqZnt1o;f9YR25nc}dh zLD|%!L{BS=P}HXwxC{oOXZ0#5WD+T2{P{4)}W~{KS09G zgt(qOE}7V|PvBt>)>0|`_I7hxOL%iA6kpT>O)DR&IP@9MR?T?RYh5+xo%B+ncQ}q+ zI?v{QW!j#=;}BO&?dxY6_tCE?4lD=EO77Iz39+FzA;S6gk4{T=I5dsD&nU!~CeM8Kh$28?RY8 z1lK?|6hZ88M#Ts9flUh%tUECJ2)w&6vGkf_qsSe33ez+Y15p)>4bl}wx)M~bi9HkE z3zjKt(BG`biYjmp3t4seInxn&BA2AYohu9D)>CuBD_itvpkHy?!WMbe|b^WztMC z=L{?@NOJIEWg6OHHY>!GZ`Lny_SP?I=imCIx8+hh5ZLrVMNSgtMItHVU@u>Py1)Cl z+uZ%fXZS9?ef@5?zI$_rkj~`BRQD>uA^(RvZIrX$+<*9iv7pyKNFjj~)iwnA5}S@w zx(EUcE$qBY_84czwbTL9rx^*>hN8+~{UR*i{Ot#A4v4E~%#PsXgRy{Ts6F_|8=d}5c zc@#aAltlMPZpseSB+@E0PQT43qS^UUC~p&2D@Gz7B3TnchdFd#g?zp589fEdYG%l7 zZ}qx4+m>uOBRyW!oms%QudY#yWep|{)0JHmsTq!VK4^msm<&U13DKjB_{UjmPmjHp z>J9;ks#WUk(5x3!?dCw1gtq^-m;=I&k4T<+`XWB|K`H0Ko4zRI6ciXmhP5H9Ce6MC z51Z5@kT0^(kqE`NU<5gpAk9zAT$D4gphnn~!7WDC-#vYFKX(FDs1`xwHct<4fx**^ z$fefu@D{m!B3)rppzTUPP@6YOIXo86>P8AUbAB)nEG?# zJFIMpNJ*u#*+QoS3Y1kU(PES;4tz{H<2lUjNU={oJ@QCGk|aDLKG-6=)TW2nF~~7d z@Po^TtXTitGE_Vse(^F?Kl7njY!%F^D@Ogyhe9v=%Re+mT33wXNPqD%R6p~fG19tX z)X#iq%;_)s&=_f5F^VJo#mi9r%!kHE>xxl7^Pw@P`yNX2AiBW!s0>xd_r7($ADQ#L z^VfL6ODN}$b#S@jrUr>L;t-Tx5WxzqG*p3{?sg9WCh9uU3G=Mh4wWZ`XY+~xEJ#c! z*4{ZENar1-*UjO#b$K&~yZiCY-4DC_kFS6D;qCkH;$An(Jk(Q>jaQm)?|_YxGwKk`t`zb-{j(tgA~=g+x_YD+jsYG-|ybM`#-feF%9ji^l1DaV=W6&JCy{Z z<<+K3@_C5Kn|H4v5*JeP_T%gKpT2*aqkSkQr(U}foaQ{DJ5u3|r-t==l%lDd@XyZt z%Cf{7FzyV;*hbdRWXVfc5>;J|qb+-zwCq;H^+ih4knM;}(U5hXWMyM{eky;=ds_ZD zN0&~ankug{-iM35ndpp@s@v38Y;@Ao%n_$Dr~by5PXVKNzA6VmMNwuZlH-DWNZdgo zwnaC(MbxjMOLYj0md7}ArF3PU(L-m|bAydI#si+sMFMvYOd|>hUfb487=r9k{gf^N zHG;%}u3s@qC7xdzHfi8<=suisM48>d;zD%-WrMGO4<(F@LtXQvYtbO_K&uF91+qo; zA|4NVVxCv{lF0<6ht2=u@HdCo=P!U**BHzkyfQo{pk|ay#rR?YM>!~@LtJv=Tmv<9 z$t7myrw5BUinQWy3#PrjGRlBG- zE#sWYzEwj#Qo|ffu<^?^CZ`gjHs|aPVv>q557BNBF^@h?4&C8*+qB4b~k(6qnO2C9ckTPNj$CQ%@*X$~mb9 z6z?5bcGCk|1zf6Cy3=2~Zshs`&S}tBpMJANNQjr~5#n}Q#SzfV3;U$81972Q)R5gm z=+0Ei?-I{}&eiGyRZmZ?MUf`hdQ`DvJaN)V)bk7_G_&QHH=A>kDxhmB!CCqLTk2%+ zHRJf=N1GpzFvHZa8>HU4yw>5gwcq*{+e*{7pI-mz-QD{0`_+fP-+i2Z`1^bLxC@G) z;2yZ`aGM3ERes@^MlPc#H`*}?u(hMCCDv;GNAu9~zHExRO+c4p@QTY72nx?4iz7sx z!{tUtQE{!8a!1iKIC+_3rLtxWoDs+5b4D)@5{A_U(ry!%S7YRo;g1T!*39d;!I34y zX_)jA0W2go7Bi}5kB@SX*O1~%YR9ttg`VUw&hIH>laR6{>rPUOK0D$agN$eI7zXb+{7>s z9Rrzps?t?Xd4*9O3O0NA1IW9PHAd{EUiZsWE*Y-)96RDvJ&cHAt6)-PP60iVk(UPq zKLC~^=BpZJ^pN6|5)-_Fr<_5zR&oON*k5I?Y~i?1(JRH=_(1vI7UV*W1r6a}@Ecn{ z(yBJCn2DZpye|V)i)Il+W7{A+F_bo#wz#yVS6VxkM7G%_rbUhU>`Cs!4m3muvvaw* zGL@Oa{)iMIV(YY`3|OYCm1r=y6u1B=?v7-*I(ucEGA!Ud>21c3(&g@g!P&)`rdaI+ z&#-ok^BA60$YBU=wRMt+u9 z1H|3V7_E#NQuNSwiNk1eFAU35lndR?z=XmV8=TG-a?$k+;U(H26RHj9%z2KD!^|*a zR0Yu%U`QYoHSlyi>@X4~On4(Ac2sWa0&&G97C4Qe<&2*A_38o@uRAU1h53cgPvxUq zJhlh=h#n`fcZg6%LK0wd*zuD1p|avmPFDyTSQRk?iA6->i_9W23kE5GG(Kr+l8Lt0 zx1qGyCCSnWYG$_&jo_B7YRR~X8kay#I1T0JG?cp!7&i{;O_v`|J(pLa7LOqg0C!m3 zCVosI%QZlI2hc?8fcLbp*D8ta$=HhA)9uJ~dML)CvZvjw{Bo zzJW5T8bk@v2-3Ocb%?#YbNDS(w}?_&tg0o^t6$Lp>n15HfbGl`q#e5P3oUt(vS^QT<318yw+D&-LJRr6&i)0*|N!Pp4jSQ>D%8)Esh!#Yx0gj2XK_T$0;7P!{F? z52J^wul(XxkDvS0P$$=BkDvQgsC#?t9zXY~G1l7fp{M@hmXDwN)EH}RrTDo|jd}fL zpBiJWjUO88FK+$#xlfI;)|QH&`_!1%y-y{%6!V}r$pX?NI2jG5wHj0g90+}FMeM13 z_b`D%u`acMNiSVF0BV5>^yp%<;GtdwxWe}xw(U_Vbsv-$6v3&R=6~e>vRz{HAD>@; zyxV>J@ZnxVMQQ*){hVKQm4NitIz%b6;SlG)>D(@rMHO7<0{ket<82OPI7yZqbr-59 z6%v8*ZUrNgWC4R1JK%2FyJrJE(J#GJifQG#6OOs9KsY5JsveEz$3G%HR~wdNR{oN6 z&cdM@G+N)Ox_MqOiin6~=Ql$t4hRs?I$bSHSE`OyTYWPdSe` zMdT?gJw)bwR`@9$P9I=Io*r5;XnTu@;?x!q#o|@y70qg1C5}}9eU4_p>c~VqzVfA8 zhL1GBJU+@%dq!v=Q)E%}JyLW$j{pPPyLIDaDR4*K_f*K|TyMKE7 z-TS+52MTpptX38ad3mzmSMkL5Yj}8h46|K6F>%2%5j{85^$Q^`KNrylSc!dlf?jx? za(Q-%5Jbfk)vRunaXEL=f`!-(^1M2C*~ju0Y5sxGSYs=JWAhEw+yB5nk5ws?e;zON zSeU@}MP!A@PP_{ZkLY5=f>4WbjF%SQ59U*EzCv@iXv z*RP(QPLLZS=|95AZOxf<`r#5)+R~+ZBpC&!U@9(IMx1Hc^$j#Cc2B$q#8(R`(6Mqc zUsHMQHZR12#at0jz^uTZGrri(Dm@)E$=a~D@b_BY@(d4+T7cc(^R_6t;(dOS)|FEHn)-hQ~-@%%EFVq7LO8AIoL2Yas82GM536PCoYDx0@c`p zB^|FW7u0A{<*D1kINJl)xWt}{%?ppB2jZcNF1i`a4o5Sd-jJO{W;bUn_XkX(J2;*s zTk!{wx%t8lSTBq1=I$Ac%eu4xfJh`04)Q z?)`W7f7u;v>FM)lRMi{=^cr>ia}Fe6fj=b~*9H^Z

    b_V!aFYz{^!0iE#2*QVvz_o6RO2RYjY= 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%0DDVhgroXQr|j2XZ*aauR279+z+h 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�KN8=X9MdQcpamzwn z_Wg?=$0H#wElf?r6t(5yiwjXbXN9Rwn4-97d25)m=i3_cMZ>DN#oOH*ZiwRI_DzV} z8y7v?7_W=QquIB+GHf^cu5q;8s6O#_4+?jP?-OoLd|D)VZ7G_MTDY~OG``Kg-MK^460Ji}wA}__inn`gj(o+#;N!G7SuoBQT?fscZ(GRMG^~&EofxJ# zU-bKu_&(w0MCXuiO|~22*;B$y_IzcBr6r<1AuK6%O?^Q!}_?T%GWF8i?$o(YaXUl`JOMI zNL(G($1PR9X(8Xj5ESKW8KzYEx>X40OjsYcRQW1TPD}I+K~cU|VM>*6Nyryn>yKMJ z`?vGYv7Z+5MPr00Uz;$c%C{^OZ)lt>m@41OOVbiF!ulv*JdQ0G=KuEmu-)R75{d0` zl3emNo)V5nxKETX9>?x4-|otZMA;A%w>Wjq$2(wZTB3Xiit@$d*!|@zT;;EwFVjN4 z>hi_o*!|_J6Y{+i;^LNS|CWb*1;ff{|Kf4%{_+*9nn=_NePG;D24HJpzv!A%dvpMTmGkk$#3A!$6Dvwpq8KLU&U`*<9?zkCJ44;iEJb=*?r%O5Vxj1EE3<4q4!s`~W{`C3IQ zwN&{sL%tm$F3Q(GOsVqS9X=TRBYGjzQswIw{^8kZ*LyNTY^r=q!w)s1&kEue&*rS( zx~B>ydW4nH{tXIKs(h^@Xyo=|zwC{4k~3zqKJ>!@sb9`JXS8h<+0o|MG&cCoS$~P`dsrIkN>3I?Z{>uKn6ppX`yD*o0vs>i(OXH!{uN3;*_+>&a z`JN2K@)KHjfFzWDiZaW45bhaW;u59{NWDqoB64+-aops0S6!j!6hJDMvrpmW1TfWJ;JI;5me9_o7YMai= zlbF9RyqVIXe9<&8N8GS3X^9qbkeDcLthjj9iV)X6TA@YTjau}3_U!vt`K|DH!|l=j zMaM7Rzo-WJ5?L=T;nqZAU)QvMc)uE_jtu4hTdN!X;b`<-_u1i=>%tV}i-sxDHbcI@ gwKcud64C!eja!_rShyj3+~Tl*^Wv3ZT|E2$0L)z&I{*Lx literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su new file mode 100644 index 0000000..2ae1321 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su @@ -0,0 +1,8 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:164:6:HAL_GPIO_Init 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:294:6:HAL_GPIO_DeInit 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:375:15:HAL_GPIO_ReadPin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:410:6:HAL_GPIO_WritePin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:433:6:HAL_GPIO_TogglePin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:458:19:HAL_GPIO_LockPin 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:492:6:HAL_GPIO_EXTI_IRQHandler 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c:507:13:HAL_GPIO_EXTI_Callback 16 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo new file mode 100644 index 0000000..039c4f4 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:266:6:HAL_PWR_ConfigPVD 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:309:6:HAL_PWR_EnablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_DisablePVD 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:332:6:HAL_PWR_EnableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:350:6:HAL_PWR_DisableWakeUpPin 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:379:6:HAL_PWR_EnterSLEEPMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:422:6:HAL_PWR_EnterSTOPMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:461:6:HAL_PWR_EnterSTANDBYMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:482:6:HAL_PWR_PVD_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:499:13:HAL_PWR_PVDCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:514:6:HAL_PWR_EnableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:6:HAL_PWR_DisableSleepOnExit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:538:6:HAL_PWR_EnableSEVOnPend 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:550:6:HAL_PWR_DisableSEVOnPend 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d new file mode 100644 index 0000000..da35150 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o new file mode 100644 index 0000000000000000000000000000000000000000..10c97936c8f9399a57b76e4dbc238bc390f33b2c GIT binary patch literal 717140 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 z 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

    #LHtjYi3ps!Jj2?Y$x6v>Tm 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 Mx79WqJ%Nh*KT=SKS^xk5 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su new file mode 100644 index 0000000..e0a0182 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:90:6:HAL_PWR_DeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:108:6:HAL_PWR_EnableBkUpAccess 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:128:6:HAL_PWR_DisableBkUpAccess 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:266:6:HAL_PWR_ConfigPVD 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:309:6:HAL_PWR_EnablePVD 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:318:6:HAL_PWR_DisablePVD 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:332:6:HAL_PWR_EnableWakeUpPin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:350:6:HAL_PWR_DisableWakeUpPin 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:379:6:HAL_PWR_EnterSLEEPMode 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:422:6:HAL_PWR_EnterSTOPMode 16 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:461:6:HAL_PWR_EnterSTANDBYMode 4 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:482:6:HAL_PWR_PVD_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:499:13:HAL_PWR_PVDCallback 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:514:6:HAL_PWR_EnableSleepOnExit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:526:6:HAL_PWR_DisableSleepOnExit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:538:6:HAL_PWR_EnableSEVOnPend 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c:550:6:HAL_PWR_DisableSEVOnPend 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo new file mode 100644 index 0000000..2890621 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo @@ -0,0 +1,10 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:359:6:HAL_PWREx_EnableMainRegulatorLowVoltage 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:370:6:HAL_PWREx_DisableMainRegulatorLowVoltage 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:381:6:HAL_PWREx_EnableLowRegulatorLowVoltage 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:392:6:HAL_PWREx_DisableLowRegulatorLowVoltage 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d new file mode 100644 index 0000000..d032d10 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..c3de82a4a00811e804dc29e3530c97b6d3d4ce64 GIT binary patch literal 714388 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

    Ya4rB~#6&v1F+^BM6kOZutwi9JR~^ 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Ë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%0DDVso}- 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 z zPUb8whrjbF|K@v!P7}x}0;4k?lQIo6GZ(*MF_vW& z)@CENV0(6BUk>4DPU1{1;Bv0xR_@^;{=hT5#GCw;kNARb7$R*TpKy%KSWL(iOwVl0 z!$K^{3ark0Y|7T`#GV|$;T*@QoWsRj#f{v-{rsM%c%E1J3m@=LzT&?O6|`pi-2XEg z<1z_TGZS+%KZ~*qE3+0GvN_waEBkOTM{y!&a6XrDEw^wt5AryF;zi!zJ^sPx{D&VI zHhmzcNQ}t@OwM%7%G@l-5-iVZtji{B#g6R3{v5`!oWj{$#FgB@?cB#BJjrvs!rT0f zPxu$#@zZD1f8PHyD&sIQQ!yiRFdvJsG%K+t8}M7UWf%75Adch&PUk!>v@eY6IQ~u5O44pZUQv^n5JSJrtW@ava!(uGUDy+>$Y{B;I z#=acF(VWDYT)^dA$F1DML;Qhfc!@XpD;?EHNH%ge$n#fq%K`fSEF?95&q z$PpaRX`IU?T+L0~$?tfSKk@>v@eY6IQ~u5O44o@*eIqbB<1s1IFf()U8x~_(R$*;6 zVhgrsH}>Taj^-rJfMTm!Wb8athCAjLRfU z%}mV6{4B~ctjt<$$mVRvuI$6X9L0&8!TDUqwcNtpJjmnxi5Gc;_xJ~&^B;a>*gS!p zA~7ZtFgepPD|53TORzkvu`Zji6+5yA`*Rq_atdd25m#~pw{stl@FdUi3UBi_KH*<{ z$4}qw_Idx$sEotJOvQ}M!F(*j(yYXqY`|~XmR;DJgE*2CIGyvjlxw(|yLf=dc$z=+ zI`8r!pYb(6FigHcP7xV{@tKTinT21o0E@F6tFjIovn4yQJNt1c$8a)daUoZ5J-2Z$ z5Ay`i@-lDnJ|FWX-!f$WKt5kG3S%=7Q!)dyGcOCX6f3d@>$4f#urqscAV+XKr*STq za5Xn^C%@xS{>Tfw#yk9-Px&|BGxRrsoFXtf<1s1IFf()U8x~_(R$*;6VhgrsH}>Ta zj^-rJT$c)8=Ou_Wb#yl*UD%t0IFb`Mo%6VqYq*)ac!0-vnm_Y8@A4s^@ijj% zOp!oN5gCK=nT%xd zAM+*OGGx&}K3_5lV>1y`G6S3V5`*H|Ja}sBA0hef^h$UHp)me{C*_xf$lLI)M z<2aRbxR|TBkvq7b-}4mD^D2Mg1OCZZ{Fk9h1ab<`XpGAwOwCNp$^0zJGOWy6Y{=$p z$FA(d!5qbjoWc2A#$Pz5iYOKp9Y{ic3 z!Tub^v7Ex$T*Q^!!0p_}BRt7-yu#c3jZgR&-|>rzfqcGVRK{Uqrea3sU_KUMX;xxQ zHsH5x%P#EAK^(~moX&Y%$~D}~T|B^JJk6hZopp?!xR5Kjp4+&Whk1f$d6~C(pO5*HZyB<3AfGQ8g|V54 zDVc%UnU{rGiWOOd_1TPV*qOaJkRv#r(>Rw)xSE@|li%?uf8+&T;~oCar~I4m8M;a! zrwEMBcudMP%*Lj$65hhxh}}@DgwGS3cqk zzF~-}fqcR-GGj3zQ!qWVF%Ju|BrC8w>#-?YvlDxA0EcrNr*aM#a}_so2lw-Pp5l34 zpG8@Qm061o*_`dzm3=svqd1W>IG@Y7mRq=+ z2YH-7@gi^V9{=ET{=<(9TRo6dB*tU{CTBWkWo{N^36^Iy)@2j6Vn_C1e-7hVPT_1W z;!1AdcJAX5p5!@R;cfoLC;W@=_(hFCK3_2^<1jH(F(Y#@AB(UwE3qaU@LRTJ7xv~L zj^qSR=R7Xu8gAw;9^f&a=Fhy&yL`xJe9aFGQ!|iLM8;rzCSzJ=;nys{;w;Citi#4^ z$qww!ejLg%oXlBV$Q4}AZQRSlJi)WP%v-$A$9&1R3|T9X&zFqC*i6Kf%)so-%fc+h zimbu}FcT|1Cd1V(2(CS@9C zW-fliVl2xltj$Jj!S?LNz8u2QoWz-2z~x-Wt=z*y{DEh9i8uKxAMpj>Fhrd|KH(Ud zv6zr4n4Z~~hlN;@6Ya5filB{y(8_wfi% z@*J=5Hh<$2{>69vqJAKsuNakan3$=UkvW);MOd1ZSd$I-E!(mSdvg#+assDw9+z?r zH**&c@EA|?XI|%BKIAjL<_Csp5XdPaV=z9GF)g$3YZhQ}mSa`cVPm#r2X<#a4&@k5 z<}5Dc3a;li?&V>g;8|YgE#Bv2zT{hmY#7MrOGaUACSpovV0PwZVU}V=)?j@$V;gp6 zFAn4gj^{Madv;@A4&i7{;!G~!a<1c6?%^T+z%#tWoBWlJ_=0a3qH!RfaE#1YOvn^W&uq-Y zLM+J&tj>CD%GT_}o*cm89LK4g!^K?1joiWg{GO+Ho>%z`AMj7U;=c^lB#={hMq^wi zVQOY#PUdG(mSJVqVna4(J9cFs4(2FM0cOfKMZuH#nj;UWIOGrYu`{FRURf^Qh2Wgwq$jLcX}$P`S^Y|O(#EXfM2&U$Rh z*6hTd9Khim$Elpd#azXW+`;|)o~L-8SNRJc@K3(tzYNtXkW+X@V_YU-YGz_i=4Vls zVP)20LpEnSc4Z$9<|t0&49@2=uH_c)=0P6kPrS$*yvINIod576!?q6O6p1mJfXSJT zS(%#!S%T$Rjdj_Ct=N%0*q_5VmQy&Ji@1^-xSjiWgeQ59S9qJh@d^LpJATn7kk40) z$~a8SRLsa6%*P@u%}T7v2K<(7*@eA1h$A_H(>aezxrUp$iwAg&r};Cl^DZCq8DH}Q z!?X?L6p=9)pUIe(S@<;zusF-HD(kQ@Te1VYvmb|Y3@39I7jgyHa~t>aFi-F-FY^}f z^D$rYEkm{okG$(N;7jQY( zaVz)m5P#qqUgAyu%13;`Hw@7skWV;9W-KOT3Z`c^=3yb0WCd1dJvL=)c4AKs;Bb!P zRLlRU>Oyv^VEgn#iJzvvvu=PO2K942NeW@HZL zV-c2SCDvpEe#^G(!rmOjk(|KkoX4eH!_C~q13bpl{F&Ezmk;@jula#tx&(5H$QX>z zWK7E}{F((=oaI=Rb=a6K*@4~Jk3%_zlR1kExq|DtjeB{RCwP{Zd5ib?m@oO3A-e|h z`I1o>n~9i`8JL}US(v3*ku_MK&De&W*^2`?g5x=jbGd}8xrsaZ9gp%yUf?y};qQFP zzxke_y9IKJ!03#}q)fxi%*Ah5jAdDcwb_U**q+_kmqR$3lQ@$LxSZ>_m3w%IKky7M z@g{%eBfj7phUgy1CmbU)785cB(=!|Mun$N3X4@&@nm4?gEV{K&99135)vOeSD*rejv-W%>pdW za;(ZaY|NJI!0znFp&Y}>oW+G)!S&q6y*$hlJj=_x#ru5Bmwd~ReFFJ>$taA?L`=yH z%+9 z^b6z@j*%IQ37LZFnT>f^h$UHp)me{C*_xf$lLI)M<2aRbxR|TBkvq7b-}4mD^D2Mg z1OCZZ{FkBn2XYF}XpGAwOwCNp$^0zJGOWy6Y{=$p$FA(d!5qbjoWc2A#a2J-oeQ5lDcnTi>igZWs5rCEtJ*?`}&ExWKc2XQ1P za60F4Dc5i_ckuv^@ic$tb>8JeKI3bCV3U&DOO|+ z)@L)eVQ2Q@K#t&ePUBoI;c9N;PJYLu{E-)Ujd%DvpYm_MXXqh;oFXtf<1s1IFf()U z8x~_(R$*;6VhgrsH}>Taj^-rJUD%t0IFb`Mo%6VqYq*)a zc!0-vnm_Y8@A4s^@ijj%%*a4a5gCK=nT%xdAM+*OGUTX0K3_5lV>1y`G6S3V5`*H|Ja}sBA0heN z6LT^@i?R$Wvlbh&Ioq)-`*1KvaUy4MK9_MVw{SNP@;HCuMc&{&{=w(`haVYsTp*`N zjL8H{&UDPm+$_ivEYE7J%O-5aj_kqy9LBMn!r5HJmE6GX+{Yt4$#cBI+x(4B_!r;t zi}8VczG76yVPd9YM&@8X7GY^tVof&Sw`|KU?9D+O$qAg!d0fgh+{|4(z+*hkpLv~k z`H;`}njaWuLLjGzjKTO!#OT`Se8{-n~m6l?b(feIfSD* zi8Hx?%ejtQxrc}N1JCdhZ}L|@;tRfEh{=I`!Z9*qF(FehJ+m zdvXAWa~!8~4i|G3H*yE}^Lw7+d0yo&e84~XivKdylt5158I5t7gsGW{IhmhDS%#Ha ziw)VF?bwxlIGCe2kux}-%eaCT#i|_cwv_L*zF)HIQ zF;g)kb1)x^urw>NCL8cuwq+Og<{*yb1WxBXF6A0-<}M!KF`nknyw1CP$Y*@b4-7Ls zkW)m)V0nOwl-T*s~4 z!$bUmXLyM>`70ms1>Z2ltUx~D7@4t{kSUm+*_elgSdtZ3o%Pt1t=Wk^Ie^1Cj#D{@ zi@Ay$xr6)pJx}pGuksf@;GcZOe;I0aAgAz*#<)zv)Xc=3%+I1M!^*71hHTDu?8-hI z%u$@k8Jy2$T+1!o&4WD7pLmfsc#nVZIsf5DhMg10DH3Bc0h2QwvobdevINVs8tbwN zTd^a1us?@!ET?cb7jY#wa69+$2v71Hukbd1;}ibHcl=^*AfK-om2sGushE*Dn2$wR znw40S4frkFvI~225Jz$Xr*j^cat$|g7Z30lPxEJ9=UqPJGrr~rhM5=0DI#MqK9eym zv+!#cU~!gXRn}o+wqyr(XFm?*7*6IaF60WX=Qi%;VV>YwUgj;{=VQL)TZWt;$mdH& zVQeO1N@ieo=4D})VnxZx~`>AfIrI%vemw6im--%)>$~$qKB_dTh$p?8KfNz~LOnshq>bT*Zyt!TtQ6 zr+A)M`3oQLPrl;647DhbQ+P&WTqa>^W@1j}XHk}6W!7RtHfK9_WgiaaC{E-I&gU|& znVSV!g5_C_b=ici*pWThpTjto zQ#hN8xRM*Vo%?u%CwY!nc$>fR3IF0dez7Ew&sU7fI84k`%*Y(f$097vO03BS{FZIm zg}ph5BRPT7Igd-ZhMT#I2Y8I9`7^KcE+6t4U-JXQEDhuokueyb$(WW|_%#c#ILomr z>##9fvID!bABS=bCvz4Tas}6O8~5@sPw*@+^A_*(F<Ga}#&+J09hayufR`!{7OofAc*YqJqsusyr6FNbh6Cvheha5>j;EBEjaf8ZHj;!Xa_M|{CI46!1R zPdG+qEGA?Mre`+hVIh`e1y*N0Hf3veVowg>aE{|t&f#LN;zsV^etyqWJkP8Ag%9{A zU-4gtS{cYGJfkr#lQ1o0D9f-iYq24lvmLv#4+nD;Cvpboa~aoi3wQG%kMk#9 zo~(1#*hSm`uRrOvkLu&4Mh!@~pI%eL&o-Wv(kOv^0%ngv*#a4}bLBX@8=zvn5Q=T-i~2mF(-_%B0k2;>x= z(HNIWn3|cGllfVcWmuWD*pSWHj$PS@gE@*5IfL`LjBB}tyLphu`4cbl2Ji6?KIcFD z$gmp&IYnYjCSY==V^-#7L6%^7R%2Z@VJmiI5BBFUj^z~2<|3}-25#p*9^pxz;}zcK zZ+ybP_>Ny}3gq(@qcRQ?GZiy32lKHAOS2MdvH`zkTXtb@4&q2o;B?O8Qm)}%7Z{e8$)Oz%ZKwIYnd)#%D67Wfp$T0xZsQtjaoU%$DrH?(D~*9K*?+#f4nK z_1wn2Jj@e3%gemQ`+Uroe9Mqq0{MK&D2&ZSOvwz)&b%zlQmn`ttj}g_!_Mr*fgHi{ zoW{9a!qwcwo&1hR`6Dmz8t?FTKIPwh&(K=~IYnS}#$!^ZVP@vyH!Q}otisxC#1?GN zZtTk;9L-6b$pu`_b==B5Jj5S(hL?Dgzw!}Z@C`$33*-}ykr|5#nS$w=jd@szC0T*h zS&vQGnw{8_12~-HIF)m_n5(#vJGh_U^AykXDu3Yv{>fMTm!Y-?athCAjLRfU%}mV6 z{4B~ctjt<$$mVRvuI$6X9L0&8!TDUqwcNtpJjmnxi5Gc;_xJ~&^B;a>*d2kKA~7Zt zFgepPD|53TORzkvu`Zji6+5yA`*Rq_atdd25m#~pw{stl@FdUi3UBi_KH*<{$1ipU z^7)EU8Hb6PiW!-M`B;RdS&22-fZwt$yRbJ0aU>^jI_GgI*Kjj;@c@tUG=JuG-sM9+ z<7<9km|cOKA~FW!Ga1t|3%_Oo7H2tDWgRwVOLky)_Tx~F;bhL@LayL?ZsT4a<_VtV zW!~a_KITilWysxue7WCmtuUKVC4R%F-^9>$Pz5iYOKp9 zY{f8)z-WxaL`=cp%g?WkjJ#O7?v&g{wl9Lmw0$mtAv8%u~Uf;KMb zu-|8c>e0^zEhj%4wEO*RP~4wAz@t3HbG*!(yvK)p%2#~HkRbzqKO7@52IDaaQ!xXx zF*gga7|XH>YqJqsusyr6FNbh6Cvheha5>j;EBEjaf8ZHj;!Xa_M|{CI4Dp4$7@4t{ zkSUm+*_elgSdtZ3o%Pt1t=Wk^Ie^1Cj#D{@i@Ay$xr6)pJx}pGuksf@;GcZOe;F!N zAgAz*#<)zv)Xc=3%+I1M!^*71hHTDu?8-hI%u$@k8Jy2$T+1!o&4WD7pLmfsc#nVZ zIsf5Dh7BFaDH3Bc0h2QwvobdevINVs8tbwNTd^a1us?@!ET?cb7jY#wa69+$2v71H zukbd1;}ibHcl;vg3IEgcEEHCpG@AENV@-0J#3*_@9qcAoTF(orFJM*$IOR*wrus)ly z4Lh?J2XX|*a~kJz30HFyck(+P<&V6;YrMnX`ILY2JwtyP$SDG&Gai#N4Kp(rzhN0cOfKMZuH#nj;UWIOGrYu`{FRURf^Qh&t3W>C7@4t{kSUm+ z*_elgSdtZ3o%Pt1t=Wk^Ie^1Cj#D{@i@Ay$xr6)pJx}pGuksf@;GcZOe;F!#AgAz* z#<)zv)Xc=3%+I1M!^*71hHTDu?8-hI%u$@k8Jy2$T+1!o&4WD7pLmfsc#nVZIsf5D zh7DTCe0tuF#F$LLlRU>O zyv^VEgn#iJzla#f=PO2K942NeW@HZLV-c2SCDvpEe#^G(!rmOjk(|KkoX4eH!_C~q z13bpl{F&Ezmk;@jula#tA_a1a$QX>zWK7E}{F((=oaI=Rb=a6K*@4~Jk3%_zlR1kE zxq|DtjeB{RCwP{Zd5ib?m@oO3AtML!`I1o>n~9i`8JL}US(v3*ku_MK&De&W*^2`? zg5x=jbGd}8xrsaZ9gp%yUf?y};qQFPzxke_qXcq_!03#}q)fxi%*Ah5jAdDcwb_U* z*q+_kmqR$3lQ@$LxSZ>_m3w%IKky7M@g{%eBfj7phKL%-CmbU)785cB(=!|Mun9j_G{r8jd7WT zshNp6nV&^jhLu^14cVOS*p+=an4>t6GdQ2ixRzVEn+JKEKk*`O@E-r*bN<7R3>!U= zQzXV@0w!lVW@T;`WC@mMHP&Slwqi&2V1EwdSWe+=F5*gV;CAlg5uW5Z{vYk#1#}cy z+Q#t;o-l*EyAy)D2M_K}j1Y)G1b26L4em0yyA#|QBn*{{msXV;U|EB=NL@HzgDUofUzfVZ6gV`5B&88HXu z!y;H3U9kq%!=~5Bi$8uN&Yhgodfu7hNJ7HJsgM)DtPQ)2F50~N^+=M&v0EXjPyn;9J zK0d>@_!(m)GutUHCc>1M0kfks7RFLo5vyZeY=W(^E&5{!_Q3u)49DUWoQ(@{1+K%b zxCam8NxXp9@HRfem-rqHd80`^&thXdOp0kRGv>nlSPaWzWvqz}usM35FLuN(*c%7o zNSuJvaV{>w)wmIN;C?)YXYevc;5~ebZ}1aFPhqx`6DGtIm>#oXUMz$qu>w}ZI@lOn zp*Q+rFm}g&I26a=WSoTya5=8UEw~#G;R!sCSMe4;#25GuzhbPEW;^|iNia2L!kp-W zMX?N4LN~0B&Cng&VIX$KUN{g(;CP&dVYnDq;Rf7}`|v29#!Gku@8T1DjUO>uDzkkY zF##sWbeI+MU_mT_<*_Q(#zxo@y|4oYVK?lHLvS=s!kIW9m*FqC8F%49JdWq^SNshh z;B)*PzhF#x$Y+0k7e0e1tFYJsRoE_KA)0Fe#?N%$N)F zV=*j?m9Zu^z~<tJJSh2H3g!Pp)9;ZPidlW`UDHUY>I8r z2Lmt^d*T2bj^l7D&cQ{v64&E4+>1x>6kf#Zcn2TjEBt^Cna%czgYhvLro}9n8w+4@ zEQeLF7B<8d=!xyI6L!TuI2cFaM4W;1a4D|AO}G;eU^t$|D|i#{<1>7VpD{)jvz_8% zB20-HFgrS9VJw9eu{zepCfFL=qCbXU5A2V_a4b&2*|-o_;5yujd+;!x#0z*0Z{s6; ziSN-K_S*(mTu>m$m5A?;3*adszARLJka5~P#CAb=AQ z&e#hF;s_j%(=ZGd<0{;M+i@Qr#nX5RZ{S^gg0Jx-M$2Kgk0U0)3sJ1LxsVT!Wi%Cmz6X zJd0QGCf>(q_!d87jNE2B#l=LJ5;I_SbjHG13M*oDtcy*sHMT{648b1QABW*soPx7) zA+Er6xE1%{VLXW!@EYF6NB9!oqmjpKpV$}=lVTdojJYsB7Q?bw8Eaw#Y>po2iyg5G z_QpXt5+~qvoQq3vHEzTmxF3(<8N7@Ucn_cA8~lXP^P27Cgb6VPrpIiU7YkuYtbo<9 z4mQSC=#73DjNP#x4#hDz8E4@FT#jpT3+~24cmmJkRlJ1{@dduauNceOY^R?w38uzO zm=j&FD3-xW=!W&N8MV`n+<@D0A0EZicnNRdU3`MC@gqjd zXSRD-q2N&T= zT#wsuFCM{DcoDDT9ej+h@B=#JH`^x;#>Zrs7PDY(EP%za99F?v*brNwC$`5<*cJQW zU>t=LaR$!ArMLz+;Z8h&;dmCW;7z=b&+sjN#ux?6c8ZIMFePTd?C6Yzu@qLs>R1<> zU~6oP{uqKius;sNu{Z^1<3e14>u@XX!NYhGFW@!2jgRmpzDJ{=**>u`9wx;!m>F|n zek_J%u`<@g2G|@u&=)&m7wnCLa3oH^={Ogc;A-56J8(Z9!!vjpBk&$R#W(l~qZcyU z$q5r;3QUjLFfSIul2`$&VI6FYt--=d9Was!17oXYhxp9iC)+NgRmRMG|c6R ziwRLa&S5$KmbY~*%HQ_Q7`tOX9ExLbGS0#UxE$Bw z7Tk@8@C2U6t9T0^;tPC-Uon=0xxV`QVN+~_J{W+Z*b@ifa2$tIaSkrRmAD?a;a)s~r|=?P$2<5KU*QMT|Ia`iwoiOa zhG{Vi>i=J$0Mo^>99F?v*brNwC$`5<*cJQWU>t=LaR$!ArMLz+;Z8h&;dmCW;7z=b z&+sjN#u(Ae{UI(U!jzZ+v!gQ>#!^@jt7Bbkf~~PF`eO+8!2UQ4$Kn*6jSF!FuEVXk z2M^;(ynxs6Ha^0a_#TbuX8Xj(c$gH^U}nsP`LP(5#mZO{8(?$vKws>LU9dL}!jU)u zr{i2)f~#>O?!f(c4A0mCnrpZDKI@|!@O7sOJW7o{afVMz3=T$ zfAn+a_W04yneFhSpEKLxM?Yt_!(XMJt44oU2ODE6^hQ4n#_re;hvFEVjI(e7F2}XF z1$W~iJb~x&D&E3}_yXVISBxbcxO#u^XH0^rF%#xQ7c7cpuoAjqeQbvA*bW1+GxoxP zI0DDxGz`PVxC%GmcHDR_*YOTM##i_O9paen z69?mCGE9qEFgF&!;#dx=U@dHjEzlF&V<+s2eQ+?2!ihKo=iyRZgPU+C9>8!si&yX_ z-p6P77C&PQN3)&cVj@h588ACKV___X6|p+j#U|Jq+oC^)U=Qq%!*DE4!P&SFSKvC_ zihJ-dp2Q1y4R7Nke2MQ-x+P10{qG)cN4|bhp1dkp6YHbCzR;R!Z|s1bunYFW0XPix z^`}Wp&%n937+2v2+>ZP3D4xbkcmwa^6MT&yF&gL7j+g*-yZ*RNWA0yn_BxHc44B6e zm;_T}Cd`TQ_M4@?D3-xW=!SYfY{s-Zw!=W|jC%hY$n*#tkJB&=^>+WeKA---T+h|p z>BsZ)-+O-kxV~Vv+h6ti!vCuO)X$^;R)1HEezhUCKu>Is`naJh(|vF-j>3tkj~C`K zy%g8rCftb!FdWa~6}*Y}@fp6w&lrQ_gSeOo_5XjIf$8k%jD@ij{`h~7&F5d_|M&R6 zy+8h^$FsfJ4+h~#oPg7DE-t~S}{?mR%pQl7VPaezjdkW6Rg}4IO;a1#(hw&s{ zz-xFLAK^=Uj|TmO{(t}DF`YD0|6!|L(~*-E^I$izIXfBU1q{X6xy|L*5M^!{$Ee@M&oH8bk#LHU?2j3rU`6MvQKlPg&+-T!W3 zdKVtRW2moFUSwML!?&1zfX`4L=jrQ}`twn`Kh~d{OH6;93NxbReHYmXZn5S07RN9K zDP?1XDdQQ2<$aBWhH*hn%SF06QWGt?VRTTYG7QW60kV02S*T|*3KFZU34!`UM^*l-T=_H$Nu zI#(_4*1AsPdX>7it`y+z;pbhUL&J{synUjqaPfN#A&mn4Lfn14>$wN`ct^Q36$1l8f&%@htMBRV=Nll)9pysRboULAwF>of z4+#u%3+%!l{h^wr``&W1$t3SjWZSA%Tg1!TBh;t0Z$R5X*;tm_?j9aN-kr_$=bj+d zB5XqQuAl%PKi}Yxf4a}#-7`p1{*fxJBkgGZf$SEBvuB{czjuJ_7XPSe8|3aUMdj<& zbaoF33G(#_4N-IQ2?`ADC_C8q4Nc{9XtH~M8w$xS^_s7a=jzB9gE4YlIk{ig)wNUS zW>r_uPF)kLy83qN)Nz%bZv#7Zss(hNx~5}mJ=F7F*QsMTTXjRN>Kfarn`l+1*2z|0 zm{naYCZ9+iX?W+)mwotGX6;>P}hJwX{=r)vB(Qox1y0b?QAiTkZ1Ns;-Tl zI@RCm?dEQ$?kB4{4?A`0`h(8%v{R@0b6w|Ur%rwTTi1EpsZ-b4bX{9JbycnEeC*UU zu&Qfkr>>1vov)obKdU-*4b;|lQ=dcD>(RkZ-9W24KRb0}t?K;k)XlW23$RnS#HudP zPThK|I@O2RTHoDPb)D?gsn1XAc2Vbmw(>4n)dkzByKPk$VpW$~Zp%Z4I-gX-b2VW# zNH=d8GRnW|q3Gu1AL{gQXJrAwx637BYRkxQqS!BzQL+YIMO3FPdLk;Tt1=j2PN!C|= zhF-025gGORo`{s!NOq1RIz;O9&4@^K>UVflzo!RXcU5j!&v(E45K$8;Qu8e?qn_`p zNO?mfueuHsb)NdZgLPgSPe;q~lFC!(fI2U>tegHD6?0nh&RE@{Z$_6o>pVZn+bs{O zywXwSNxd4>@3JhBOg;P|kGeeGvR}!0jmj%4;~$ofx*BpWGl|%msuNcjP+Hd3VWYRG6S zuc*9GsP|y>pl^QL|Je4AB~Km0s62Je*j8Q%>HOO3Fws_Cnr@E9P~W}sPg7W-uLV; zk0npw(M3v`T(7{-!!$ezo`!_ooo8@tp zr_Vp4%8MrlaIJNSoxGm%1Acmc(dQpg<@w78I)=~}N}SE*%d$N~c2&^IG5 z-zWLuL)~9>vy->2q=Vu0JlycGwXjH&Xt+8+I6w6%R7OWrVfTo1PLT;&HSb>09e zwv`uJ&f&X`Pp?YebGCqZm}E>xP?1?J6}-kqw}(m=R(~*HwWXyr`SxH^HQ1lBGqlE=4iNn ztNKTsI)B#7pdS7tbuFy!Q1ewoF{!g&zL~OoVRFA(-%&E^<*O!j(GAN>i`;7%O=>tA zg)Fzse{{4`O1}*wrLLo#r;L+(X3D7Y63D3LDS6+9PYoT7Rq9R#otIFit?No1cQV>o I%|O@vABBsZi2wiq literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su new file mode 100644 index 0000000..35abba9 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su @@ -0,0 +1,10 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:141:19:HAL_PWREx_EnableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:165:19:HAL_PWREx_DisableBkUpReg 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:189:6:HAL_PWREx_EnableFlashPowerDown 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:198:6:HAL_PWREx_DisableFlashPowerDown 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:211:10:HAL_PWREx_GetVoltageRange 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:288:19:HAL_PWREx_ControlVoltageScaling 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:359:6:HAL_PWREx_EnableMainRegulatorLowVoltage 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:370:6:HAL_PWREx_DisableMainRegulatorLowVoltage 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:381:6:HAL_PWREx_EnableLowRegulatorLowVoltage 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c:392:6:HAL_PWREx_DisableLowRegulatorLowVoltage 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo new file mode 100644 index 0000000..109bba7 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 61 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 20 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:941:10:HAL_RCC_GetHCLKFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:952:10:HAL_RCC_GetPCLK1Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:964:10:HAL_RCC_GetPCLK2Freq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:977:13:HAL_RCC_GetOscConfig 8 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1056:6:HAL_RCC_GetClockConfig 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1082:6:HAL_RCC_NMI_IRQHandler 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1099:13:HAL_RCC_CSSCallback 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d new file mode 100644 index 0000000..9c8bf6c --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o new file mode 100644 index 0000000000000000000000000000000000000000..fa207712e78a07162a2e5e02fa38ff16da6a96e3 GIT binary patch literal 722244 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ⅈN^lGS66V)fvUv3m5; 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

    ;2aUAY;ojxZrkIGTG}z^8#5k3 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�=_3OADinlV<6 zUe^3Cqe59knL@#^AOS$tq*KL7fPi9Tn>?q}szXI7L=vVk4AHE0$BxnJ7v$I=-sPihFJ<0(gDuVB&BWNUdQOHLVvS4Y0y#YPqs{3N9f(TL+;WQHy&HAeidZ`Dq zTp%B)j?O3IJi!)G4^(6a4q{HSs|$BNBO#2H0uL2uFcjNrgImjEP37`e_OkwkO{_5_ zBU7oB%znV3!E%jMKT!K#o_@g9zgyV8Z>XQbwZB_<`0qD+gb-z}9d#pSSYt)`tdswv8S+IDqQHkW4uZ_FR+4QvgJiYL-H0^JM4RL_@JurQt{n zq*lADtMHYM);2ckzf`~N5w}m@%4MC{5k@ye>vSunwoY15CABru zY|m-78xeE{LXz2cIu~{68+Cc++3o}`oreypwHqzkdSNmqoKbvnkf&E6RaSa}I&)!C zK+6n~X52)8%f;Y8a@|X&Zn1I8fG*mA;iz(hoTl2!R$~f;-EOibwRV%eIMNb+%mYmQ zh}m7!a0m~VL6EG%ailJHl~efn^%cgE`s`OVYO{rHwGihBLixls(jSt0Y$#*UD#a(3 z1HOC$RiRod1X-&iia;rpDYGqIN%tq`p%;@0le%#&XF&h3DD{aGn=0l(6l2HS$gwTO z*6oyQ_@>9d)g(IIqu0M~o<~61@M$m5UeifU4{8jcZfpK(x%Ef-3lB4bRay zC6Hu+GA1fh-$+s$tfjS^9ko}ejG61JiD2H$LS&@`RT525L`;W!285q;rMx5jv{Zj4 z1)Nh5sI-FoBiSY|?Ye z)O@Psh$8utkgfRP1D+G3)G>22q?-OnhOAioGUon}q;ss6pXz~-7jD881JVN=(Ny>O z0RSqHJ4*D}+YqTlRww-dAqI0%XVYF;xQgW_9lHs**rY!{MSmz+QVt?Olkddwa_yUD zKe@ErizKa+zyt|XM3AX`$&10nF~wWpsl}p#;>q)$g-KLCkg_8e5|6WxO3LLDA~`ap zE(O?+5`rSFORDu6_{&Dc$S>~aa%F!^*sD4E=P_C|qT+Nkci(R{H{?%L3%Gx4u_e0wa% zAX0uXSH{7VN$B7SaiiH zfh%lq#dW>y(beC%qs^o+{mp^sHpxYFwv6w-M^;@+R|ukn;%vMwhE4OMr1p}I%&3nL z(0s%mQ4_AFge0>f5ySXk9PYC2>TN-=Z0B61zpFgwx-q4zrY750_c=oItOX22otX_GDujx&ik$o_YbXt(-dPV0>0ruRUzJ@m!3v%Ma&b zu3BMGq#YSq6De6?lCRen&f4H&md0=j0uF-V7@)wbwPcs5v*`J1FxHa?W@= zfsmm)t}W(SaKipapr%*o>Ef?f$e7caRFL}-yX7hw1xdX@|;}fm;NW3fJOmY-nWER&5JkYRU zVPKmhljYm6T%%YL{J<=hZmgB$S)ECRf~JyAWHoQN_Yylhuv*`JFMe!yY)V11f*ZlU z-#4qucTNrBJPn-wE-F`BU0{*CNcI;EAJ6;R<*Vv91F%%9LKkp%>U^du~blk-5T3Mu(ymI z$$*kT>D16sqkPash*oN0K<9u5cMIt#K)C+Drw+fa}b4&4v01Z#Ib96$qmb zUsbaRnI>BT8FoDOKJ1Zp&^XT%C7^VGGlD7L5>K8mV#-F~?Mp}JgoWpo!ReztP^qV! z#FBe*DiXNKYgR9hDrFmxbCZ(oAeN)tIZ=1HFx@fv*m9P8=1DpQ;rUXHjI6lBN$sPE zR)lbei*OLtpg-HQciyKHd3BXyW8CjbK1(ta_FTw`8Rdy>qCLwNRdCaJe;_fJraVHX zeMbtk1m`MAN0P|vsV2BN2(o^(daAyhl!zc=ldH;;E8bz|g6G$wFTZnA9bg%JVQ}uQ z^Qy(HPFw)2=Zui3tzl~Zv5LAYMTqPW4flEL}!XzN69DN!zMg^KGOD7c0&Hj7_) zPV{wmx6R?-=r$k6NQIODgm<{G zb|sMJEu(^Plmi>cOrP45b6$u9AFBo%P<;jw-WOcA9d9404CN!${kyJ)ru3H4o=hEZ zXw$f?g-u6vIMh!`g7`8XiiZIaQP@r-1+y^#5-LvfRwU7w`>km5bO)3jEJrF0 zR(Z=F7z}{A4G|JS``l z1-Pbj*wnHfYbMPQ0jdYhE%r&x=e-|#fL za2!Wte{fr6=nrly4gJAwwV^+_?QZN3UaLKd{lRUIV}EeE9PKr4e+wd=#N~{jR61B3 z7BJqf&z0{XPGng*5T)DLmJ{y0FczLz7;FoRsPoK~-HH!i?~kDTpyNg3mp=I=D#vq% zFk#71mJiMC?5J8NDU}H|rQIHech5(cac`~NM~V{EV(VJM!2)?w4?6~_f|0k7f;{If zyda_GioW36(J^{ksHeRUb5j(TusG4{dDfvVJ8 z(cmU+an9X2VzthJ^?*V(X(>8}c;gJ*f-=vv;0c?O?_=QZHs_2JjWF^u#x2AU*`%1Z zied5FV$s?G*Eyj46m%M-COQtRQwL#K!6_L^@P#6 zhI>{eKvIpk__p+guj*Tw2ov#KGb3N=)N(B-0!3QRpJYR@5qTE`B!$}~^?6_MJ7wh7 zLa|}-1alh{Xjp{Ej%2K|fK-E+uz^FsUZizutkfE;Rzsy6N!27i?(P*ZRJ*~@&9z{l z0tz@Hq7&yL*|*Rs^|@a(C1lu#TQt!qjP3S7{uhY?xs5 z41GitS_~pMG)ViZO%gN*;vm=IdxaS|PU^B}OKtNg3b>(C#KVgnzqk5OFK+vyho->h>x@V^mXOx%Y*s`$aoqt$+p0*b{0f5+zkX%M-s;}>dDdU zSKA8^*Jea*=SYYiA(|_B^C~=Xc)31M3sonKPwo_CwmA?|6s72@4N$)3DxHsiF2Vc@09oy z$2{(AGp_whDfBEB$Vhi#_YmANoaimPRAvi|bQOsYE2@*|1J6ZUkv5 zS3C$Db~(OPj4-c+2v?pQAv~VVTCIXqKzXu<)tpzJ{14?r!?7H6Y%B%3dPEY)UW2C@k}J=u(w5<}TQOH#tqP4`C|EF8jW~D#Ebb|U zqA&tg1<|5F!E7mEPXYNB-RTLK#yG8r{Ew$v!Il(VsGh&FRLMzH1DQK? z4CYP6eG^#_T`?D&D)l{U3f`jWWRub;ankXKMS5=6jQA{R!bom~iR7*msT%I zNR+2NGw1&HyZ4TWd{u$6=gx=Q%N9`?Syfq?k&*EZ1QwJ$H7r9^*{M|z4&Kx%7?2Y# zTfmz_EyseU3V|&I+(F)jEr{YF1jCmkm!USp&%B4R&hZkaqQFZ=91BkY*YS72+GXan zonpCqRI4B(&`>)u2)Mm0D<4usKlw@s2ixIT8uOx{V{&Trla~urfi)gkbgr3+&~x@8 z?k#^MD3#6hae z30bZ9PXi>+EZE{p3=*G20U?mOjGQ?BYT(4NY{D?qB3NX0yqmmv^X2C+?~$NNl~c<0 zpWi>|ETGTCbZp6kZBh)QY*LNCss!5rNIj|<4?iQIr*e7k^PK4d4JE>Dv`tnl?8`u{ zbugD{gO#3&o5^j>EX6KtJ2@KjxPU+02K5a1lh!j_LQI|7ekn?x-5~Ukj-FVY5jMPr zR^-y`u}M@=y^z=|!#AWsWTaN*Hc4(gPj#TWOa@&-SAW)lB_;F*p$MeZRIuW==t)>| z_N|2}ohoQzxn?)8@AFHoGK^)OOqLWwhVoSBWVB%5f+Wf!?;Od|{89{;Q!PI(%Jg$Z zr(%hbFl}|gL!ji_^WrA3ra9Ufa=Vxf>Pt-y=|NPNE@BO$r^Tt@uuAu)7P}o9!`< z`SpeQqS$Z2DE}%K&(-CU-djwuz^P<%FR6;gwU3R@gcuiOf2@IN1|sBVc7BD2reW31 zzV2?D%2^&fR1*n}?+_1^PC{80qz>&n3b}kBA{BxZW9j#r~k#fg1TY zs33;_XlN^M_*;#FKm?TqUY1ar_7WJc3B?g8P+N|N$d+Os`}}!%Pvg!TizaI)o${`J#1@J*tA*3L zk5-JMF_{iA3-J6{y$EeMJ~s$A9g^`Ckasnso{eP$H$=0Q(cvn}?15I$g_@Rj+(LE8 z;P2|CWv?)FBn&-rG2`$MZs9PTTv+{-Tu>gO`Rdy-bQ3S7FP3Hkn}=G9N)bSkQ3Cb( z(hk7n%M_Dnu=G&ctgIjL^8Rn+=64q#Km3H>;0dtB31H!NaYjs0kKd)DZZs-2b)(GM z24gNd>wb;2#t0{~QgvL#Q*?kDw#+tD79BkCocSt1coH0n7dHSo!SlgZ!tqGHrEt@_ zolzkQm$d8kAVCo5Q?&P2a5q!iQVA7$OS~5yHU*yB`DdY(VEQfesI?LTrC1b6YXk|B zM?IWgE&5P2SJ8Uu-iUKEoV{L&TPx9+d1)1GFPsP_h!{yXM!lzP6ao?-zQ10;+X?@I z!{25OKdR^SbkUknGQ7N9fUquBP@3VNS~lpybzA7PL3Nbtg@58k=Ds4;EtKY$>qoL_ zNxG&5#uR$U8py@2B$OJa5l|h5dR@{Ib=jy63`**{ykC}z>M1ukmj@@BuWBXR_p4e#i? z8(8S^N{9f-s1dr?Rtl5YoPj>+JQiA!Z;+3NJ}{;pCqQWwt|SePzZafP_K4S0tp25c z0BMk>lD>Q(n`Y0qA};b7NkEnO$N(|a>sJT|0c*!U3D*p5ndA#>cGbf_z6u4p&8568 z3ySEri?A{ADL+bKVFWipM&o?b&*phMNA=hTjs|-^a1_KtuC$hSAU?5BZS(Y_udR3R zFQk4$mbX)7D+5E}#fRR&Ivx*JnrIw9SX8-f3ZaI|mhLfjJWE$LLWbPgrM`$~p+zkB zoQ3Ox0LKirF&f#{@9}R%8p$>y4nnt1qC!aXw6A50#w8V1)T|>*Z`-7aT3{{^w_UIv z1`xZyPy$$vy)dwSD53x?8&S3QNIxVEAF>}bcwg%`V!u=Hl8-%aJ;i)fTNSx_TWXl6 z7x*FX++u#CNo*B?)M`K%M&9Cbi9Iu)&KWj>4C~wLDbfowz1A)A+tF~z|0Es-D@h@o za=H28nkkZgHK_@i3}A<-GCToDZpi9!`i1UTPg#?xy18WZkX`u?RIBJLh5XDMO@_8g zV3`=gs-LxYL=@BaAZ0om9N4%j9FQUs@pW*9b+@NsbPZMs5Qj&BD;i*8c_DFyL+#IbS)7}4b_GL0FMvAr;aOIOBWVjnS& z`PD#!jVnh-v?akibnRGzAf|m_LtBO~A;Bh`N$Sndmw>YhpyneE-4OaV>mSGw)Hm+w zqz6DYBbp)T0wOPjwS)9a%8=p;hA#HxVVGKB>33^ZYD)ed5xJNk>}-Zkg*0DoE;Vm) zp=s0UpKKAmIdluCzCdiR`Ku%;%E@H~O866u6z1~?y9ezEs{nPWHZ+&#kegm$#maHz zfD((>pC2xf@N)J3%V%>b_XI{Q@V9S%eyd5u-@()0|K4`+)BhzY5)Vpl>g5ynJnQMd z6nD+ueWu&v-*X%JhsgpqzJA+O3$i`Df_`QVPtF>PG?@X?WKz0G5|DOg(O`_6d!ay{ z(#rZ}<05G~La=Ghc)$RbUpBTCAhX)_>*Y&3txw!93S#xS!fb$nzlA@F7ZVS!_`zRa zzyF=p7soF|rXV#B(h$8mCo6~qZmHitJ^c-L#ZzGV;DFEh-N5S}IM=9~@QmN?yU|pJ zH~Gc`IO7)+vO(N)eW}fW1B}*Q+9wKYFI(N(o2d!!wo*!^jX(2-IBJbIOofc2MN;;; z^M>-Wqlevmkbi0{ab7v@o&DwJmoaScyK4+tpBuJc)4kLDYCf8QAdOD`SnB=kP(E~r z@RcDK=V)4^)e*Gm6xGbU#m{T!+q1z?>TzQ=r0(7E5*c?!(!a zKW+X!W+uwHKx%I~q(}QfH%2Di;@rcfR-9X6wT2rTLtZcEvn6!=1zS$Ac?cj`v+uNY zZ1`5o*Lq^Cl9`k?Hyal>ECC4-35-Xt0k8w>b)7#Rj%v?&XuaE!0UK-75&ouu0<7r~ zsz;Q^scC`Jr9LL`-YQvi>R1rvsk&n!H*oj6#i!RQDHLx{7MR{n8bhW$Fu;aeD##zM zFiS2WGM>;=!}dsqCKf7;So(542ozRZoo;`;hMI^XMCZXG#l^$HSAdZrqO9S&v6c4N zd@r$uB0BSHv7&{>2RsyQ9IG`Si4O*YVCsY5-k?fB%8q|9r6g}^QcCh`lao2nHmi-p zAKe?Zu9_Ph&SG=H|Jq~~4eA9&#sn5OVyjWYg6nJ`iLfGYOZ;?=e?fKws->r{jds1W z|D=O1Jqc4dH;U*=HrJy zz55BLp;Zd+s&9(5+1JH)E9V^L2&!x_xYUyC_4V0s`ZaT{b_& zEQ7S<_A%gs=P(wP7kYI%mf$N;{1(j8lYx@9`n>`{F!WJR4|!+lxSN41(tI(9gS&%C zgtrxD=T;3k9ec`T07?W?S7vsKMh#N*fa-f0C22)1{nnJu$ZYR2%qy35nfoeUmZ8-c zq|{=e#@?)E395U(NBk#*8m6j1VAYSbYAHi{Px}+nB$`xLe@2{6Fw)VuD_do0P!0kV zz{5^6QiqfTx=d35`m0=Bqm2DXRS;hnrkf?)A(wEDj01!=(&&?{3}!kdPM#t4$4fbE z`{^miA~8SxpkaDim|NgTaTBj2R&%XA9NQ(Y`UZC)a6TLrGL;qsob-IXm@sdPXZiUW8{VH%C1N<@DUoU=VmI3M@WOA~ zBUYnrXUZ1iq7U#jojVHbV$eB70qs){0~g50b!x zzn6A4N2a|FRIAU^0in-ebEijFmOCe3>Zw#Dz+IMp#rK~-iv>uAJGqgW$hc(u0%P=i zGlLEhAeQRCH3_-L?ah%v9|YlFoT6wX{Kq`5ViX=RxU=4NY9U_ZDD4hvVfdfvB)H!V ztjP&!gc%?FyavJY^bbIP<@#fZ&14_{^1&_SaN2tUk0m8E+uXVSz?{xT&>F;UjFsHX z4jCi1nct!!Tbr8eE1fk|Ekc_(qS*djxNZ~Eg~eyGvk>@nVF-ok05^*n8E|Ioryx9K zT`31U>gM6&FVtG=BzI4_E>!Yhl1I58;Jx3P6F8u5A6pH^jj$RUjZn+&)B;J0292ya zLpoNH>JaJkPc)NUD=FHr+}8m<8;DV&SFR7YZP!S&<*t8T7sXyg}+xdtP-Lj>F%s1 za=JwxUEv%0QX3UkW`(jQRA`j!=s79?FaNLuv&ugSoWBGs*g=C9s-ZCD#2FZ){#s%k znCTxtxjfrLn<-SdUxM@Zx>}dBHL4_>n9ES{j`%_Kc231akWjpt+;SsV-Td={ceT?1 zd^2Sr56cEUwdPBu(z4%I#qYKJ5%E#TFe@Dn&jIGdD({qTD>dNur}P!!Oyqm~r;Jy1 zf4yQ~e@TZ=W%G^iz~M5iI6Q7XjgYo&>1a~2KWi|L3~oNz%&b zPp%NS;C88IH(jK8X86Dy$L9tf;(d+6UfHz0EYUVAooKZa2=)S2O=5aWBRNHb9zd@# z9PId??RXA*R0qrMm=F=u!`&L0T&|&XL+`+ipH#SGKq5-aG~$lzr|!U8vmk`9*l#M zIhU0vkRvHPw2zO&OG*AB2-hjn^;uE0x~)>G3~LssRH}G-Y%I} z*~CPKo4Lb?rjZtFnknaZ$QV|W(F#;d-bS+*MAr;*X?ys3A zxrO69xHx1|$6q&6lcL+vD*Y$*G|*s&pQSl5?1f|zYlG?HhalBXDbgf4tAK0PYCCq5;U9R^(cjD^sisv3$E6F^ z@ezGj^v#If=L+DglvX2Nl!w(o45x~NY-rWyJl4NG$cpW-VFhH@A>x;B0@uB{P~u@V zeNL{y(s~yyqxKN=>wD7TojBb#Nn#5e*&?-3y`yTFo@(D-21|m=GWOG#%X!hd3uf_V zlj=1gZnx(-hhKlr;oc3im+;NHJ1d)?J*~SA<0c8bw2Y#E#uhFL1cOo6#!s}_+&@gd zJbe6g|Ni6aw>}4IhhB@;3h+))X6kX=td__S)>9OV+)aOedr&x)WS^3OIhEjso@ZTW5>0WkF z0KYkuKKtTxk*XbkHItlIMK%pnDJ`beeF1Raxf_Arw$q6=yb$@`piuVW@b$U3js> zc)g?#&Y;Ee6{vUn!7lgY8CV}yYlfA}5mR&nNwXsa#R~FJQW?Y9O+`A(cF`exB79y| z@qP>%$1k?4l0PjwIl1F(!CPeq_7n;%s7@G1Ix`{KnsX}_iahfkWm^kMvuYj(GL{5Y zYIrf2p>YmU(WGx7S)h?Z;mT&%j4Mq&;A{m~e|?D%EW;m*=I9MN#a0yrAg~wb8I0p?_KdF~*0d;&M6y4%Bdz$BT?WJzX>@`H&^< z9u{^qqZ^f2)3`!m(bS^taOkd3B7Ejnh@@s3ekyB0P80F8rBNmHP-wRCAngRw*R6r| zX`48e!l^sIxXm?1gL-*;CabO@06~6M&4ac<3Dg^_pvIhaFvs2Mi#$Ha-A3X{?{xhU zDpEpkXJ1USE9MjEhC1FbF4pIL3DFSLASa;ZbOg3Y?5sHnS%bZ&Uz9zS=7sLxUy*m| z>Tx%DIR{7Y1-%$y$kErWMlM``>m*R(X)MTU3b!rnD$hJR=exOyx7U|oS`pu{LCtvO z)8~wT-@&OtM!NnEDmi4f()kK`^}&5=25D0$G!n=wBoe}~LJA^05ExMAU-Qakvl?BZ^WBNkmbUM;YR@FI`3B}o8_kK)Jme-?I&xLZ{z@*I*|O3 zKq~}5bJ-=?$v|Co(L%Tp^A&VCtU>nll}<`% z|EAYu@9J&r``$ph-M&duD>FpOqr`FQoq@*F#bkNmA{tL1)1PiCqwm+wYn?{j38(f8I(l+0uQt%?+5BSi<9x>8FPQUCoePu@<>sd-Z8V?XK6^e$ zJ;B{ib|{|$cg;s{c`}Eaq-Dt>{k#=-(zK;dCEAkif!q$_(~35q#86c73$5@^I?(@N zZvpc@*_S6|Ddyo@qJCvR1!#MT22d_w@Gf-8C@tuE z>md(1Lc&umDW!+5l&*n6O|J)k{fGor@7~|*=z!w<$FARnwdxkErD)J(aWGkM`Sb@d zL*9BQ2JQIp{NG`(KpaH_elFfSjP`s&c`LM^y>}h%m_>cQ-UHm+eZL2SP`_#9@vC2k z;6lg`y|)PzehBqlmbaw$E`j<#OrUT`s2_MFRP24AK>foIC_EzS2Ocx}yZ^fc>VKd> z{SQ1*IC<{~1?s;`5A2@}-PJ!E&-kwX2R^eL_x)ey!2WMLwL2p@XFXkzAi<0w&1LTg zKIiK6KUJXqp~6l{65RVlq~(*^A9M$_Lwm-2XM0270+f$_>QJJj%WCE6UoAZl9AxbW zs{K5*BB;>J;IKEZrIVLUTmk}_<4o`(-1Nzm8aXPJ^uRTgESPM!I5?bkk()Q6u7T?w zol2mCD=^?G17!+?2uZ;1-_uvmi7}CbkWbDEf>#Wo&FEY8(d~9fdBC#_1TewoLP)gG zrmJtiTYi9@;=`N!Z@+_Nta$rug1VWPk_D*A=rM61BJ}qJ?MqewMo{!|jUI)cQ0S4k zPoYbm-T(2+PrI4w2jLJvhE*Me@Ji(Y8%dF|=Jj#X0E>wrgxq;~_-7dg02oPVxkgG# z{|_S}1F%3EP*^!HUw?jp!n$xK-7@(4=XVd`P1@;*+?}ZhS)=|0Ov6$RlybARLL@2C zq5f65A{|4^m~#!4ST|nimnOop*%XU9Tj&+Onj8+KQp_#an|x+Rk-5zlX_--+3~%(r z$c$mJb5Q}w+}9JaauE)G+N=oYF2jli;VF$u#y}_Tbey*Ca48PE2T&^RixS+JoX~?F z8?Q%QsKpa10RQk5)+eVxF1mv@>5G(sW`~r+5QofX47!oncH#95$M;2M=c`tJs%ewV znQeTP_NO~p;_D!=$n6#*JYX3SyFbOTIoLz74-p8zq96UiB}OSjRZ(H<3!Wb!z&m~!CAY-*|{n`f7X zL|XxpgerRLPbh4|dX-Sv9r zM)^Jv4vmde?vd~LRHT-KV2=Ept^uN95K2dE7%LlJ#!DBA)8E0UYKe$PUEI`xq!WAd zE8QY+U`NvGxYXy#t_P-YA8Df?(m;iaIEjFZj(lEmZFD5eA9~3(9#(J(9Vd-_I;Bmy zp1@i+o-H6c*SBk(CiXM$RMVilVV908LOL^zcx4s8@Xt~yS`gj|;_t7oE?AV7IkKB# zjIIbM=Dfdyz0T3!X1mx6I;o+YhR$q_IN;k|VmqJVn{AVDHtH_=Y;FkT5n+P1ng+r7 zmoVfTUP3nwle|>;(Ct-3lqidJfLqSHxA&jiaCv)uv7NwrB5xZQh?3hUgQG~K%|vmD zSU;WPvx_;8QuC53VX!h9$XF5W7pq3C8q*s&g+8I<_Y$OhvV~@3Idf-5GcOoD=h~vG z_i%fTL+1P%RX#V!)QvJN^Ud|ejj}9$y$cqv6P(x~XM1|!UL8*Ds)+)SZ#MBUDtYa|SR3}~hg%cU{~KLvaM$5v(3SQxajcPd{1d@MB(@;VDJ23Q@|4kwseqfX-&igyqhZk-o zI7aa$9>mX8hFM34SX~ZBAt-6V(Z}t{>RQCK)bVP$P6=PZ^U)}8N3%SpYVjY|ERX9f z$JpDMQRke&Dg(x}dPlEWuu@(upg#n`R_E4ZNoTS;$ z#^Y~Mi*s*4c6vROE|icrEwzZpTALJsJVVT2cfhb1Y>ef~8<^5=IHfJ6(!9al9j?H1 zwk#x{lS2Np4Xm-LD4m-+x~u131*F5#!qbUq_YU}vbnx~As&w%>L=><{ai;VF<5=kh zhT^st77Xp1dcqa?|0@*s3j)M(Q-4#Yg9 z>vTQQVDD@TfnzZ;z?kCL-!H%p_&W!=TS*CgapDF#%lHlQL_p9i4&BMc7G~6RhPkkb zePJ~65bkP1LvI1`Ki!QnF8LPj6$xSn;Zs;i4RMZ~O<(G;2jYVLFO@CB$CNDuYHK<1 zhl=QjD4}F4I-uZWmZXziWn9%!0nC4ArH3ZZ_jAv&(1_|IrFzW?>1 z-Vw*<<;BW+v$Ki00oiZe%#l)xhJe`7r`0em9=SYD1~TKeFjYxEkB=*^YHhvr?1_lO?(eum5l_)_;WUvO@&x7+20BrWRMVPU*Vdd?gb~4& z(^TNQ0RADtCtR-)Bn`1_9u{+=Vi%~bZZcpuvq!Z1qZb!jXfVyMYWzQs4o9b>@zKf2 z`1E*mdU|sI&*ReteCu^elCeWZM%xHv$4Oz)hWaiH`pJ?klJ5wu>4Ew^IHS-ZA+|o~ zDhD243NEVfA1GN9Ga(fD=u9glA1H`bV07fYMLfhVhp871-1x5KegnDBibevA>{>}Y zT)3VILJtnST212m!Lb#l=ZA-P;&4$dR0Gm{ZXiu20F6rR+L4qtVE}g>ATTRQl zfS1H*as%|vW5m{^PC=wbnHPFGj9kc+Q@iIj;G`VLH`R6pUx2MGE&L@&*Ss8{cBDLq#{7^YN~^RuwC<< zt48cBLDG|H;V9DY z{k_k|@h*@2XZhK(asGEcJH|cSJ8mAS-+tHgVl!wma}a`RHs_Pk@kvp+4Usu-r8Mbu zKnXVj6P2V+D$vXI8HV#P3=<@z4|>_Ln8_>JMDzYWx*hh?Ig%WVM}u$Pe`6cP!*twu z5?9)&@t~$05?@6{as9Tklio$tE%o(Mg4O4CZx`L1j^5c>8+u)V)R|P+n39V+S9u9g z&-kLKTMHj{Fq;6G8Agr+)MTNa?Mrxa!j@Wv)OX=}YNn^82a~^Jv(n8~$q}%1P2JJ# zRw;p36D6*s$49wuOf@LOCA^bBPKhSP={d;bX&{vT5~1rU(w$(SoGZAPG)vMCXe=U5$&s8=eJ*fCHwpX5BhrF$<^fI z8d-(KB*>k)h^#GD4xzn0E8s#;-(}(ch-m!=t$RA?My+=?az=Oyy-8vtg-H9OrkWYipE~=p@I8!yXTvvM^h7E$YP0jS^wYEtv%rcP!_k zh3RuzqYKVE6wqo~v7M%qE9tm8icMZ= zg94k2yn{Hrlit<2w}L+J=^>r~^*5l@{b5)iY1|13qW5TTK#+#mJ&g4)`G)}cpk7?v zK>as?TazVepk5^7e0PWm=^cd5!I;AM<+2S0wtoVnS7zjk0%{ZvQJ9XUcYi;yodY%G zdNzU4cg}Qs$U}R%D)MpfhuJD-Q-wm^-6H2&17tI6CZPam3bbow8dfTff^jM#>Pq1r zmD|82z_7Jz{0eG7F)bvU2#k^z)m#KIJ0J@14-aO&i0Kho)-7ZKL_D$r38*OvtobAn z?4)H%oiyek=CVD)Pi&lQkFv*s12BREd&&P#GOcCe5*l9?jcnPzbmBx9occIY2S%F7 zv%BT8Lg6t-O1s;oT3S1%Q{-!F>RCa8ercR@B-3tpU3n}ZX-+dlEH3=7N;kDUIDoip z*e7%dD2~|(L1a7?5vyiPV`|!7db0>d(jPw4QJUR{tjZbDaMF%D6gKUh=-0=DdNZ6Sz#`WAvS${ZV=mN8i6Ir0o_21#|7y^#iY*H zl6i1YGr8Of|Jcss9ol#?LgHY`=!BRf<7s%VOVx$YAuF6q$@fAtI` ze?ou^cbw{%%(n}vP2+-}Rv3{W>)?Yx&>Hud-ZDAnOe3{-UIX%Dy=L~hUGLSZW<3Z_ z8@-&$r>k2;wnpas7wc=p&}PlqAxycXGSU}V&hLuB8!MEQ?C2fj7rJIe+*r*~?d_oX zqI@%bnHIl1{T))Qea>F!yf@Pq+S_m{aYO$1WiPbH2IKDe2=`_$?Cl*IP-pC_q$VSh z0|TUhBE^7uXNc4(q6l~el@p1A%LlOL3`aO{iA1%cm5W_g{_xYhq&=OoaOs56%}y6x z;XB=&Eo>8j_rz~u6xSS%d}x_m+`-qixmF)hN5kEb4V3bPKNZ!Y;-M@Y#oYlmYJ$?l zk8)AH9gGiG^d*zl!?}(~oAa@ljY7N6UFKN@FcL>8QIQ%nimbW?(~@`==E-!Nt~zwN z8XF9V$JzB7Bz|84yMPL{Nx9AQq=mdsCS z8&4%u6E_a2LXNvImXom3!mwQqlbqnZZv}Ev0b-B6({Dj(Kw`nq;eL9alyXVs#f5Q@ z9!xan&Ks_U@%GcuhK4D)O2Nl@Ho5hLIWmFp9{0RjUFx=Ur8~>xNCbVey;(6Nz6`G4 z+eyR1suSa3*f#6NAU6!H#gEx3NdFalZwH}SvP+Glj5H_$1TqGpLn#!4p!~z}wxDR8 z?A&}T&gK2#wvXQQShTHhFUz;^?eGLMxeZOEJ63^RUSn2*os&UyTW-&87EsDH*P1ZV zH;*6%n^bdZ4KVKohL1dJn5)B6Fjtc9sF9qt2wp<;APPF+Hiy5Km%eP!__!~y50uSe z0^h^9#`c26JSw$HL1Tsjq?+PMU)oBYfE1lpojx{l9M#`5U6lwJk91vWAX#RPNs9c3 z1w2 zCG%7w=`AE7_uCa1`WC4IL1l2#2gRj69{(BPb$VosfSD(to14D=^mc=^d0##=*XG;% zKglf70nG0Iq}fOrG+G?yTogcGp^(6UPVgS6&l@rsDX{~$dYkQ?H#G`yZmkWr+6!a| zhYD9)t+*Bj*+|k!9hDi$z+(PsJFNvRM_Urb9w_dKkHE`KjBpn6zmKL-*7%2Mn%(pm zO)E|lcub80E&M2Kp<1%??4Xwwm~`a&G7Pj_9nNr)^KvF9&rk>U#5V1Ew>8CB#DL~z zM-)&go7>XlT&zql9BV`O8#i7>3G4SCKm5e-D@7Eprtn$6f7t%Ic(?c{)J6*}a?vIh zj0P#0v}wQ=!|U{cOsGzVh|Xz4?i!%JhO`qjlm8bT_1{8H^9)Zu07^+P0HtYIAGZn@ zywEs&^dMRt;Q!n__BR~#K&cUo;3f_AC?Qd5vjv>}xSDJ>5EN_`J(Yph$5zu9!I!px zCr;YRsrE9j;Ijj&si6aw;?asA;?ZRtL#*5eoI_WC51|jN&&vj=C%dvj(kBxX()^|4 zCA9!mTvOPX;GY?nT$|vZ>GQBhfatXw$mm2geK;{ckR-V*FWp*dVoWD>!`eMfGedEV zNk{sUoGXEn2t892b{FQyr1U^W^y0VB$rg=bQu1d^{^Y+0c7wEP zi2JyzYEvI?AFWM&oNH5qyirHSl0?mXmyl+nc~BIJfyX8oUBO$`6I|@p5nhXj4-R-3 z$5CS?O;8m9W;+3CI^uB17@i^XO!_I5=VWloWzCfg(iph(?g(M&P$7~Y2}SEx<^Z6umQ@DE z;}h4ekUo2LgM`7(V!X1Gq?<=6~90APr_EV!NhCMs*a{U9=TB_pQLguA7_nm=Ow3rwf{{@Dn)5{r}-X1~3 zxq~cvc(z_5i94`|QyT$VjykbuHAr7tnK~>cCz%1mXpVw)2m|L4O3euW%FEp&T6LkdUh55skG)N)*;xV(9Zv*GS$d*|^k+7K}0S$9L=u8Yyah=ZT$^?e6 ze&HQfJjHUu<7@D#WwV0O5%=sk@D(UKSJv<4c$>I_oUtu=Uh1O#NM`>8WrqjW6jSa1zl9aib zU)(>?kUUy^y8qX-?rlm3n_F^lvpbm6UQMZg_CJJy6SggR8e7iDeHnVm9od3Q!iGA1 zI%%BFv1}hOIr;Q&wl9^x+7Qb18R77sfX$MEYle>2bWlE`LIo8*7?lquZ;=KnR~zIs znGheRDLBU~=L+J4+0#h_BHCelfy_qaI5{|;??7L8>ol9B0O)p-z-*{z(h)F4p5nTN z>4sn(gSRvu5g@nOXwTKMZ&GqN``g<^4=+w@Da5<7JU%Uj;cQ>A>Yr17Q891P;_59~ zI9@Ytb<>6>;1&W?knaqvm?c7xXMlKmkbvn?3f3ek7b2eS)%W491}J851Hl7vzBTPM z)uRCV^qN*!a?w(GRS^s+mvX#BWkQ{~2{nT*=exQ7|q)+KXoRiThnt=KkVUD4nFoVZQLL3CuP|bD@u5^0-B0a5k^bX(Y=+(?o z(w$a9L7pQp$u>thv2ir%JAIDKox(JJ-I{!F{`~rr7?#Ra%Jg~lVseA_bkd*;-G!$_ zo6XN|pmDY@C$-5eos1p*G}zMfBR=R0LM;DI+mFx=z{ip)D? z^F9J|n^C2911#G0DWG3a$|qHLzs|k@`=Uva(QJ%C#&>>m15LwNvia_(zXm2b&>yQnw-jp$T!EY_qCY`Yy_4YmtL25=Qrli5av zo0=QGxY;{>gasTG@r+V)TGQ;djN){y+cLbIWZ*;n4wPJgEe?4emdG0OLTe@$1cnd- ztCcDT3v_d~*oc`a8+_hzx>smcd~OS}d9M#@H&Hi@dN$PFaAUVmQ4wQ(UJ>X=j`?MJ2bI}@ z8wto!Z19^tx4L2OfRdk)`@{$Ad$jy2QjJc8k-i14e-cn<_A&WVSdwOA$`c+ZVyNhm zKpV+H5n>2F!Bp(^0a}5yn$W$m9ulvi(F-_mJ*x~NVVe-U zQ%pp~=#W-rUJx5V#EZA!hr8@i@HvwPqSShltYk>_eNhMI{A{CokGjo~GQPI$qX$rI z+KAEF+~RB_qctm&PoNy=o-VrGGNZ0uOc1qm1vTXE7G|*2$QVVnF0Y`iAemGM86pA> zdsS1zHlHvxQ(A$-6zWmLWlOOr5qh6gF2!O}4T(}-;HM^ZdxCP!uhKapCe#iR{uHZ` zt;0HC*sk~S@IcT73_?};sG?ajB&H0w3WQIm zg`-G6_e<6j=Q~#a0xnE&`9^^pGn3iLWNEkPbyMy7VhgW5iHJN4u{-4W!Ay+4=|gv2 zf;2WZP=}Z__{HqhFm<;LuDuNXZFQw(-nVyuyLwu&{%GiR?%H*KJ)H!BpP z1hTii@!xKL2O=JOdIx72YWqClI5y-XTSXO=3SlMktdEWsnisBSu1+06Dm$3;C75nfe~tsZg?6DV(@UOh zP!o4D1I38Z`|$)pMRL0f#>iFEo|D@dOar%}kPwMY;{ZU2XW&y&mP)L6PkWN#IE7>f zOvfABt-ez)PA)7VK`oJzRbH`H%OX27V28 z%AFc0pl;`{n4twpDqNWJOv(t>;J(G=fMad^U!IFD3}@#50(~6nVL;~c0$j|Ty83o_ zyp|G*s!GHnT&|u~=3AYS8KjToiBV*!A2pNH0T(EjsUmnnql7*=9kMvIlE{TS2%h5^ zPy!XoSZN5kDO+_PJPm#GD_G@iO4dQU7qI}t1{(*5jZBHadGKSnJU!9&1cADO-VNID zbb=76Fuegk&<9&Bs8;|78Pkh15XD?hD=StD(+BX&tQrah`_*(fmc*KyTnCY8L~9g4 zIyy%7);htqlU`LJIXUtfv$42JMg9spg0pSEb6g5Dgq~8t!|9EdQYr5JH#6rU#>|rd z(Tk`o?pB>z;C`oVhcqR$hpy*1@ldX;-m09i5^A?##}rodI{4g=!LS;vj5E`>7Mv_1 z1N}v%Kv{RtyNnw0p{Df9x|>SYkXvnvD|KO;chIaMH3jr0sF8+e!X7}Ok3`lh{O+#5 zJpA(IVRQff{>_7&CtVHQ2lw-jBl2F9bxlnmQa|_)?8!0|_~GYYKHdKmVU52V@VJCF zDES0azvbn&8okz|&a#i*_L#dYax^m_x$*={Z9z0kYX;d7C8;kg9NxxNlz=O;z)d^g z?oC&ML*C|Kv8h15#j=7ME-%zedz0!dw}Nq}6)xS%+C`AiLL`SG|5;duEo%^u9QnyI z_`oQ&s-bJSt(peBVrTDudiU`9{o>tw*58448#g zY;$C$s;~8JnoS1#Q;9}4kgfbc$Nnx{Unv>})!KG#ibZTw{?;Qo&GPwVsgvREI5Dxz zJ*Kl72h!zbikt9sxg{jMgC-Qb3r>a|5?X-N-HFzSvg2`mmX4HPQ!h{fH|VXw6av-4 z5$usX&bTWwZbompjiEh~ZMN-EKd5bw{F`liR84BzpZgKhwhs^Y0frzcMce``%pj5w ztoVQKhXMnj?=O|~H6%}HMfi;Mu9^xYQof7xy9IgPz@iXMxIaOSu$s|9uW&j=UY+tH z|BeTJjd~4TR%b}$0@MC(^W~59myP#uJBI3;1dzzkT6Rd5owW7ZnsrZOY=(kjHCRs3*9K{QEhiti(v2@-(~7>?pp+?-NcZn7T`AGJll|?Zq#+ zZWVzv8a1#1BB;4d;XWP*J*vz84!DzVUxbpj=f+;RTm(#=6;)d?YxZ4%4N2iu_R!b4 zh!II-LwLcNM6p9MUGkpBVYXKu!3~knz0kl*4TA73lYH|54vJMqvZf<5V~ey>S!I~a z$Gnp;%ycL=R@a;4!ie9(++evP6Mz>8#ZhC~)|+;_X8{9vEkN9)rYu8rjisBb$*K@; ze9|B5r>VEE#OoF@fw!*v7EJ;eWlVF^3fE&F!Hz zXpr=4JC^ro!!pi-Zs>*0d`e$IAkFM9Le1zfLo&xW&{K?#3|Dx5kortl*B8mxnHO3H zZQZoqM0vRj7(&+@yr-8wGFF)`T4Vzl(z8KKz@B!!HiQI;Zl}^1BuUP+9ik0xR$ZST z;e0GxEY#Q&Hb519U|bDpCgKSONCKmVk+SLJX_IdXWdgYNXWz1_Rl~!~LsSGpY<0%h z7|{SV2b_5JH|NH>e+{dqEPQ6>keFxTyPj$}h|8cGOLg3%GNzky%|C182oBKLq9kfj9^?et_lK)+o2_$9!5G1eo2PuOT=}6;kjOJhF50J ziYv{eXqpAAKu)YDriSTpqjFQ$dKH+9m~Qd-`@^fv%4RB!ci%v&9hb~lb(!$2SoW8tH0kCnc zd5~Ap2@XJrzw=isB_JIhj;IFlJu4PQytiU11>)L zHYZ~k13-fL3Y8Fsy6GC_8=*T~EMNG6R|1xomnfS<*2KD)WumBX6v$sS`GhOPK{5&F z-DQ$Uj}m{81IC&5;SLFJ6W8w4-_YAZ`nc))k8l1$I%8vr1n{mQ%)ApED}<%kNJ{Wu zqkaX_bHmDjO1-WN(J{;5)7+#l6CEtLR93XeyjT}%k2jr=r8t29K0`+!NR#b5(7%nF zJc%5rxhr_18m;%ld6eMJ!+=AeOFk%-Jo7n0q{6yTMzdgFi7z~ka39vx%i&P?)gjOe zaf~5$^Xs6a%A8(SMg-HFlo8fox0p5p4@hYV#5i6cA-y$vY65S?8!bC^M&RN996lc% zJ|CSvKR!Nub~+p#-+%jz399*k%>3%u+3OJoHG^0!tFvR>v^+s!kdS%{^MhL==<+y# z2NL#bMYmm)FtSaTkVtwBfYSNa$QDzcQvGJ4b6hYA1%-rTx<8^&1UU5sOheXpC!T;o z1o|FLXm))|?Lu9S1XO>%Ms`W=926}cfir=dVG99n+y>Bgn)oWuY@X3wXGnlFE;G7D z$V%bpfGAijD_j}j(Trc@{Yp$4WQMr~^^l#IAEy%cpVx24gapGf>*v>~ zi#o%x00-37c0F4z7Q5|0$fc6yL*Trt$?@yReAFmu742wFY&x^^*s)IwHwo_i!|Ol3 zzlXkh^Zx$+m&=cD??vief!&4b-8yP;wrwD3BkC??MLCN!h0=o8lQ7$T~U%S7_qT(RHs*O?m&V6GYCHxqKSi%OfTY&g{u;H)gMq0x4P2kbxQA zeucTGDBm0U$m}VFH_R$i)?Q>-u!uYjEzx2h9E2RyJUdesVImPhE0o|^kXL2*{{Ho6 zR$Sg8ThO}?_iw=yiKIG152S`#%my<`S--6gth;n6-V_+_KK)j;#69{)3F*RRqtGU% zV>7U!?xT5Z)zDeygT9=oPl5q`9cO^+;tGfoqUXdbEMN*6skosz$1+^E`Q~DhW|#aT z=}iUkp(4jISz+cnZ(JmASK&w552p(yryWS0IVpsU$LAtPYow%5yfWghB>dp>5xwkb z4qY`O4sH69N=J-qa8PdjnBn;~guq?S@GV#Jf)RrHNcSpBslsBwRIX6gE>{FOP_s?{ z3kbNg`KtlkOGl?SV9#Q3Kx2#!{F!YN>@q8VYEQQ;P87Ug8<<_+oFPN>Zg6Tk0{G{E z$WO;kNJ%F(KcTKu>$E4LR}cQZqKNS zse9Kjb*C)@y)RZ5x5m)o%;8*#JX&O;5l4?w!~;WD0$wJsLwe3^6LF>&D@#b1_HcxS zZPpe%CKRzUmps(U9DxPP(SksDEc_Qv#Il^?49RROf5Ek_{qmj;`h1>sGn0>cOD-Nx zv2&0`G7xgaY{OwqC;s82l6}jxGfLqk?Tr7TC9JmFg$~B5V(jf^tO+nbC=Vx(K5LWB zElMwI>a@F%#th*ng?o81bqz#|>MjCOt75I`-QM>j@95!gan@BMJjD! z9VP+hLSYiR$KoVn?$Qahf^EK%1NwVt#$cpe?|$G1Vn^7VdXvC95WFlayr#<3vve*S zQ>h0U!DWESAmvAj!&f@LczalpEUOO=x{M%2vY&+1tTeQJb%WD!4X+_>uc}Fl!WS2j zoySu6mJRAv9M7Hxk={VOx6mDzC$ymz20(a0h+4x+{)iT$_xce9Ru)>s%lZgxV47_p zoV;tn$4i(vv zJMjeSeFR%u!JWktm097>xl{!Qu+@8EPn0MYc@JSNfFt#6kg2+4DUb#1yRXPnsgpjM z+eRD|ToRGbogPHn>*b7;iGsKOiz@V4!;2+Nifp*}u|p+()ioB2lO*u8?vVK&@KDc6 z#s?`@h{FkmW|!nLF>-D&lUOIfHHn&qA=rojx0+=^FcJfX%}7lv);C~H4E>CJuYyeM z+pG4~WLlDUx?6?9NaV}vb5QkkP#y0WGc?7B1H9&w`u{KcB)%hm3TbkYeV z+@y`_^mfu`5g98LiekDBnIfhiLl zBb^d{bQgu9MXL^$6nw(Y=MIiVBp9kRYuysTc1X;rr4G4BC?%zZTL`caswrqbi{&GGJ7}uoxmE76tI5lK%hm0t#}s+!ix4Px z64Ia5x5`ED6Uo;`gkZ20NRVNNQjDny3e5fN%<)PBqoJKT>9X2{fnF%R1peCjjy))7 zee^v#)S`-2Yffu`xMPR8U$cvwklffUe;U9LQ8nWF{`hqb>G zI9-AAAX1R+IEIkJh|u%|gw^67SbjKN>~>x!L(p)R2Pe2QMkdz;fcXF9rux5Rg_Xe(44-8_O3EG;E=LnR~z* zKM0=0Y3J6dV1RlQ`;gwry&49+-@dW6H&q}#KCn0>UtE(8=7R%s&u#4O!rID%#yuZl zq@1{n*0|W@4w5gZ(u$Y*(WaxpPlg7hF_wqpUHeH5u=*&f8>qukcXHtB{M*C*n~z^$WMK~o5x^#(-?NfMbxOf=s|7vD%!J89hrcrH zem+B4duS`5MP;qheLQRQSPu?gT1Rp7CQPO~D7%m--%!0Yp(|h({cZkO;-1Fl+ZBzpvw6q&Jzl#Emk3;gguc z;TTTa9$XbrpI7U3EX;!15IW|4{@dp_bP4?vQ(AH!EZ_1V|FjRq+`9waW$aHg#8fE0 zT2Id_hNa#C0&7TiX28-07I8eNuJk_J2W&?r3i+(g-u?C6XF5<9APCY^iYpN@R%{=p z`6n7*-{7Dqkl)%(z1^gVKixi>CjPWY6Hmd8N=MH!>p0A;fX=2|dC0YBhOt;a2^p-jxRU9TdfCi?mqYU_1DN99f zAC;rXPrnjGeyVfxl4--trwfAqLit?_YiCk~A#v>=5I_h68%Q<;Pw2vzS5P2S28Cyn ze1f%kdV*Rs3M1(FsEm({KMC)Yg?M_@W@;p|C6GEJO*hhYsVt{*lMU)iolOz(cKP~$ zfBZzXoyZV2R`wz6G$(15)?mdtLF9Wv?2h z?mFVkbE7}mR)VR!Z6hB4QdW?MmAWupX$Mf)HZN=RJmxP=akp73$Jtl12DmmL1G%~u z*Qt+6H;uq7xJM`-r_L=v369Oyox*71hzSh@sd~5uDK?&TPq=z4hNa^~MiehWLGZ}D zbUKUJWk|zh4H0jPoJldH%o=1y%e!dKxvOWO)U&fmtqmyw>X~;E3tyHyOV^soiW^Nz zwV0L$nx2aNNIkVX{c6_Hl-B~lCwzNeV$Ee?mZ(G-oOWkF{$akpwn=D3nGDtdg5N>v zWRJ)gMjGWL5(H~bc5L6Kto!KEL1$(Y?CYJgbb!F1K|`kK8qQ$22b4Cn@NyYp7wq+N zai;>PLqtq;LL^%eC<@sVX_sy;7|qCcl7r;OUQZw%f@l{Oy);maQRZb-h4h>bq-VRm zep?j}n<^goj5k1=Z4fwUIi?4{J{?Gejw?H^v&2vFUJuAkh{q%+zyMDe)R(dkP(zN7 zdMx*Vf%_5<==shPG#jP@Y2*?nq(Q@G!NHCF;npcmY@qhxjy1-kvYu~3w^;P|(Zh}M z3CEGsp_JB2t+BF{D&IvMlUf{(H3d3%4K{sXo9#1c@Xe=AAM6TzwKQa9rRXUklF}Xt zd5swf&jy^24^Qnx#&NfTJudL-d@9F7X@7ftva1f75zYnnJ>=b;MFHS~>8MYlOaX{N zs#uIAhQFL_sazIlJ)7lprt&NI=*4-=ei%QZ(Myq~>Z9Aa!`&qOmc+RQMsOMN&)M&k4^JO4~Qnk{(rd(Pv2F18;Zd zvNv&D2fVY%<4W3-@27pFhx9Ul*Nf1VEgBe4N6JcYx(0_->RD=t212f;V3fbYB!dAo zwgqx6SkuepM&_)h&6Q->XX`dE519}8!xEzR`?+JzBQT4R@9t@WQ5@*+E?jmyAbm$vW88d65>HOAjW2D&kQ%HgNHG zyEXIc^>KPNph(+ZCiur8lL#%D5F#8>OLr9?<~CGy(b8(K{{UUX=7$sMHQ;=zi?mxU zj_Rh;xO1;YyB-s%7Ofo5?hLWNcRP4C%s1!P7qh@+xfRUPu2y>nC?^Cc3{pNY{VVNmQT%o$<#TYaAYJ>E(TRa4bYb1>B-4(HwKdiH*<nEJTTi zO%W35*ptZIO|Ay({sD$57VGO&E4b*x%r8KEpUDN^orerY>4MW=3W{l{L2;$bC$;uz%0&mLDbiH)WGirQ z9Wex|gK!C%LwbefS@mgfE<}}t0vdq_ra`32XLboIMCLb8Hg?6x5h|+i>lJhry9>{{ zU9}l0FcC?+-K>U%s)=5Di{YTtqG{=2yMZ~!LTww3iI*Fkv7~3<8sMXJk`7R0tL1YF zL^1vh>jsFe47LY85Fx<(0v!yb&IKDDT==*mpuHV*tC7|+)0`Hpc1SiZBTPcv?|X`! zV#L-LgRZNcR%WC=Lld1w3tLp5rHS}O9VosWni`L|;7scy6qd_hjCn9RP&N5x;#3%0 zQh6~In75~gJj@`qS5C0fM}Y60%sR_dfr`0SzBNDOO1 zG0B)h8e-2P9#Qu*s4q2i9-?P6eDw_8^JDIzh^?(48W~&UHPCTyDk17>0%e_d}y zN-C5n{Qi&X@V9r^}oTA!#`7FCdDhC@aU(_c|U zzkmiBvt#CByVSghy0SJAW|%&NHotZdAYQDbNJ);WlRO;v&?ezgirNZG9=NN_pk~ji z3LJQY;CSlAJ;-q|JOnGHkIg!Ci$84|!3X0JnLK1A0_0_AAYE-DvJ8av*woYdP$4QO zh(;6#J9tAKyWCXd6M1}D0M1^S6t|9Rpm@UVE0_cs-9(>eXAG$dw|OCNSoP2-Vh7{c z25}0-i}@1eaCGXfi+J=neNZotRn`WG{0`z7UXjbqHLRCk_03J)G#GyV=GV(Z>|6XJ zt~p;Cb-|{=?wdpYx?Dk*gHX{(re3y2K6ST$>@Ht_X3FKw{l9*>|M2kc_50oW{>}Zn zzuv>iLn=@z9df4vDpv&6ZV@Yg;`EG*T{1^bTBZ9(QtQnFC`sCUUWeqkck?BnW`L2A zh=`n7Njem~%k}KaI(JScY9Si)^6c*yqS-qM(U?_u()Z@QvUUv)w>*zXAlQFPFAzrU z9mxkI`%h8FpKOLw_!G4uXn9x{EEbXcnB{`F1T5MRZQ@*jR;06FTo`6KAYHVkoSBFK z5z}nJg;v314-bF!FgH@$rh~pIj*7AuKd=d@sb!av7Lxw6If<(Vg1}F61O2^miQVkdO;qbAcNT+T4cm<5-Af~wZo3g zqGBH*t((+f8^&~mu0Aa`5EV#f5KV^$-<)2xYkYqX-CP(w2E}j9j!`VU$-?pKHEDo) z7_@u$kz{kqs0@8zq#AEAj_C?tD$%vTo}oEApC>~ zz1a+!YkifDCVUkBf`zlwDP5|EW|+GAqvb+OCmyB?LE*eKN2a;c!8d>Y^EY{?K=n?( zx}^DFy*a3~Ww^Pi*S)6BrQC=8Jv5~W)Oc)3_3Q4|`}*hs{FqdIX0@4CI*$&pdS^0m zF4mW*Dw6ho)9$l^`79Zwj_XP<+|htvpj}N|fIJ%sL)l*1k^=nXj+PD``g!ZYFwL4SvEfW(MRE`tI(QIn9zOnZ_xdmQH^0ckl_o&Z0g1JS5^`@PAbDm=jS!1t%ff?~Hu=yn z7>&5YSP(-d`ryBX#hgFB0jVn1Kkn`p%bLi;#2nlqqcNe*lJm_`tC~2&M`&x|#YjG4 zSeUW}m5>StVWVB4J~`rP#8B84Z!``~pI9uI3?4q+zy2A@vI9|OT}kKQNwd+KI*HGb zIQGMCX-NzZ3;+LF1QU{3qn9{Wi-uL9t?Sv==Tx7TEwua7eZjbH&`dJj@$Km|C{qVa zqvy7?toxYu+2&RSp^DTBeQ@0fw#rmrZj3qbze=c*ej}wy)eFwFmP=)SkEoilzem*1 z*xw^6Y3%P2H8uA4i0T^qdz^grTb|KPjAtF($s3t|kY(6jxHJhDNEUDjk>T~*>Bpac zdHu;$2u17bUmm`Ex_^87`u&%C<5ZcD$Tbr%VFu@I8v@!JxY$icp4h>$LOUXZw7SBq zEWBD8#HP`*^y|q<+o^nMKvtzX;e!)IkBzf3c^%E5EU!sMZx`JxQVHZ`?lzZ|u+y_n z{)(Bt!V9an**AysSiQPRA}PJ&`S3739rw!DGFeF&8}jF!ZOa=>l2u&d21Q^oV2%Z0@)IARyKZn=!@IM)q0wns(7<>Heu5kNiAI4G`yh zL>}Z08I#;>jVNc~kYB=finE6H5(r_im%u2}Ht5~rO;o-EmVyIad1CYbglsrG{E`;L zm!G1y&6-g|LkhHlL-|081}cX{{Lm&X;2cm1V@!bcPMh!S7h+O5*}%dxBsV64Gy*|7LLf{~ zA-~o$d6v4qO)3&&-wr&L))wq^rm9`lU@u%s7pp)4SN)(PmRp4z_EeATu+J?Bo02@R zCB04tR3t6WRK1HONwT6lH7w7Nu2N2QZ$T;Up@q$x)TpnQ&4u%}KwSFJBz2TuYi(-B;~XREujzG9&b{;+ zqhJ&frf_P*P7JdMFKw3~mDl3t3YB%i5~m;j3MxRd5WIbLh)mOIJKLom!cPSi4u>!M zX_}jEv+gKd)5o8wyhC#lQZMN>R5nxb}~z9=H=9l51l5TI0l z71&e5d@)^r=lKE8uU6|H(sD%BK(%U)Gxv>T70d0l)obl#&x;Nnyov0fvPFuG0w4H2 zeOLIFV#qa2&$0dWqP7VPGMVG{YM>^m*df2cvexe?H~<2xc?tXId^O7okFwEbg{%g3 zP{?aYc?FNaDN7n2$5_nd3{%nv)#|mbztsdgBX*71Ev15 z$Xtj**@$AAp7&%gL@**duFqh|u+!8Qki~oPpE2Hb4~?=o3r@P0P;kEHcWPgRqwQ1) z(59$Y%M55j<)R8h3NUi!uM5|MsE|jhm?ijf?N)`n9+;X@a$@|1m{@dl1^hYgaS7|I z{lLrJp5o9f_MBI5vduXX;*g*4RC}yH)%wD9!1@TWq;Oi=Q>>OpTvBv`{o1@d8Z_5> zcVJ!kq*)SzwD;>~-9c|zXqVPMOjjeh&f;QwIk#_gVl?Vqi406@Pv=M#Pqg^_v9_p-%anZiF)k30bS@SU(=i0V#@xFv03BIZ8yDp z{)**Iwl}Z@)1ezBoi34$1Cy=YzF0iB>=5|0lcT{m@85reWeq6?XACj`R&q)~x8t>K z7vnqOJHEp5LjwgmyS>?ZE@1cE#x1!@AgZ(B$3bRAx&T{A9{ zYgr(AiBW(wtTaK8Gf8gof1P4N7o$pnzSIWWh-J(wg(n&kE7?hwMcg3A6eN{6yT%D> zYGfVDGp1>uGrO}O`gEsx#;jyMbl9)!vgW)wu;0_>NT2PS(&=E@F?HW+9$XPN!^XBi zh9>V#0oQ%xK<0miqrv9mmrrl*cV|#L|3$L%{1)HqTkH&!;-$$rkSmoy4Z9bNkfvFj zl7$Y?0n3W!!KSKXEcEedL1M*{iRS!A+AsvKeQ+^0u+`c8SgsfcQLUIp#XGcQrSbsy zO0T!|$n^&4nxZ?DaMG*j{Mr6mts#jrc*7xiz!R zX{e21+xg+Nm#sF4o<`(>EFJE$KU7A>4$y9?TuZ1QZ5lL(X^Y}y{Tk&Tda2hnSA(f?aHMbt` zJu(GQTo~GI*?udL$A` zWu3ev;1ZF;P%Vta_AHw9C6-Q?#Yk~tL_N~+;WHOaJPap0sF=W}Gc>_8i&8K`u|g7! zP_AE}d11{97a(z{tfyDF(PxXMTTNrK5RP!9lr6Ln9_~hVhDm(poG@ft^UViP-Lig_ z)h{st7KDrC=8pymD*i0G=o55;Q@Ou^)5dKs7&wA4lXto1A3CRw@;}-%r!9U%B?sfC zje1P6zm~Vg{yp>{(D%D0Vi$4Ip_v#v7&ca<)AgWfw@nPkPwv($>>~u8POcDoz@KO2 zAbOgm%r1{*_^WgdWwhSjGs^c-3P#MkAYHgzb*2zMn;KJAtK z3-d=&P8u7?t1ykLGE6W+7$vu3`vdURLS1<#(~pwLG)Y+Kzw>QPX1*Q3$wJyAbFiQb z?rweUXS+Mw9Rm^n_Idk`{0wtU%PR-3v`P_F_h!U^ZRfHIUT#2|b$z*PS64li69b^G zY2on=6f+U>d|?s7g`BphQ+gNu_n87=UoBRHsk_PkM}_d;uPW*3(d(=-ysSMJ6^+}D z*S)~&vvyA>jWP$dSf&9={bZs+s{tR3QfREl!~)GnDfZWl#m*nrZog%}V0B~$KdGe^ zS1vk8LyDcWL@d%8%tdo;$j>u?@f^V8QA!Hk=7bKQ9!tja40T(~`_q|CVRfb*jgyW~ zW2>ENdg|lQ6raq#a_YW)Yqr-!K#0RdUX1!@A8rc!ZLQYZPgTI^&C zQGa-dUr-neb>Z-TVGQC(QpfHXVhA|jwtcfZ&Lg$W$>#IB7-y>BWhrY+zXlikZQTgomC1lZ%!#o;rV2Q_H! ze&fhStMF6%x)cdtARbe>*fHW1KcS=`nhe`ZrO(q*Z-URNhwle*Bw&89(!OtC0m?Yn*)%!wIuqXj^&rif za}><+m6b&`M4f}wI45v^bCy-n)aMa(S7$e%#h5w>bbT3O9S*B3FpH*=vIulr2If6^tXhk4W3? z63z&*J)F_$!fi!JUBqj{EQ2idMn*())T&N4C9@l(e{xSZQ;SBKt}a9v$E0#P&q0UB z_@N!pHfr$huNm~o$%`j=|Zeot}p2QsIc1DD~Tqi_Oavc!?(TC|U5M`tx7s1KM zHxOs8vI7vZTw7QQ?X}{_$z&V-K_5~$k2IL#Bu@! zhz70Qh$C=@>Y&AMJxCuE`V{Bd{L&*{S$IX6TLB_93)idv2g zp_^y$|3a=Oa6{DX7s1G4a>@qZ?=!f0&A~?@403yps;b5_4$=mn+0pIui0pIui0pIui0pIui z0pIui0pIui0k;qkS^%+UcF5Z@`GT@<_wPTxe(O6^?aBRWS4e>Wi>Jf4-$6n2FZ+5yUWKt$ z-I$Ghe@8H&@wg4T*@Ktsr%#_EC>Dh=SpdBph(*e3oD8x5PBCi5aImh6i>D^Bi?8f7$=&^ml}C_RdEfzwOWwubNv`5%0fX^+b` zt!{{jFrctho=Z4>qBOt?fryFb(K12IyoRo@1`KgFeW_D)kB8jpRObniWU+d}Z=x?6 z%k+X}^AuSss3R7L_)yB^U-DjnT2v$0g2*Nerr%s@)hAkcN}phz;zXy!Dnk-NWc)P( z4AHcmU+PeR(&+8S!GBn%Z@;q$dQ%+vjZIMf)8F|Nr_TQ=7e;D?ny$OU-wpoHzy0~$ z`}>2#r@zae!>$lcH%M3u4R$H3#O|EcU9=vyIk*k!@P2(2b=9x0UR;yA#2&nX(|MmCJWm*U7Nymp{HpnN?4hKE8tLCJ_{%`uy&uQ2VK~M?4#W4Wnkl zzHpG0LHWC0BUBKwzRW;q{?UKf4iXnO@wGt3VpW>zEztr@=QE>A^ zQq-J2`SRiOyPrPXza6~!^XpFpN`iBXOdIr-o5?hq2gu+6c+s(&9+UA?l`S1SRF*i2 z5OMHhx`%=Y90DPb96lg@0--@PA;dK0dAx;94=t85E6zJqU7Egr|Nf7!-~7dnN>hlh zBW}(v&Fh4UK78U7Wj$j#iZi-|>cwO-q|&8c>E`zM&V*GT8lcMew(Xad%NgnV#4>=3q&vA-vw-*?)*Wv zO1qP9+aR#4ywK7BnR9{6n~=+Z%ZGv5ljo_gT_w=!qAhJk)z979CT4Q#BJg* zo8N#s(pkqVY?PNp{_q-+@4yAY1PZ-0*WLMJ5=m41Jo5ehJuI^lCe(J@u0rcu1R0VAJA!XvJXb3@0n}&kb%6= z_i8?~>Q6@>UI&Db2g%hnNGVCMo;QLA2|akGs~Z@7nX4X71XIL7BzeU#drv1#c<>}4 z`0}VE`x2YO$kD!DdIWcZ1e+DrgW@XlrDh{&VJM-gjjp**FpJ?br}K=o>L_TH`54zt zPMbh(PWB`SXhGoVEF={5K^0O4Zmw>q#!9-4M;vv+;^Je94w{CnrbNnuKhXTf`=P#K z=#SQ)s8h})9dnjQ#k7PX;*kljy6IJ9tv5hOWY_=E<7w?8eE}4|Nfm4$#*4M%IIy=wDQ2L+*gTRI`@+9FW2 z8JsK5$%A^#0rT6^9+1@kc|lUzdZHPfbWxQ6Yg71inpGT;JLc^^ga0oSsjO;PZcpv% zP7i%fSPo!<>t~7FnaXQ#K7E4lo@Bq4LNzd>2xX{D$~|zs*-mUZu?=_fVv~%FA|tkU zyKvoROihRuV$sZ!5_T0QuYTNB9UT->2yN}OL6Qri84EQOJ)I9PZ82NcB!^irt4P6p zwOM^i{ClKZ@lA0uBknb^=&rcH$1JZ0}EXW{|sE?fk^;HQbm6D<m`zK`)%*@7YWh>cXNGnLLqW%kbsMiwZXsrj=VJr zQtV6I(%srH+VTyX^GCfB`#bo_Z+U=*C{+Xe!U2v|+N@!|kZ&=6A!Qe;0BL$QzhWjV z)0iKg!Ozj`k%7Wg;wUGEMwJ`dS9UVDj0Y!7;VF6`@>j54rlBYrw44ZG+MT_7xcc(* zA0e*k3hM-67pcV3iHDfwRBN5vO}m|1s`;gxu}x)lWc&oa<7}Z^r!OoNieAXDC#e<< z(BNz3;~*XveTtoFIoVkcxF;t&HlJtR7A`xzgt4`xzy+BNGi<^78sT%gSF{&H;KT#D zEM&I~{2{6VXm}>maDVRTF=0S0S95SG$s6)7>J?HYt0b&Iy_?Ms5v6#@oU8EFPrfCV zZ53itVF$x47}+ot5q2tD=IH2!3;V>idh!<+euYUlnoQOLA?G{Fr9tdcI3!GS>vS9I zUBfhyJ?ARMxLNOx-+!70{x9e1s{ zc$t|{dd2PzP0F!QnpRJ#FAR{LO5uq6rUWV6V8CM~L)Vn>Yk#*xyor_NW)Jc!{<^B7g{fN*KaFbn6H}~)F z-#oC2cwb{H&8~;XSd*5LqU{Nu{!8gHcz(BlA^fUz8T6*U#TXuS9xAlT?7b&0K~ADN zu0e5UXw*|PN-w8J`?8+GvBH3w6)jDq;6+QefYBlHeEH&hhFAnhfKZG0S)ElcoHB-L zLeWaMP2Ct;vDX)q{0zPS_I-`c@>BaVUKOLh5=3VUybW0IHcCzM*`IQ}*RFP(1 zqIYmqbnpXSrU6+`EmY2DN2#kOCJ`hUXx`L%qFfp zvr|;4@+r^<7}5@nSeq?aUO0d5O;ndV=&9*O_z!Pjt#IoXt(;j=%2`E-+?+{>QR0G8 z7Wse$FHKEA;c)IPQmCB+hVwP3Cv9eCxV&ck{a{bKut6y#p$l~Fe9r-jS?$7k@M1pq z>h!xn+~Gddy(rOvHSW~RTeG=Yt*+NpkeVwM3eG@NO`45Lv{zRM9hdq)5p0`VVXJ6B zVe{9u^8V5A&#Q00TVZ;c=c9zx)s;_l=7jam&|MPF{Lo9@dNx zOu1j|u}j1$?b&_=37s&LtK~_JD#h!%z$e^vg*F2bq_TO$PUwL3nn0Tf&sW*PgiKYd zP)QR#LFyZDZR7i2A8J~PFjcsaS&TDdSa*mJJA5@pz@s|u8R?%s%T zgeg>JR#jH!$@6~L%9aW_tMSCtsQ3yqH)fz`HIKg=nc*fwWklsPG=7i7LLGHt)2SsS zGYB;dFsJ?1j5t}i^B{Hojtp9LPu3bUcPCV2PV zbC`iTmn%s|NQJg#4!d>-^iF*u_uKtxk!)xzWkqoH2%_NgCjKg$csY=tjMk*yMuAxjhX2vzI z%00V~EhB!yn9&)hT+~G5Zqs;lth<0ChXH)302w@WJ-U=}XgdEsT?$kNrJA%L$d#`h zOLix_y0dVBYI_FS);s^`3iNU02B8j?2+&WplAu{Wnx0nDD17wk<+W^+MM|OC8K@*b zX=3#dO)8*zOuXv$nsD5zm|d$XihCS{xa_VAV1^^|-OF?6mwASl$1g-=s}3|85V@Ua zb^Z(#%;`<`>ZZ9BS=qsqFdO6Q7Wn6M@6*%4H-G%}%>X~1Q0Bu~?J0Dk9Adp`a!QHy zbxt)VObWvr_`ssdbi?Z6sO%Uabdn47v?>H5o3ht{0FNW%{$`2tU#)GB2e9Z&Hx$)l zkb&OOl55#`Pu;KE655w;WGreaGGNy_vayJ+dB4boQB#YLGja~)5$Y2-k(|P&&P$D` zltLDao@DDV#&zS>C5iC}tJ>2q51-z>|M5o{W&ScqfO58Fx(aAA5}>ffGF3>qR5A!u zF7dm?6*y+#5dzvY*3B%RKnPBRf4@%L{2N>+ZWns&qbl)7Z+c849*o4*=O3o`AAfxR zQ-b%1jzqdD7|@vV?GpRp8NRn;L6Fwmrb5jkaE4>K&D=Dnh9#&rTl@mFK zhL;DE*eq8kUAOx z_ZAazR2v&y2co5YubZ_{nNjfQU1OrSQIx}B=$@}GC+9|IlWgzZ^WV0fJ!-)Mq95OW zuu>oA??2vYiQ;U7;wvf_^5DYv)}y{2p)o_^`U; zUnsjo7fFUFH@iC#e)`%Zk8#snDEGc`u$gUtVUbf}fs|FpRQ)vcA~)>xW)Zn>X|J_H z7x3*<4YWud`$u|?YbNx}JHA?B2H}@Xt3oEB!iU;7tEZ?QC~%TkX$WYL8SEV+(s_?s z=>UQJ-89DpOq_Z``D2vewq;SJC1W*2v#}FGy;NH@z)$3e)$I;T2mTVle8?|}T0P-4 z!ZX^oO7?{=YIw8~Lu)@B9sr96kLVb>y};Z+21tNgYEgvrM}s^hfK0bqHJ+b%N$ z2_i;q&{PH-bZHf!8bAqel=ogEW!4n_8;7+CWGqz!oSv0>g;Cp;D->-Rvfnm7z1SZ*IIZ5QYj@>N*Q@hos+Ykq%u*wjFIYb zV2In3SsR01d^INjg*#(nYS5d)3mfnSceTax%olsQtVKpvuKK#_8O|zrH9I(gpfNLp^@cQdEKnJ ze~FQ9t_Bs{1|mEXW!;XXqj#pP+n-iX9(JfSSnF4D=u?M=Mtmv`KdEmJuS^sGmIzR- zyG>gS?^N(`ShEW-Ld#G0KYe=pv$3wo`gKO;h|w<^5Z$&`;o9B1Gr3dq3m8jbQ?vag zoEg{in@g1QYgY0rgY`fzu=yPIpB~h^E@Bv5U*hSWfM?vg!P=Kc8Det*o$_?@ks?wO_$FbN{;d9U)+Y7yr z!U&2uM{t!oC{bg?WgQiL7Mq|_ZX2;NR@Tid?LqM^_+fjD>~d`KP|QCjj=&nATvI_g zxXtbe!#yi+V=s5s?X`-x^_ALW;hm%A(`@>YSCh12d-j z+aq%`qfok;E%y9T40y4zQ>*`I9>5| zCU~VFuO2fp2y>?!cPVyvjyeF~E2p!0I<}2wVuxF=%4!zbbvy+UW`2R{oTVZ=K9=qJ zpg5vbSh04)F+RD*|9vB>Tf+o;at0OlAcj}1S{r5-ls(@qqMln2WR+m6E%hi$7uSH$ zm0^t;*Cf?JiCGqVkLJ-)XuTd+Q))t;4#Nv|~YAv5xOo!EM0kJM;~`{Yf^W#~yN+I@G!IzW`N+W_9ZQ z^)W$w{S89PG*weyRR+39pb8uLc6!YWnMU;>l8r_ zDcSCpd3Q_eM-BfqwuhXg)cw5BoW+PsfrSu9#gKH$@AVEzi&XfoT$tTCct)SLL^zDP zFysy=p7Rq0U~);44}<&fDX1)=6#S5J6CU{u*!B+5oU|yJcU-*)D^qSm6A%P=H-qnv z`nKr-Je#EqYZwZA^6-HUSX_6wySOg8{7hX9e!c(j_5nE|@)2?C&gM0KoI}GQcSU$l zHKv<(SpL*-mUSP_bgA9dV(?tp>A+&(M%W)L+0!{)5s)%zffEB2{wa6ms5~YhzAgJv z(h&CMiRATNJ@2kLniMyFvYf5Ko*<-*Gog6IC!!^6r#i82Cec3pu*nFSbp6|Ja_G<$A!IB4I8dcZEdlBf!GsfGNx+sK=?#lyav_g-O z;B-2_ME+u=UxbQm)A$F5@1V42ihgMQ2Scq3FK|$fv_9s;G}?ZTSEQmhNN^q}-sHoj z;Zm0tB`lW9u}+q9C$#1ExQW~lAhV=S8G0KikOr{8ZHp z{jSq2={}NBn7cUylPhMVppd{*7?s0Yo-x`5Qrssl91evtvzY^cD|ma-Y>X=v6=?$Q zKJ2ISuF)w&RlM2;Zh;;~o~wQH9OR%GUT@`u zf(&t4cQ`1RkE+AAast;nF3jQn+5ZIUV5pe8pCk2WY>`~;D5gLHW!Bjp?OJ7fod68^ zN~Y{25s)sQeMmlGO@O@=+-mh)Qbu(u%*q zdY4Q-5;`DxmBgWN!QwE7D}+Jegn^aAM_w;CsIoWM`$x7|2qG3{@Q+W$ACaGA32W&^ z@VGU7qtoi`{qN>6r8kyKd@K`Y2a>9LL->)yeC!q`TK7{M@|x>_)$Fk+5b^vWy#pMk z&DUaj#=I&*1Qfm~9DYAJ#;$@&G8i58V;l@zPK209j9O|tTY_2l>2(At$a&*rRy93` z&LG;ex%Ei;51>ohUbGdYWtBwJWs-As>EMz{0ps)_1MoM|8<|00#l^#6Om#`OU_4R;jt6yp- zse>3`g8I<(VrcQwGzK!6J+j#dOmZU>7WgXcfuWt`AN@~dNx80+C_Q|)2K z(*%wLHI6cY^;1<~pdBNmKUQWR$Q3ooH$03)GFIIwP6`evA~g_3n++VE`JAD(Aj&iw z^&-Kh#|&^7Y5ds)Ct1Qk*`jqe2qig!n+3I@+w=9Y=umMjhFJzhGb);DFfmNHYouG? z9W>%IpeX`jx|mEa77OGy!yG85cyZ{uv3j(xQBJ@`-mrLYb6zX!gb_pg90wi?Ixr!D zI4}hz;IN2Nah#x9K??vkAT(fLQg^9-C6_8C^q&68an^r9xgX;+ETAGP;4+d%X?Chn zHW^Vvw2%7tvgt7-#RCqb!M=U89rqEXp};VNexs26;iMt@W*QwW3U`@ONXEqYI4(OT zG5_@G-cm2cMIWl(uT+9Ps9H|$rb#aN5rd(kUMiwZaNHqaEU&3*GQIH}C@VR2Ln?m- zWqsvQN{ZZOcm*(rpBlF&KvP6bdqwE%nW$$2+f8(&No@EBgvp%MoC8~Q0Q3r|P`E%M zq6O`-^`NSJKM@oB)O|(JA~d$}7uqrlMC7w@B))TyFnO-?alS?^cGvv#R;*_1dt!u` z*^#kL$cA@vzRsW1v}9b zzR=H(KQe77UPFOi!krB#wa;YB4VI!>a{tBom@JWsems)m!l6Y00OLA%wC>U(3S;89 zBTox6DA@}UwqS{O%x46d=J_pzSl<|&756V;pB`jQswE-yxfy?%kTmybpuQw*O3&=5 zr%SDwV9GtV>2@10cauz~TaT4((<($6oqJi+x&0SCv~cvi88rm!%=tz|ZU{aH@%rN1 zt8Tr%=cx7M$*LJZ(e8ZILjMm0vXuI(SnvdT_(7$UjVTr$^k?b2Ct;8djNqOD8zkI^ zHCr~w7`3NY3lM>Eif@M(4F6-eN{0 z%k%IHtIA%uPNH5sNw9|DT&;kV0Gvef(9HUY6)bMiJC1by=26cPe%4CKF7_D}qE%;gjo{O44b2FH_tN zx1;SiD<350(YL}9;N^~;8WT9XDKh!QR3_34;f3?tcpq0GkT11vGF_n{{7dRPnlrU~ zT!zWQgDPoi8}b@f8sP@Yh*v8D&=RI)=$7FO3vOe4FpLrgWl}7qOWcpbn0Ca<{$_ue zp36lGZcL%J0ZWthHe#ZnGvRaOf?lJ1bbI)e}2Z zP=<6*VJ61f_h7{rUpp=`XK>+oGxByOpTI#Tzin6EWb&$DD4CG1Mww}QixFB-S3@jj zQ=D;@Yek4-=q9R0okPO(9CZ$nIuCan*|d52bKFr6;|{nh)|yg7?eNs&=y28Z=K!_h z7aAe^9KW%bQKM2Y_nnL+1K5B<cI{O>9q2<|TN-iynd zrFhqZAHQCo*8Dgps=Z%)eE$G5&6gi&3os^#Rf=&EmdJ6QYO5d9<5BXZ>Y6Zog{gic zgR+=~s^=lPgd31SXXv_Aq!=-EWiB11=gy#8aDBI9I5Ja*? zm%yevBn*$l@G_@y94&c1qo$P7!vaS?a|JejZlCp_XhD@C@I@I5j>@Q`=jhC5A=dSz z^q&RjF>uZ`#8&3MlR$35J@BgX=Gd4Z$+rR zJ^?yMOxx>|?6}i*2qH-x0H&+?$@C>~mR5t_Iq{Vg7O9tyq?E~>!>QWtaoRP~HbbnY zPeUeGBO&0^VV^aibs1`PP7Y3=mZd5*89$S}gpJurm-ZC^7#Af-l@G(mz@!Ur(#Xpj z#;e>tEbl(Pd;jsL#p)IIqT49p!u_zBE6KA1&|=LM!3M#x@J`_(NVn8c&C%ZmJfegQ3a>M6hJSPj}sbOra%-G0BDijAt z`)Wj9T5&+8cr{@0pZ#~r;P{>KoNTe20$i6WGE{G z?|We(3xN>7*rM?;P1=|)r!VR2~*x8S=P0AE(C zIY}ukvQcfvIL#;e$hOU)ACey#y|~dkNL4<*p8?%{&$uh8G4iGGnm7Z-Kitl`wJT)- zVn_abtH3!lU5Q`lK|}%5)tlvZdjIn;UmoCpcmHwv%ZDTuh{5Lo=ofbkk=iBfLrGaa zbaCF9l@aYq?hq$_+~Vro)aDoVY0mON^&w5n0e;xhP#D_YLNknZ#3DIwf-Kx?vuu-7 z(UqR#e&)My9`J7CEFd$f^oLUjW(_XF_M|Q?D_>93l6fIeXz7o_K)=RAtGGa2lM)eF zQlL(A0c0Tju&h7?7ibV`ip=N3W6Rw%0&p;U8#;l80mO4$>$wl876|OmyWz}`0`?14 z$k(ZiZYIHT+>;U)V12vwXT4F=Q!?hshoA0Knor~+n2bgT06FAwo}8av!T4f+CEk-o zOQw2-bSVrcfzliFIlaaMSA+U(=X7G*tO;}G6GDPmNK1Gcx&ez|K;Ul+D> z{(8Ch+fz_=glzwY|F>InP@r*bia-@sFY|LGX$QwFiQ+2s>TXj^P6z?6aAg2!?7+10 zeXwq=7kD4?Vh}(erBdTEofolsC_fmjvf5+l|Nnt|ga7ysz<&GQ7Xa5J4G|jL0%6Xc zaWXJL6I(h*!sO3_?WzP)(LYc!cxP--{H8rw*rRyE?m>o)Jf32_bPr7KTp|8B<%Gap z2=-HK>-GkW>@iYy4uaYsvsBS6V6&~dfPx$m8+b!~9@<`QFl$U&nOd0K0dat~z3+zm zBh>mKvjOjW)awFt3$*Pjq1DY|=!lFavi0;MRbf~mM8jcyudYrYapRo6AU6{6Cq=+R zv1&cNEn-ZL?HO0n*}Yu6ECAP}igI;QI>$y4R>8<(D|=vpQcVR5Ngmp-5M#D2XnhLB z25!)n2$QFBe~{hkJ?V67Q(}uv7~i~h!Mo7A^^NGcl|@oBsUZO1j8ruW4mOY0C^*P9 z3U=^U9^c8pUvhGatqAn_NNhzhMDymhP$s;1%gSod`~2G%X3u&1VXF!L{QiMc7xPjN ztNI0+Q30-5YJPp{s@4iA7hqc9A2gfl9(b=PYeu5Ary6Gv)b`?+RWypyXB;!1xg(R0 zEl13dJIKeBmL9Da#I@4^!~T*+4x>0oQ($9dmW!g87YI8V?8(u?m`HG0jCbqkoydNr zKscD5V0K~Hx>#Xef@fy2xIteRSQz?{C`Iw9b8n2QaFsj(KkDWvB35;CYEXZ4sP>~^ zBRz71*qcaYL608jalj$WFW`*JeHx8Dw+FZ*tjIv<&3^0TxvT_k3_dF%IN|ERPzJQn z@MuBBPT1ObunsH)MYy==)5LUesEA|4X?dX+W#o@8Snd8kbph{b)CE_^^Ve2VZvZ0~ z3{>ckxdUTiZRQDRIU)qN%M@HmuO zs#G3*v40K^##YO#3YKZ8W^NYi1&Vn=8WRL?y2!GH;&YG_pMOztb#)+}1#F`ml-q#2 z%m%>MskH_-N|b3NbPOc}gHv+%-)9H-Mhf6Z!ug#bsJ5#XClUREqjG>fFxeFk7v|2| zZ`f-&-zIH@2S>{+9SXoyB@wxdY}pBO$jg61motUaAw9I1)3z}Q5=qw&Dmz;(FEUdQ zMgZ?{06m|Yxv+F{ECHgY+deSjtDKuMZ!&k;sr}y!cXB}DyQ!3J30~8wh1NSyP$0J z#dHN@@6qb?C1zk&HTK)>8^=5KuwfPC!Pa%{kB1+NI-% zknVnj;CB1rn-AMd2@a> znR)0&)%GM;Bp{9}LU_F+NAbEpG?Asqm$^>M6`5$1ARE;Npn9@HN=nEM2m-)hO%R=_ zgNDyc?+zfByAE>yoC=iayTc0sw+M`-bZ9d|S6$ilad=AgBgJ*{aci)Xi2PfmvZ=U97 zs$!2Qk99uBJm%ZyJ$Zh1jIl&Nmbn@E5qBj8A=^>l0?Pc>$t9BzuY5HdSjv$DtE z4KfCB2@-Z>6fFHka?Q+45YmY*{u8BiWnHv;o z0A4^-#tZ0#xN$>|;pybE4A$#NN4@dH?anHX;827yVUC)>g2zubR%P*}fiz|&?k z4{^5Nek&o9+u%z9w|10Q!Q68@ZJ}z7lzG$X>#pYgTbGtZ&O54boX$TWz=FFUux|H5;7@&A2p zJ7F22U0>al-8cV^Q;K5*{3(v_c7dV^AnxPQ6Q1Pt1@OvzV@WyULP&-xU{KOG-6YJ` zDiYSO%6Aom+fMq&==KlyAAcHr0l)Fn$Gdl)&7==oXGW$*;$&X~zf1QH?Ek1!y84ay zy0?HuPm*RcRNP9!^ZN@Oi4pFiTMuCQV)BWh>fm*w=P-HyUTXb^1Kr(&T z5A=}e-hSMtl!HsCK+w3l`A-uipZoZfn&_BCz7?= zsv3Me4wj!Gy%ww170f|FF+p#uu2MhlTuc=Y2(u>RXq<8xjV>FoDM5^5>h3-6+e+OF zNVr_}8Y|(Mr58!Q<9HTiJmahU?qcR`m+8LgH#5H&n&-45M63*-TV0(qPMmpJ;SlE_pA?SFlTJWb|0Y(*t-7>Lb3Nd^(ZBj_*AtaH zx?RE58h%y;Q;0zV9-9^>;PZnz&Beev2$St%UggQKzNKSDnk5n`<{YCZ9~K{(*jlhI zHCAk#Ts6S;+Wuq1{;w3uVMOL*rQ^+CAUV*|Ou{lHy5})RSaH5}DbI9z^+oht=iYFy z`S0{>q(f@z?4s3ScXhg82an`O;I@bMQkt+T+V8N=tIXs^{J@N~4onQo1mL8_pY9%rUJrF*Yg*Y_i zXB8q2g}IpbU%nElLQbjWJVPZER2V`?9LtjUr;SyC6+WGT9_ms0wD@j<06!CsI+DJ) zVnv$}q?v3ny^C(Gbh-VZy;v`Oi@Dt)%#qS=WgcZ59Zt9A>Yn9&{rQ0zsgH3WVZidc znyr^xN;udkgO^c@Sd}W`pzP0YD%3rgf9G9ww{A0SZkhM!;C7vn0Xz<34`%d)nE@iC ziiY(>Hp5P@p32RkSj;FWIwD#DPedre=rmTO%Xa(m?(W?-mGY9D3w{eKis9LS8x|MZ zL7S$95uj?-Tsnrf5kPu9D{>JzcZGB@E7;+gHHHgNsnT~0(MSA-aNe!EH2T_mle&dd z5GQr3vU%F3jXsb(?HwNpTl|ic<75Be*Wdt-A_F^>eQzE21 z6_4Kf7y=bPOs1|41ur_ZDhVEXvP&9T6VzL9inB@{m{Lb-7bQE0p)XmDVs-cS-FE%U z+fR3sPj_zx13m5A=YKYIWf}yiAPUCbSPvN#rcf|IB>}gP!gNrX6gZfvUyzrqu_*kH z0W*&AUi6u(39tsdhXuO!GozjfPbTtk%bt=ss#tU;Z6duWj!|rY6*&m?3_S{ z?pa_J8o)_rzF87u*& z8;IYemh5Uy!+>?!NV-*-?>rpna5aDD$<~(@RD& zFG1H=PW*k9+yo{{M1KKkm$@~dEo;bx*I>^?#l(jIA*(!t)yu?F)oHk%+#_FCurw(2 z9qZytSodjRc)p`@&*-EgDNUD#2dF`52}@&{XRJC=1CC3T{?6ellIxLhuBKfo`{!X zliB2qIEgsYmu%(K3f$ECY6$?r9L)Kniq9*yw0}UaA0!`D)nPVBRL*bbO&Hj_gKe>{ zw5T|NDA3nOC&ZD`N?ifbBvf9tYM%pX%or0zWdKxHL;Ra=X*+Zm4k?nL!99`R+A&0R z`utE6?r_&(DB6AgMV8Ne&I}@>S2bfjmLE=&MFa;)201vNDi%X%Hg7_)^@nr3Y<2TeH z+?e__1>&BF_;OdqaH^@hG#ZnU8=Ek^-dW1cRTAgE)V6Zq*?uHqftu*}jUU3cIUx(u zepWZ2_5x`D&H%t4?mh{6(FNe`c0O64viSyR_H?sOvt$|rLjV*iQHlc-uoa`<1dpUC z1QrOMSWl(REE@tm-H0dTSSrR!)u0G^nO4Fmd>~Zt<=XVfjnIp(bEg&^@L(Kq=`}(i zVKVCMPT=~887r~%d1jUUdTxTg#f9f8Gf+GVb`c&}uZr~RHNWVcF+(DL7G|nBMQUBa z(xH*SR5-n`)#smiB%c2LILM(*ufzdUyw+Krb(fAZtetcrhJ$b%yGY3hFLDHX_qJ+t z3D=PXv+zI{sm?sdY?U z4KE`34y9P8(V_W7VTIsEhLqNtm0#rV_S5D?BI8Q^vHw>5YQNxL-M<@6o(}|{j~rWh zEpVYnRMs?0VhAu=M$(DK-PdzHgoCd|e{$LYoJ{he8YjsgK9^2x=-JV=Q4)NM^o3fq zk&4guV4ex<}5AsPRGqg}wt2ZcuK6QS_CoM&D?o9hvg*(Gy6=@i3ADp{fPEdE* z5>mt8QzBlzH`H+*X#Zb(hGxI|7D0w)9z#@B0u)FZ%z z-Gv%yaS*%sxE&+>oJFGbk&~uU2{}UYb^3jv5(72>GB%A*YBOqq4tF1cqt!+i6zMkyUQtw z*{IJWEr{#Ys~!hViBf$|HcHg7}cfy-YiBgfDrsm#0jYtSvE*>EirCPfVrTOma+maM&ZT zZlB-(&pS9Uq7ajwlC*kDKvsNIS-`L!px2jZnP4!7(r0!#&%WsqbP^q!7IzUK$sGG2 zxqHwKe2d?5Ou}zCNDTIPt?*#`Wx$$sM2Yt)0k!O|X2(1Yil4`hAWdwRKiUpkG}F`( zzmyh-0`2JG!XNpS)GGkFlqs#tPTit22=&kOrPHoD8V*M3e^r(`jC&z1qfox#r-l6l3SjiAZ1?->EN40D)@0(>d5Yk|yi=CsK#w8{)hTmuLYkqi$*#+#k) zeR^vCqMtH;Sxzy4L6&E4*5FG5EL|uG@M}kDwF%Uo3<6m&{4n`hs{1s2yM2uekP%j9 z2Icj73X9Jgn%v0@YQA_#h(wrrJHj6ocuM{xrE(w{OR}0;vRY>Qlk{fyvKJ^SzBHxX z+(1Y|v9cZQzQmjcxo4|bdoJ~!|F(FzYze#p?ZB(DDG+A8Fk2>bU^z%%TJCYZ$;N;1 z<;<8tWeRSv;>8tTV@MwHcgKdEpeipm=T^(EJI9r{=;1`joq`w{>nF&@`+#bT{VJpn zPR2X+0c4Qm5s#PR4)J-#wboG&rM3qtxGZ@J*=${@UlmG04EEt&bpZw>bo0h%G`)JO zmJRH`vw}xeG-;<(x3n9LY|bw?tJm?i=0F6P#HjSG3|N6YgOVk5UVcVt*5_LQbbO+hN=Md zx6hmRKm3(?6(~>FFXy*{S%5TMc8zyAo?O1%;~&vM`vIvmcftjiWI+5yziUm~h0z2X zD#dmLarSj<%>m%w&r#(9t6F$(0C?z&K>CyvN6Od4nD9uS?{#w0rItHL1*-Lq+st@% zpZ1Zw4!!U!AgG4Wx=+Ik&MMoe?D$n(8XPzxYL}ICyY15r<&jR>RQx>Zg z3?Y-3!h^vE@H;B1ASBJ$>6u{zc_P%U{BK25~}n?-tM0h zzOGlW*E|QnR@Zu%jz=8TNF2^|K&RM=N%oGgfC_dAJcRJmg4K)wu zH^a)&$}YrnkoC=0ZD!wdD%5>?0+j5Cpm=sL_~yfhZ;bhb4Tq&gM^j6&V3u87>+5vT ztU!Fsu@q>$#~)5+Nv49W63BjffB$Y^RKi=~J3U_^G$-tY%Pa5;`~+y4uf!ahAVu=J z?(@vDcD;@wKT;E%f_shDA{@uM_yH z4$2m2bC3^#&CmtliEutWD}%s029$vKo>90R=-ZRx?9!X;7=e4Kxj|Tzhs4N7yz3~= zRE3~>$vHGj*mOlwOn-esdj@FH0qpY?O0|I^QqnPK9F9iMRmvP3^q`* zg3Fv_lL_iBfKSg?j|<>D@ZF>t7gW*dg<#SgbpySfB2?+XQcmg$%F_cRolHr7ETJQm zCWD?feVVvms^!2Q@^76>zuT*gO{i~vK6%rR6xE}_L{FTtnMH>}wZdj_H8JHV0Fy5Q zOH;<+4KmBv)0_6u3M7_@Id&tJPIN<#5*LiE2CH5;_zzOM@fY`9C_Ez07N=IcMwpXn zN+PCVHa|fW@(fBGtxd+*tKk?c(KNE{3AKl9N|U1Mclt!5Xm z(dKDlZ2ekam2RiatJqP@!H;XHyr~Chqwsnpz<~DBv>rpMdPA@l_yB}Ci$1$;pS6eg zGVu}P`Z1b8Glc*Dao27^EXi%r^Tw0MZ*t@UL3mSM!i#tVL50Z_46QYd zS~_{%fzz(^kR@k<3LQdkdI@~ zW4B2FQwe8G4Z470fe|OEK_T0=(q|#sLYT40Brg^VoK5ZrUv~?BY`*vQ-MdfU z{`&R<#Q$IK-@ki`SlqqOs`WA0R3lMBSR?o^Z+Z%6-d~|B$9=dvbYOHLs}Qbo3* z-KTQi=D#6r1XG`qKrDuq291n<*=U{!#8(uI9FI$uV4FRj@`;!Lx&4o~M}z^U6~%vU zyDSi1Pu-`gS2MO~j@cR@KRGko?&uj!87Ih{u~B+dFA%f^F0fKT2(v?`6A%fj79_<~ zlzu>AJ!l>&*I1IOkdKz(0jQjs4vQngqO18MT%hjK9D~|dmQLnWbYWNg6qY81P5J3^ z;fbr3x_q19jlwivN&6qKI0ffU41KmfyM!!kU!p0CydT3I96T-zxO#;v_?oWWbKYEK zGfwp}=nzVioac3{M^bjNj&-5vqmJ7Qn1AHnBh`xjg*pIiFW36)*3kv3yH|IHs0x)L z6uDXZfjvO>y+BBP$s*)aOV$NPZ&Zc(71W{A2b9G5C{-cL;DRf|ggr4^)29`aWN8Mm zHPXsrfiEI-6R^9x)5#zBLs8{@MTIKixm^p& z)3Qzx^9-Tk46Bt6#97g((ZF7z0DuyUr*(ObOohPgOjJVL28OY8&lbZ3I#;GB8;&-Q z<`gcHl!@#pU%Ka`+f%JsHfOQkbP$zT|J*ju>$IxEwAmy5fv|JO14mSZs~HPr*w;1W zBbw~(BzkE&q`3iS*^^1E=*Jyx?jb-p*3*@%K>dh^l9xVJrXp*8eGH84e2l75(x&$|I4a` zu!?`^z6lWI6ip(Y&0Go9^L(My#M?J zf-_eNM_ET7|6Upq$$so@w?43h*Wq|jU+Vp&y;_E=*|o$8%TXxQy@E>}V>$m8WfXC= zQ>3MoKxxG6?ZewNsvP$1fEB1|A0Ge_zPtZ_iXMM;ktst)Ibj6 zL`5Xh<}r6CQX&gZP_%M2g} zO+Y8l&wrl}`WiLqw59HLW12#C_1HxzD;9b~O(gTKSh68)4}@pKOJ5JT;XRGwR$Eo` z+eiaa5`g{@noUqYz%_HZ3*|7|pkM2gU14@}wGM}4{8SGyfjBG=-!F2FL<(l-G2+aq zcwk-v&g>Xs)_)?u-!ZU0xKL38cgCwsqO5Z?=aKi9vDNtzydr*I)|CokvM(6=lu z_wYX*RP+zrQ|eyCY-riDz?Gt!OL?*E)|7;AJ&0h`fK}b6;Rzhup#0i|ymMIf5DPG- zvaBDRbH8o_35Vtr`X~I~WxBw+l>>B#ZG49j=&Px=n-PE=B1)46F?&ZKX|d`-#TQV^tIdGVZdi}utxSJ%_$!~DB7E4Uz<~}iwt33u z+keXwN`}m-N=?-s{s(Y@>plNh{9Qpsq9#B*Kds8a8TmP3PT85G)A~R{FRzwhyPzMa zbE zJJa$fRy_!~a`nd-Dw8y@zPki6iHF|G>4t6H#OZWm#E4`CLt2jA>}8qPydoJI*h zv6P^8x#{AvD)NU*ElmzpS}>d{%@aHnelpvf!a4zs z?{kk0s(Q3wV8e?{Je(2B{=Kl5D9`=X5?WitGayRu67E(6BZVAoZ!Y#xl4VEd;tB>v zs_59|FCJggY z@jY`e;3o4KdsMv;3y`^9U33E^%Pwsi!(Ysa!m>5`jA3$n5VFBGk9RCY+f}>3oL{~K zLu!uas8mMc#EH%B7&(tGRV>=@+2EVMe1og#mfCg)+XvMuSi8D@n1%oHu8Qk(pFqq| zwsKpW2u4<>$^$HqS;qt#62vxe{se9 z)r1LDi}y7CD6jDF{s$x`W$OM~JThlgL`H@c+niC$6cw5lOxulMWp^g!n3JVyKVpag zwnt`hzsst)Uq^=Slfp{rn=nG^DwhJDKbV0c)^)rO58g;$+AkFV)F8?feGb&l)0RaQ z4tvyFk5mdi47OHhB(fIj@R5v6&n&m7r7bL*4Jw=tXOAK$by~;V>0eLemc`CNKA3e! z`RH|I0JMj#51$~?)slBXFyA6n+LLiTAEXWx!clUzqSGFk#UA)(4H`jdI5vk8Dk&^* zFmW^fQSvt_yY*R#+LFmg(pJG_ST)nIbU*c&V>s|^pAl?mD51t#$O)L(X|B6@bwihm zWs|R0cLadL>lvV202S%vkumQT^gy)A&IimKYFb9IGp#66b?GB*aw$w4ZAQTvp+Ery z3b{4%27!^gkucxWZmY|x(B$zT?ky{Affl#w)r-mEB>yltd?F~y*Q@H$*y8Y#28-~> zeX;0>b}L>%peO7}O3DJ8FEM*cF)9xz6V}Qj>2Nq|-1naIOv`ZnYzKwwb{dox4zF5g zRm!5iVzvZbyFs!m>buhwjHlRBPl9nZ9f#)xgZBA-EPtxPy@!~{`;YHG|3wPXkmW|H z`3bV;doe+-ZMxD^2<1@3SDIJoCbV#Lql8S6euuc!H2nc7?lcBoK2{Me4DDLw71Y;5j0cK`S z0tUPKQ=Q_LNeS3%0PkryR%b_slZ&(*hha?sFHUbSNUE0A4iGY&WL0)5I~M33z=oB zUPca@0X~c{!z96AH|y9lz=26Q(cMjXb_K(z2Wg-R2n@xW%8!6YBiiG3cr<|%oJ?O) zE34{q78^gv!ab$e$ezC02nGxIGLAqV?jhi!Jy)s1v^$<`k6Tp=p z^!C$xRHj+J{pn7)v}t3$(B=ixGpKsg(kBZ(8nyB?Gec&W-`MLIf=eC-)z#hSkLTz7 zWu6S^H$y5J4zoNnpNrymn2q4X@d`@$z!F6iE=a0(>Z36YbEim(M6_t1AT@)Qx_U7V zW0>}83eG7Pc0b8KIl3auk4s=Qc$Bl!w0`0Jo*4`JMrbk%Cbz&yO%IR_0W{1Qu0}8G z>-2S}kkI`BHj~(N0SV+7mNz)hfg_pB-kA0Xt9#5sK27;TZ%a5x%MsPQ!gE0)NZ~wn z6&Vr9h#4ai8UY9ahVXKw>HQoPIJ-QN3Q8e@xDcRZ67X<&|8f0r|4Z6k1MHpw+F>Fc zZ2E9(>VQ2Hl^7OM@myuTg&iDO=Gw8@K+EoD0wQhK$N&VTsr_Dw6#!s-_a|#0AS=MZ5)tz29i(50Pg2C1Tqwy24nmSf zl6TCMga99yF2G4a;U?DmD`SLEy-*~vW|EBylv;J`ySO-3YHsL>%2U$us!M|*#8`S& zCdG0yUTToCjryb4NV-kMoB!6A3gqNYV{uAnCq02mY}9Bic5ur@dS|s~#}a0z$2OOV zLCQ`|nM+Kci(Z>t+vThdmBnx?0m)(xWjm|sl7>5S7S0M$ZA*2>d{2L6PVisgb~P}E z>O1e+)9;9m%qEbnp<%>K8P?iU(p7elh*O#6@&_>)zS3L=NW-uv$iFwcd&@FhsIhkS z>)of>CsyPtdf$I$!jjaLC>qj%Aa6U9l)?4>GSRfUS^MLxHnQ77KcER{hT3Gxf5bfT zZ=93R&=504U;L|`lGH??0r(WZ^}@cms`2Qemdu9IV&;R5)FdU=D~>#R^vXmX=}VWX zVh-bipZDJC?kA*j`IhArCx{8S`wYAVG*?~!LB%^)bPFdJ$2l8vvzuwBNzUPn$^cD? zA*nt2lLH8}z#cp7$+P21>k&+d%JrOHT~@(G^boK%jpZ?xE*@(2VzbgCz&kP{DA-6k z1sBC?c%zh_2zUskCyAf~Vpf(Omf_+}v!+1cOVa8H<$8Lg)zoaXG^5(pA-1tWzi6^G zilmGs81ncsiU!GEEy;mFC{>&Iq_Htodo7nG|9KQ0xIPaJ=<;*|wZ|p0w*Wo6))Q?c zi)w6CqnB4eALmPQ?v~J^BYkx{^Vy4dgUi!(7*eu7WXHnYmm#^faF-d6Qi5bs8ajZD zBTaTIbFE)@O4?WZnJ{r*=0dQK2vW$1 zoBB_{o>D?H4M`Q|#s<2>A}|#N}Ae}GUa0`Z%s1l01$Y=`n30K5=N3r#DrFnhf;^eKHt3L&OqBc!z>22a;^75 zbW8jqEoS25v&jgkposP?JhiKSFBM7>>+V^y61$wQswZYP2BsDBO zX?VlbjV+YL1B5!Ax<#xfj`#6up4yA2CzHi_#d7CHEn6(~*%tX_Sc%R^ZlSRoX4l=7r#acR_(fdPS^})eK3$AjgvZ@GRLeNUNjoHZRDL z;F#;_XSwdvaNAGVkFSCklabigSd@h(!9$T67pc`CV1NndcD0m@=l*M1y9fQB3t~uC zKq>6z-Mjbqqlm z56zMtnF~k((-H>gX3rQvoCAzL4VBl3*;UMzXj$TEv#N+<+iA<%Et55|ref8J2EAA_ zP85D?Q7NA#Ah@vnGIU_Po>LebT@U^{bWe8eW*+ZE`!mee<9hHB>sw^1@H#6F0g;^E zyEGZ@b-`A&Zeg8n-Q-c{o@Fdw(QjVI7WznpvX3sM3u3}VUFiz}GZSbkA)Q>lgw_&2 zC$t9kG$&H!lBDdE2dywnEXRFwE!Q$>#ex!7eVV>bLS(E8tW%zn)TiNvQ_`FTa2d5P zM*=!w)U{#y%TamM@oqywutD!V$2jthiBf%!y`aVS{2@+8P5 zsEkom12rnfu5qxz8CFbnnsB&Lm^;Yh^7x5fyAXgTlxS~ z5tu;?=c>#gagez)%X%ZvY)|bKTv?G1$L0~5X?KoDdT9xOpu5CMJYbfw(Ft&cHA)@4 zXKm~qRsvn9r>G$p{41##7O+mA&~ynh@|29fehi73%ApdsTnoW_9f#p1K!yrprR+Z{ ztSX9~KR~7`%KpX4uHraz8AZ8*=zC;(MR+|wz<+BGL;QrM4!Qs*-+mzKK7Fe&n+!h0 z)zg=r=E-KLrgO9j|65XAXo=A|;C*F--o2iFBzKCe2BFbNx6+$OoT^fgm`vc$vSn9wk!_X zjJ8%*(!oCxiD`{48?`3@=3GR_IY9pw?qRpHIFVq%I_5Cqt)vRs!Gl2|VrjlXLRox6 zcx6JNNqPXd13rn52n!xm^XE6`Sqaj#>r+G{Ad)xylk65+8LhVorKY{MhBYLpV_AS&&W#9!1LL*A62oD9a09S%G$ag*47H?Gev)1wztI>|~mxF5=mTW|El-n*LZIT;L?mNV>6y9#y1ogxPa1CHIp_LSq z9f%2nm_Bb*AO$hx=P%K`hGJ&Eg3%RClnm~_eEQ+e{j|D`f6%*&EZlOD;(M#Me;MFB zFHYVN)(p>ZCg192%?U5VyT1h%>U#%tiTG~{l`=5UKMxE~GvWv@`tDD?j|!bTo&39A z#W%~*SGPGOHUc^rSjjJG*2bWBT`wA%kC1cC|#-L~P-pg37AZ`9O$vh`>o`B74b^ zl~RxX=mQDtq0`ZpDg?*`Po8y1OXfKR&H@IU(RfPYW}J3X1Dm(A3+vPiTP;*1IfWM% z$~rW>hlRGd>@?d9IEQql!>X^#>M>7xAt#Zjk`w?3qU-zV=_9J7pC{Ls$b9HtCSZwT z7te4|w%8AtQ%eV<+^A_Jfr4Ib@sW6;E;RyByIdT0Ai_bMXTP@};EX^_Yz zE(Kbs;K7ahA2#izlH#Tmotke?Xv0w*R&MbQN80p&SFA4#yNOYEzN78c3rc`yS=f#S z_=QLibjdq0T&FKV0Ln69CJ04b*P>s{r0myhAX|FPYB^!->8}j${tMm}#-7!st%vSo z@%X6G?;17!U84@L+36HYWbF66!2)=%K9GCt#6Bc^=|r{nbW;qvKZLHf(>O|Icrz?g zN}xALO*eQO84dK{1o{xYJ&+9JU6S=57QAIyVW_WD&{c4Og?Ek}8_BoGg+VF{9^wQv zb0ha9Fe+6ej@f#K(MCwRQc<@PcMwR;m9RsU+OFaliz~|{vF|WT=~*9VHPIp=Wde3t zCnVgGA`CEJYiUed!FY;ME<1Ny<3d<;O2?%*130VUm;%M$atbeaEZ&qkVNmKKQo_)| zu~0W)H!Tz-Tx2H8?e*%4evoO8ApmXYD~tRi(^5>W+ckad9@y~N%%eFOjjHWNrVH@r z65u?eSR~}?$Jq3PI4rqj?1!?FavwUI*Ywyc*SFNS>2Hg{G^MIPu!cOR&u)>n@)iMT zP{UtN=X>!(2qa%H%A45<18H=70#S5(o&g}ZbFjr>*T$4s+-8|uH7A*pSkVk?uUcrT z6=x0}(3Zv6uuChaL%}pAB3jXH}QhR0;QS5|}g|h=Ha`PrrW%-*(rq6(l>fBA&WKY^6zyQO}gdB7Qvd6gz;53CjKspz?fX zS4$ue<6v;IsVR1T#;>$;AU?nZK*tvoEOB*}k0$M!bC^R+IpbDNPmq~7^!^X499_SpY1kMiC$@ z3t|2`vPLDTD%pH7Pgz)QxGC&m^_auJyZDy{7=deq7J>__IE=)X9h!;B_Lq2>u3t4P zSN933?bv{=q&V9W$fi>_SYU+mkzL%syNfqad!J8zqw`8gxoH=CAgueZi0=OMAZIoe zfLpETD4{S3$RoURNHRiOuJRzST({Hp1S~?cm=06Gt~;smh+9P(b?WPajiS4Kmmr7m z?w-E{4D5;7_=x7oJPR~bu3dQ1PLkxQLLXUm>BVs@>EhwfV9o$zR_Bii-XvVz0j3T0 z+;F+@bK#(=cn?GXd5(5|IpY&=uQzF-3P~?@X||5?%Ro(Y3xQiJvx<7uCZ`s#jg0I| zQ9a#DN54V0iAS}}Lb3PV{y!a_uk5ekcu&5~l=hWJi=A2`_!IPLmZn#y&FJbR3UV-d zY`IxUsMw$?M>-O>dGkuEH~HywjNC*OKw^D*RkA2tK-B_>waNMVbvkXw*OsQNlWSVc zXPrA%I7kQx0^O+ja$!st_C%NAr*OH!N76Jg*!xawgf5kv@w)-ifH_KJwnj@dFx($u zWh5G%)#zuCPZ;;J=}m+_k{$piY9>sfg=o|f4$)vTDx#$Z=M?{W&w@{PlEx z0|vrfGLjA?rB2KPwDy3K*|Dm!7rBDSVE%A>iuFQj z4DcW>+-1(P<8p3RU&^dX0oIq|t?eR_8hJ^hk(-{?BrCK#oYUr9>2@q-px3)6d&Gse z(xN!>COMW#@^hEgC!NtPoDf=vuj4OqrbQV!z04JXSpD6}uHn-Nt(RE_=-@~d7(Wpz zu-(b7AHC_(WY=W5JrgA);-eo;BscSPVJ_3L0z!mxt%OzRlo-~A6@o4oWtzS&9b)+C z?ze}h|G_}D7%y%fJ!AH`?aHGr_iHaG?i_G6V1VTf^7a_VHasXfw&6k2sfG_`zbkC+ z)dPicWPaVCwqZUK#$!>(z5ydd6dR=(7!7T7YD9D?=_!JqU6@LjI{A9~&{S?%&~F83Y~6SgDA=~qy6s@ z1F4&5RmlLR$87&0EfL2?c3X^gxUx{u*Z%7SlId?!czZ zHl~A2?N1o)dUbhv#VmR>`SF@=rpT1z&89hsn5ckqdZ|h1lnSpht{2T(Zvqnh_L+ma zayk>+!FT3t+h9ITi{kTjRZBTQSVsb7I7RbJ@EvgG6-$JF?O^RmA~O~Pz;Qc+HX{U} zg7GCfvrbL7L|q34-Hy2=4khFhjw}}!3#6$GlvK3}I)$%Ow%R(pwC&RbxJf{*j0NPu zAIlSr4TzvrgJIWv3Rgh-?I}b?4t#2wEO8(>iKTErh2AE55Xq6_-E^R`GMiMYx#onvm(7A8DQ zR)0`k)mz+V*R4I-13+i(FfETrpyE0ZW=pGQD2aK_8#+H6v<;evAkh7e3>?D=iGZly z(z5Lb(a&M0+h!F;Z%k==v#_GAAhEX5NsLOpx``_!@PP#uGF*jojsQN$)U#pS=*BA2 zb%|47ciyqWH!qXLw78(GvWl#cJd3LN(&=dDAWfTVs%g{de}rUTJQ7N2iu2;id&uHx zW5~o8e$ZuNcP*_i(vBf|rO^aZ$dq;Qa)!7P5!kxPvF>G-eY1B3XTJW8U3x0fSJI*C z`y)Mk)ssFNHA@isdXA+^NI)cZi~Raq%j>fJ%OKNa#K0*+0fmL*hAD11U!LE9;c4cI-L4t#TZY6Sa3IUqo`XA~a8LpzDUDzmoP_%0fBJJ%+Aw6AB3kA$e{kmtW#aTL-a^aBn(-`3hW&>Oxbww8uX(3fd1( z*|6jQly^HtVk$U@xEsK(A>fNt`Qaevj3d@UH&ua>Fg=P0B(Z90R>P{v zjsqOtMknX9y&vD-eR#)OhhOgWSvfVdw;{ob#ti=99|l4KuvX;;Ovo6ttMznou6iW& ztRzpEPB8N&VM!yc5KK;BLNAtAm)_y4b#Ut@ItXHtR2UMw#&k5c>=+C$=X^R%G6|sQc*R_8zk644UkCEAHfa* z!G_|^TkO%1m?trv#nP6(or6pz`Ukj~5yyFcIei0u1pk(dd`A84wtXTt;mvsY1V^BMB8l4~S_gUd4tzpa)A z|0UO0_3E`PARVu7&b<(4(i8QMsc#2vpqz!Fv>)sM)_Ra0AfX2S9Q&}`Uu^&Uw}-nQ z?!RQ&#HMWU&%5`bX%2pc4GhGvm>2L=SMi#C6T! zbr!#1{)|(lmI|L(MzeN~>W&e~2az@(ng1Y1k|oc_27+G-bM|xjcf>h^X^^t8PcHgvxNESj?BRcLnfjN< zz}lH4&Y9s(Ph{tDkY_YrKgi2Of&C^bDDAA!e!BZ$e>F}+3$^?8xN*N88(zz5Ip~*& z|Ftc-b!E*7<~(!n>%2g;}5oEGqi9)Y4WB-_BA@>#;jnb$~&e&ilQAGl3TW&#-xsoG{Z$KeM3kwMZSHKXzyVEazfZmO) zF;B4Y-}Y9B!<#i)F1i>c+67OD58{lV|Gy@&0@aecXz}t+pKXqtYMQjXh&n4gL$0Qy z3#nYq7lfCZT>vq2fGthEN+@fJT1T(unPe^gfHR$KuabBql;euoDoI+rN(V&ze9xP_ zGoSJ{UYsRF1$;HBMYAnN-F#q^GiN*t3}hTjzuk+X+G6^W48R`$2qx_ZPOR}6FwTfU z81A3_s{`fE5nmtj5)W~+VsbxAZkjnjgkG9lJ-H3NM*gbv%8Rz?(%O*=}y^*zF zHHbQ*cO2eGzL3yE$pxfT3<3k=im0wKdm&`0(40bOe=Imiu2%NS{sbeSy5a}+Xy;AGBYK68^} z2$by8to5mxjQ5({5>clr2;5*;+@LIizZ1VxC48V_VAv8ov>~D*Paj3qwbiHH*`))q znb7P-l^D$Tz-xMoGbpr4zxJYD{-7pgoX;6;I7j43?ad z^ypA9Gkg*GfVdvt@9@0r^f|MuWLQh=qfAqgW62cpsZXmNXE%aV=`T--FRh`rBUoXt z1duMZ1o*D-kD?P%cyqys3V*Hr-=29|PH@7P(#paifNFBcs?6=Z_ZDecMb@NP9(;cI z^yP<#!KNHD_{XPv*8A)I`**z3O;5l3)30S}5+Fi;bE)7bVM$1no%(2V1=!!QsJI9I zK1E!NY%)sEMJsA#2cVZIH<2u!rBRl*aQx<{9}&T70c#fE*`TjciwPCWF+>zO4DRi{ zyZ?eTQ%`qPb%yU*BN$DNp~l(5@Hk(eU7gPY`@p&d(-!8szFl4{h8gC#)k2$n9Sp-T z`NVloW6n#17g``nn zlmrHD{)%v+UHuU>w5uP58^Iv)iSu7!Pw|+2q{Y!&R7=9?655`)uS5w2Ktm1=kWhL# zN47h?>I0W?Xq!zmUg*@)BH7N?C?pw?Qt6t|qcU zuYa=(2T>Xfe|-D7RX3U2?}^u&NT=QX{Ug;HkB}Z(Ht4|(H(sVjYPtj@#L4*3eWcQf zUwVuM@d14owVMEYVpqSPK}Gt#ctQuqY+mI%ihcvcQUixbPwAXh7pkj)Bi)z345GJN z2Dk2WBqS9IrY;WYbbblz7UG$~EpA{*RHHmUtjcNALU}!I)u;)w^8qAT%H-+bUz|36*2|ZQ}O^MXIy;@KS zfnczb!Hv*Ra7o>M-4=)lhW#aqwZDeL0&4FL`kMt{S}%*J9Gb4lFVtJ0_Tr?w<4{cp z;5F*{A=1MByb~hYO?O7Im?gE9>(z1!2Cx3!_=3pW;)5Lc>$yid#GS~qFHvcB)Qj9le~R*D)u@`{kJuBGyU42&d`44I9vaM{?0p#Vaq@kDaZ zF~Lf$5)FDZ&s&i$qDuBiB5v7lT0nAr)()=Pbz0Jhz*Tk&l})%CgwDp30bo}dOut)Y z)6=UDOF=C-Zj3K#R+z8u3^CY;DJCaNFjWmYxUgZ$0Fw=a$7GYUt029e{9z$K$)6AZ zg70qL30abU*X00*ASw5lD{2isnc^G@d-k+ZoK98IQ1P|6+U{pa21m%~Lh%a5eJcCk zwL1qB-S(?U47)(%F-M9rtlPm?JR1*kvYG2kK-gRc7>n?Dy0e zT+RyPp|l8S;e(#s;$z6e(IX^&n?ndX$lKj6AS=V|_8BIF5<)n^ODF+AfQHO&%#GVq zniTss5+@|9}86_8o_tqIySbvHPF-s@NDHwL+g z3+dtqtaNG5@d08Tip-mB1T4>G)va|6Ohsvq7U=mBkHfUwo4Rb(^mq;`C)AQUbULe7 zWYYx8WcX5-fw4{o&aRIo#)=8qZxS>%WAp;UI5b@_xh$tyke;SfH*lU+{y((3*lHj_ zd`gQh{~gxJLcFos%Q2!Wp$gPf%s@scBvGN`lt~nfx~TsIwA-fh)+JTtjYaHn;@A|VP8*9Xz%t5 z|12*KNAZD}0sp>wy`J2(GVQKmTI9u}_hHq$_Y#!!?Cp{_*;crak zk(4*e6&EW)2QV^L6xfpqSFxfHXK7P=EK`=J11S@B8BrAr@vLAcEX9$Csz(L4cBr~f z-y3I!5s^Geki6&&P;st1#^`oVp);fw$uyc1b$og;y;gpd?ofS7kD3djJ7warLhB1u z#B@uodau*1hq6^X{>AY%>2ryA+CG~_BFvbN=rY5rTWVvZyBwjLixYytg?a(%J`InR zrAW;agMTM4=SbpG-??*`9%5Q_69-pcJ}&S79Yu%`MN#R@yWOVc16MS=hGwvSp+u$V zDqeynODu{ut76{L^5N(!#2gNUe0l_>v?rwQ)2n%kXVVJ+r@}&*r$wJuwtc$)-b1WK{O>|F>YZsHDJ87!Z}=8nR6+KZzanmLPUHs-bM; zDi+F9YVCX0l>{O*`hjyv%5`Q+C2^+t>e6BmWOLqmm&!rIEDb&1FHT?_tZY{Ug!9?< z;vPJA1odwcFI?S_sY?FC=))5W03y`c1*B zMT-_#x0+a%#kHe;y$qVMeQvYUC-$?X(pFeizj6nPW=*k}^;&r`tQ6Q3NfJo%EH)^# z%FnkCPv!e(T1S#)kX5kUMA^6^jU7Idk|Vn))@fbz{uCf1>w-N@?(mEz0!pjwMn|*I z9XWrE12ra2R-%$eB8bXyNdiG_^$oB&zI}k;sW=B#YDLtl)cEvtYth6usqCg}*?gfG z!$NIl5kyHkY>e~zmWj)XOk8XjQjNzD7kPtWYKd9(M1K%f5ZYkHoyXO>?Ce397aR>v>CgTd*fD5R%zdq+`JfNDh0F>?s&4Y59r37cytsIs;gSs2KaX%OiCX^QxZGaF%?+FJ!>k3qtu~x6p zV+qeH2QDUe0{2UYs$)I7xHhzv4JMelm1yT2XfCllWyFX4rQ5sB+TJ3!{BniUzPeSe zuqxCKndJ(s;w~_SAkuVd88cxZ;0)?Zy%~z#6OWtkVDhF1s|eFtDH(R|=*4PdMbZU03Pt9-MH1dsk2B?}|lsv88O)cro?T=%Ng5n*m_*h4|Q` zcTbE&9wkglG((O8u~8KLY7CIxSP#$5)$0tDEt=c*7_Py$FpNOTMG6nymMq}? z>9NClt_)RhLVyZt!EzIr1)LQpW$ILJK`GViER+p42i^*I>@^LDtyJ5Pzaykgg38{d z_nQ34jE9iBTRbdsxXv#YaJoa)P|>KvOrvCGjxvjosji`F?_b`&kp?3??+|P}%_wp$ zWJx$?2CnU5={XsdSsU;g>JqYK?hv4IHiEfirXFopt#;VZB6us+YXsola3iLw_UWKr5Qr|G`39+>{gCwX9a6%L;BXen7Q zJ+cuw9(z<_I!d_5$X@3%F6Lr{RRJM8%_-c%%GA<{?Sz9YFjHjpb(L@%-I)ey2`Zg7 zfT*bWGDT%9o?=N^${?F_LfLY*y?SD?*Xvd@QTJ)M&bk~rTeM&HXlPPyN5Uku4))l( zE6=*JG68$xQ2;k*r@~w1xybNvYThb*%o#BS(>ibH$k3?Ot4_^Fr!#!D9c56Pq=_4T zTX%eLtVKX$M(4>2DF@)=cd~&0(b19lMS#wnUc-?mIPBr{z4kJmI4)NM@a=JQXfe_GAOxLyIwo7Pa0_V4@Q{X3fBZ3CH8zNCkUr##62u;vXb6D%t@}dbC8pJ0G*XAYqwX+aRR4%rW;x_y%z8{4A*eME1B9hGf_)1cP{o}}kQ$tMj9jatee zeHp=F@~+2LV0Ruq-M#&JKj-7~s&LB32eb~o59&6cDnv?8VV5~M1&)MCjLfGjI_`!Fv=(#d85`F!6NWZ1=wCcGS1_3}{_L z%`(A^GdI~Qo$(A<0?$$D3z9NcmU0_##zAG9YmbJDXa%w}6_bgDr2K_BS zV=Wp@Exy}iT)uG1pMxFkj!a3C0ihhpEnQ$;ni0=zZ8;AJxCu}=pdn+MJj3-g4gTnB=3)XGC5etW!IuXU!RKFZRW2< zoe(1mfEPxpWV8a1^aK(xP@L&> zys&_wxX_v;f5;7e9xXWu-6wUa5ix^6$nwiEK4NUK4X#R>(uE1DyPV*(X989=`#ylg zn}VmKwrF~MAB=Ag_esC%o!w(B5>zmWi_+4hk4HLt*ndv)=X--*A+%xT5M3wgM#eGV z6sudN#_e)5{R0wfcM63N*NxussNBdG_HcLYD9xULyaum=H^>rK-`e)-7RQ`WF}`|H zN48fz8jFL8BhBNv0Uv;PivfSjz>@7=Ie4vff(Vewy?SD9c8+xO8i*&`y%VQu?bZH< zS{qdfc4=L!A$p;9F7qfWuZ5aho~L~X=)RycLIU2ZRrB#I1|t#U?rtk2vFZejNa8YA zm1|VV2p`4aK1rw9PgTca)U9Jtxxnnpo)1wGlc-tuBl7OWf6MR2Lu6>s_t&_Jq9N6I zCNK96(9#te6^JQ_Cb_;iw&xk}uTeV^1EJcb6q?ONN|LG$s&qxYyySFGd5REP+(F3! z*zJ7*EzKaGT}3i8?xx#3?L%KDoAo^%(s^i_-F`1%eYy$fAULr4G3AZcHL^OB9ON#| zStl&Q@?8bdc)+b7QEN-g2ky{eM;QF>VS4}bFK<8H4Gf^vC=vbwVHr%zqD^?d12D<5 zR((&nf_w=0oY~!nw|_&X)X#U*Up^r0s;^ZPPHHj|HMqQqz?BU;A4Yfa_Z0rVINeT& zL34DO&zmPkT)oB*2u}IPH640tw(Je^PxT0e!=-A8QsPLaXMO-#E#zmywL|pW?T*#% z03*qsgt$G(!_EX3Effv3HO{}R&Z+w^TM!|LCTf97P4M11!X@MY6u%H#Q4ZMdN1g>6 z*mg&xl0T>I9#M0IgxJiwkLYIj1~2Fq%+Sd}-7a@wwr4hE0g;!ipU!L238PU(HnC^y zfKY{#4DWAXA1H~i$lK)^GK(#i6qlP;G}DZxD!k_i?oX@cqqu#ZSoW;~K4 ziE#CKYBGhJ{vcEENck22g#|;HkYLQCMRzBFG90=dR(JnqKG9WEsb3t8?3PUjupXLl zfm1r%FSLQogk9oWLUP4SG@W{6)#i($vO+FsgivBpz7dUG(>>zbB)xc-hXrrvvs1uZ zsg+H+@h2`GUmL&#S#c&WUD_#!Nr6eGz&2Y>KLRG?ghV62+R^BJJUV7B(2Pv#cHbUk zyFNv{F8;Kp<8X_HL$oabmmDl82D4@m3w|&tglAssk(_M! zHg}cPTmwj(_{(HTdPQzpp$$tPNWea@5a`4BZPi)Mr{-VSks|62JW$@myTr+EX9lbr zV8i7#y|iZfX?TMeF{6UnG<_vI`1wZrab7O$M0fcD^=V1rPO+X{Kt1PYXU5!XqHEER zrgPQ^conva!_W@WOQJJ*p~2wKs@Xh9dosW0@2P6kaYqRfR+e|)b@96f>s>CrQ;*fz z8Hw(>N4^?FzTX2AVHHa=RbX}R(xbVyH4!KfxsaJz5j{SeI5GGxDs`9OTH9A-M@eVv zaC)(Sz|nBaD}MVCMX>2+&oglXu8@p8B}Lu)=FflqVFE(WwdO$siJ5ZZId_bf@K3p0w%sRQzsS=%HYomOw4Pv%*O1#K~F=3DX*ot`G^s zF8Ja8<4^YI%g4{}e_~EPrYpAdts)t#TWlS)P~9d6xs!7#tHDu0*KY-b_P!e*IYa8o z2;_v+j`-!Xgfl{S0OqJ*v#VCUN4}SayjadCjNzlhYz?17QygDA^C}kZYsLx}y9D#z zp%oB^l>?=rY6qNnTQxwpCdbsvtL5s%qe%HVL-Jlp{W_x9d?FwomWsbd_@>QoHfNz0C~=aCv{LSH9!KQ5i+p91mZl-~_T5e6O057gMvdiceb~Ceo`o0j2GG|>tTQ`C*q%}@ z0fMOIl7z4di^Uw&sOF!A(wY&1sSE@~&Og*UJlit!{mZ+*QGvEy|K7%oo%M)FX-B742&LP}4?o;} z{%oM*+M}jRE6(SW?*Z&EZCYu;ZMuAerCdo{QmB~Ct?hv*i&lE|2P<&Er!-!ZQ=rACYYazZi zbF$RjFn3eaT@I4U+i<3{KojssdLA)mgaWaY&+b5=DPV_wCYC-tU1_G+8X3Xnr;Hx3 zT&#QckFwjuPpE!6<3f4#*qG2DJvJut-8?pC?24+##vJ^PF^9in%(LGy<_MH5_ya15 zslwZUHrO%1*6@5wK?yY#9bVNjA{mL>f~{bn>YVajoA}_7fp{9+3{YMwJuOvR#tIn% z*#E6jW>-V>gsf-a$?Bx=?6IzQjO)jZab4dHTm>E7XiX zDe)s^8hwL=fgr+e);Fv933It&A@jAM*7eQi%G1HXB1L7Np6Q1mtqruZrkUjnqEoAq zxVQ85wbz#9N5BQ7uk0kdSll_pl+F6;#*e6!S(O4R!seG}qFYBLPb>2vq;6X=Vp7p| z_e^b3Vcn;BtEou!IP%;uRg>0Fcr;TGFg~sf$!%08Ygo3Krz!Ztb-Fc+=Gn~L+1PyY zOQiIpJmy>Ggd$WAAo>4?xi@W+<2bTK@l)#Y+LbjVQtGN+F*DLwbuHZ`^ir&<#xh^Z znqX7J6A18P;b7iq=C{9dj=RT}Sq(}y&+N%WbY*yCW@LnihwmOoWq${t6nQnAd_a`q zw?5MO#q|=_-lUy(hL^;X)c2B9l`a&{WOIKeUGzisTpgw_7Rn?4fTd&ctzHxd)ZtQB zbq#e($*kZ&;P<*KWXZa)G8k&iXTI^j3m(!wo9wEkIVOuu+C$q=Wb};-%?m;%#>nx( z6WJ%anCBLha3IP?9#vUZ0|hcvGh!)&pB9{QXOr^IZinjhM*&hj-w%9vd4VUc6}q;c z4lH>jaz~c?2~>tljQ^NN1L$F{0;E1gyPg?L607YXqndUg9wiI{lRyJGO!TZv03%M( z;PY7+UUzwI?dswm3_Hl#3hq~!z51KgWSt^61^evP2}8u6-At$Rol!wf`@N4ADbz~} z*3?5ubJ&VKakhRb{geIFcdCvhB9mM&3F^t}mKLwnmF)%{VUH`wM%1@b!Rhq0M2;({ z1}Y@TYFhJ>ZW@99e6(^lvPu)ff{>4FHXUf6r`(Al6JyZyiZqGXD1pRexk?%Z=3yic z1n`40fHjIHL^`6jF!-*`?F#YINO_3l8&|0DGNzq^|w-~>m=FijaTQxukjB!%k36r zcJHD6LgE)FBmOf>kVq{)TYrrX?9J>5{EM=~rdZwk>eGk2kAwfc|MlR15AomVDW}ZgqIniKGI!lq3tZ_nUk|=Ah@LUfQ_$(32mfUe-eZ*7$f;Ulo`#0>wr|LSYz*@# zD){745=I@*>oquhFe>7PiZ&xrNGGtJAnD$tTR3J?! z+077GM_t`W2B|lXa)_C-?7`L<$nG(Vum?zl?mx?WpxkV5z>*8I)wP5Z5Sw!B`q3!~ zR?K8LAx$3e{&&|lb+JK%z|&_RQMzzyZB^nKqRv6+CX@B#?#-L;?mRoXm>6tuZ!>1t z(Qw~%pK+x{Af-@ZoMl~MuWZ)~jkby@voe@Bpz_Fd0Rh;u$F;4-Pk{iY1b=uARDwJ% zHAjfY`JZqdf*+9sYjw`~9yTWp%;LWaw5D(SU3W@_olw z7Ch0~S%$qK8CO0AWMTvN#?{rb;=3D=M#G8mOlXQeau%4@&BW(S&n8cy()G8KYmTv^ z5bETxlyl0Na7*ck!zF!1*1y%{0*9D8a}B)ep5?r{noSqTB&Y8xvS3-WjYUhcdBJpe z^6vM8#tE2)+jh}6l9_OPV|eWjR3ylzWITb~=xKUK16D;yS7}RBWjsI(-2HW;YM@@+ zL%ayYj%(wycX5UN9em0njqLR#im7 zTLihoKB_>{Q6Tv*tkH@I!xO+n#$L3F_B7VP{aPTF_TjUn&|hCbuL$Mur=LEdM&>`Vly~q6u%ogTGpjb> zI`7yajkch)2g8$q6}g+i#D=W8_;8BJKPnlQ%Bu#hRV!LFOw|<`Ij~+wfIzxV#BoKh z_2%sjQ130;Bt|-}as{;`Ot7nbTD1+`cXd=!Q+%%Ls#nwJkZ+Kq=jJ&RA#PSTmwWzK zn%ndns$09|xi=vc>pF^(KF|xVcSYy}oj~=z+zC%Ypb9P2u{bV{vc?&v$P04^FjfwH z1=OmE!q&~4ccHQ$ValL4D9*H$QtuJ`0+H^60t{XSvEK1Hy9YeU?g2`AN){~&Oo`); z3%wMw9QbT-+pq*-D`d+?vAcKl0JZ~z|~!(^t1E>I6qkMC~fWF zF;aelqJy?~hy$bTRpW^+z{Af2eD#+#`9j%T+l5dX33s zyQnEpWmv)dDA2Iz!y89VKBe?6c22oX`0?QTcY`k(V_Bywr6Hx244#T#3-$cM6u!r> z9TY}cDNug(Z4a4gTlD!7_Biq+0_4Sdr^`hlQx=Ur*)Vj%GjcQEBAk;((Ub%X=jjZ} zNdCu70?W!8q;7)QNA&}UyNKME#SZgCe{2BZ@zVi`C7`)(C5`~0S=vTnz>9c#?lpxC zgPXJt5LuD7{2F?Ljd%nFCA_^uA&>c+yAMCs88s7bI1w})`ejYrV7LgNaDQtXqfci-RJhlQ(X3-lR=R~rM;F$=15bMX7a z{n6>@;PCkP;Phy8dU|~SyMxoYWCezY%%z70g_rc1rAd?XapniAX9& zQ|^hi1Gk#UBOLJ;O*wHmLq;8x7xmnORZ5z>&CSlmZM*qwT&(cMVaX8tSxG$Z0>wZ< zi#KWFZcnQS3(~v70Oa^vPJl6B)dVa9~TNwihrT;9M;>5 zANBWAMxJzSCIGT(ZGw2`;M!&(njwRicsv+D7hNLgVXlfu^n`wlQc8!k*;;0yyQhPe zpMoP1iY6Yq@wtPLuBoss=?!g2#-dp)5%gq0HP5kAY-je9r*hT7Z-sou2?4U)K(tKA zVoGceQVOhfs$Rh~>H=xqBxEgX;Gc|~oRdIXX2*e+c(YU?u-;b9A+(6o$-&_c8r6YW z-Cr3>Ab4U9!*B3$`a%k%wlrfTPynhSMZLOtp5tS(F~-Tm&HP1|ZEvCac#>%7-4A@L zQGr976e5Toa2oA}rzs*6rBi#2Xb{&9D}7Wkt!pIMFE0=6;7HjSx#D(wR85*%-*M#8 zISog#X6K>T35TR9u) zkVLQEi|6&q=$Ki6DXt?tiWbZ{%4}>GsOWff^aMG)rB4CbpD$4I6CR_ZPf8@HW@uMo z^+e8i`7@ed$Z}5a_!4hSNCU1Kh|9`v`E$Sg--1LXu&q$A;HHglAOT4r%}8v6cDe}DE&i3>#l|TODU+5h>oC62riK%wHugXcwn=u`LYh?^`u>-*R zCFJe+acCEGdnB?rM8+gkWF)4E8#G=ph-N_b*~UC^qFvTx!xuAyA-f)wb!mA(;cZuE zFC!2BmTE`%m-PlC+cmjiHIl@%nq7_MC8E#6as7e^8jJx}$4TIDTFS6A%~`!Qh?&n# z+H^4ieoT}uxDBYm2qy+I;|e8sE@}(AcR2LaX%|_fn!dq=_%f$yaVYHQ0UW38CJYg0 zb68KAR}lvb>#ts1&7dhUnW;$XUYY^8w{wh>>+{oE*;Z;$qlFfz!Oz6(929#F{Nz8N zkDxg<=_6!YMAT zQ`<|5_3JPTIJPQK7;kQv;$oBc!mALPw=i&+6NARjLq3qOAYZ+udr9GF+35*Q zK(n4uY~$q5=ESN3Rj&)=MBYi9&-O+9QcF}lho@tm@Th3lb7Hj^{0u`b+*NZrmoHm~QZD%|!|V&^)W)G#yD0UFEe@gVkM)oS<`VPvTDka|IZNl}<-?DNq;JWH*CyHN06;b>@r zmN{|cM|E(g{e6<+54HS^m*)y<{SBP(eEXZHA_|?-xw^EsY^=uB*nlBNBjepQQ z7$Ix9@fW7i?Ved6G;roAwi+tZ$jt_XjG1hee zYkv`k0Y6^&lEZ0SV^cI}ur38RDckTws?Kc}D`DHPo3Jfyd%mB$9;bux8W;Wi4M$Xh z-n3i%XZ;!JIcoUpLxJe(Uz+jYXb zb6H!-uZC%yV`O1h$g&iTmU3*edbw;Hu?S=f+Jrws69pil{8faB%9GP@fT#C4Qm?&v z_v)|H*T1}`5Bs11VPj25rcrneRQBc?uL%byoMQ*2uCz3}4Er6Nc#AnWfjySP5HnXJ z@_~7!kw1)o@?ltPO4*?hN!mpC@O)N~sm6(oQQhRlf$kt=besGR_pjMnVN? z$C7(VR40INQ^MCACcZHg{1em>#S`+Sm?o$(P;JL-F?NrUD5RC0ujKzB3_UggFdfZ1~;LwP7sO2@)DWR$X+N9Qm6IN1RlFf6mLygqoW~9u8dOJ zfCg?*$oBs1(}zsfLygzdLx{?AMJj_xtdZU6pM*nH%K#QMF^(l_h?9DWq~+s}pMLtz zd>=qJ!(j;NVZR*OeBw4SKKtgwD;C6nTl%M0AC1_gyi!9?ds;LYM(~qxjw1o$@KE`T z^3?H}MSGq>A^{v&FK&%~Nh8QzCT9b2JW^+Pg321AiA;+d3XdzLnV6jY;Gz_UbB7 zNEkz&DXVv6fX|oC=18VEz>@U`#r1(jSjFxVJ;VxQnS}$n6)l8lXSm|EVoXE?SgHsa z5B)n_DOExo@x{jOwtn=1t;8G@o#PEX+FrUh2DzTBjKQ&Y;I_0x2GhwwF9s)9E#m(ks+H}$* zU@0b_Nag_R=Q+Hp%w751NZGnwc~?U8FiG-^T+1v{b`i1yg6J2K#I>PY0E(?*LB(gz zz~5umGy7@FkJ&cnmYcY*AmXL*ddN_U@J34(?h*3lhN2LdT{NHzw5KW7$I_(JF0bLr z*QF6uR{N0cnl?01D=ZF|X<%-swPpR;#r64K{Lo>LFM`!A`=Zvd#4Dnyj^;2-{c2?s zrh_&o-#o5l@ZyUmTHz2d`Y}AwL;2tM<)hq71WdZHPbdkv+giW4zL>@ z9$;L!?sj3%1K$wFs%}2m3=xK+ zKi3TA);^tl3(_2DT9AJMB*ykzlIOWJB~&9{|HlVbUqevB3Kavxn@M;yx~&aAp3G6a z8TXiikvGupv>9$2px#575sZgK$HIX}*XF=;wYq#ZMH#`w_D4fzT2Y>9jhOtDR7v<8 z^?ZxO=4!WClGQfSL`7@~=9Gv^x2Z(&=g2V#q^G~!IkfSW^`q)&knonXyt-nL5PnUc z5gv0)B&B_*x(uWnn2@u(5BET{L0poS-mD_FnbW|$75wYpK>f_6BnX?!W>s_3E_ zpUlbLZXjzh78=fgbP3!biwv?j^Z|&QjDOvMnhhvXQ>yvtw5<3eeKxuJL~G?mv4%KT zYL>dtgd-LK&9EG$g~6eX|9y(xEzLAGF^GkeI-dEOCVY}beltk3<|4Xqy-r_i0l>#O zu%iqB9(!O1g;j0AUF!e-4v)Ny9BBH@cxoxrSys-j9S@ygR>rk|%#=^JrDV#N4-=4W zxc>!P{zG>?WXw-%2qiX;YRg{K%>0f{ntpybtuNHU2=mDP34uiM|Mxiw2GBcX!{nx@huASqH9HWxcdV z$AAKDugRfXM(QXa*xQ^qtde8;d%3H@-~NWf^9x+qDV8q~MVkua8EQ?)0HqfENZ%aE ziuS7z`S|DzO=v0(WjMZtA8uwAklu`M(5rTJ7>R*if%jd_%#cN!3|QP>~#80=5J}Y%H9;CSn&23jVQ;!oHK6D})`%bKz!lF-7yxb2mRR?Sl;rZ^)5;K6SD$0twE$B94Yg*JM;b@O6>o@2~(CAi3? zSt5EVX@K+z1;=Fh8ag3{eLZ}=Feg@tc;F+a? zaECoHsha|lnCAyi(`rl~m)ONhF1Ytk%&?Kwt9i1JEUwB7#us~_*)Z$HA*Es;O?FU>(Q`V+Y&pkqf! zx7?KDm_d^VrZg&9p%nKg8T_V`9ujJA)L#6*(geDex%5#G8)-F9fr~xW#D3j98ZaF~ zXlP^vO#B6aHq4@|;03iiC?0b;bE+Kq8zT(5JPbLj(QfYuDUi9sPGpNt8LCcv+9&Wl zHwK}tm)$^|9~RBio-ed&b#?23#K>Khuj2?ztc^Sk8vNPONnfRxLmZrKPwh>T!3Tfi z?mhkFrqLpkWY~b^sSmQ8-5$g)4E89az{hPlfqOmN5rA>f2p}I@rH7X*|9XrB5W7@B zU7&~z5s2m}B2QL$6ir$Pt{oJ;uJ6MEYC0#*_H4)cbYOZNi_M#YvLrXcc5GEZ0mNK! zg6;Z-Y^8M4;carFBRBb%7^diGh81f(MLMAJ!iG;yJ#jJMJ}4~IQeG^nF*@Ew3u?+l z5Y@@vtH*;^ga7rv2Dg_w9%b#iK~~!4Sv(yxOb-Fc6k_m%hW#ZY$yOS&w&^$KdcoeH z_$SNJ{x%N!Q0k|~a_4n}E zQNH@wbni2B#1#qaQ@(mY$XjNjdY0G;XUS_=JQs0FJ8%mNT!DmI!WR{B6Khp^kY$jb ztwVfy^Be*jP6Fw!92r~(+|xlfI+D2a5w?sJgMOk~i~y%-fqyi8cJCPD^LEubTK@=C-A%sS{3)cga zXS0RJ&cB(4`PeRWQyjnN^#7n1hksSrv~p(O-OX2;XJc}vmj={MD&P}Aer#1eAQ+ma zUCAMm4&U*q0otOE7f~vHg~G|MrGseN+b)t5DdY}or&E%b4AR3%x5Y?ZY!*m?o4o>9 zmRXbN`ook!p%g|FOwUsH>?6dK!i_{(0(}bWocJ6L65Uko4buQ957RMW^#Y$08apB- zaTQHvRP4#-p{UrC92J|{aXkL-_3Ys-I3GaFiWKge)5G)HE0FCK41W@evls^y8J`goAG& zk65G?MR2}*uVOmS?%sU5PsQ=pXQ?nAbi6<=ipb*H#F*p@TL}-mSY4cexI3P#LS+S! zE>WxN8)%qk8*HecQK?05v1za%aF~jp$)4Ue0x5`1T&}ruf^_F~!x6HUfX{RDkso@o zvgrPN{B(v*D*mp|f+T?FI4f$`#7DU#nob^9;dH=;GT_qOItiECnkyogmSO5H>;8su zl1La6I|%*MP)#&=o6}0?74P>sm))wc{D1Nz^(oqZUqRm8Q)%RRF*@$AYo{9W=mv3hELChBVi@w#o7Oi{9WX*pOYwYH$X*D zxfbe+O!zG>%gQ|{aguhp7stRVfbbS~LEhw{ zaWz>jR&iDgQ9>w@(@>vdF8Kkz;>}DqoivME)jNTvem#R-W$0{9&~o?5PM6v$$*XeB z{P3^t-rU>!oa^oZ+oEDlrjw`QXL0u9mHO_wNiWd6+B?^$&9~GrJ(%YuG`&_rsbX0x zi2B-&rmER$#G=v9^Wwp9ldyI=sYWJW7Y@{toRkDCFxaGQ)|$$c|uGLG?I29yV$u z^@e((EzdSOwQOGT)#P>|)?onQf?ZBK5*^aMk+d^<*<%2I_@N5tM17ECJReMTiIr z!n3H@_LuutAK$(Ipb220i2FU0x|0p&U--04xr+~2pFu0*#w8ZA_7MDRZbFlvJ7Nr> zTtNVVr{Oj3uxb*atJOjA9Zn8NZJG}H5**WF>@U}6^F>#+(gEuxg~Y?xf%)DFcG~I^ zh4-DO5K)DI&0-tL(_@<@rqWMye4&LdBRq~Uos51{ul7H|3~lj!onW&oR>0o>jOXnR zNK-Nq2sqcM&JOj87arGdmK+a6FSDsn*1M8RwY@a7c*Mn=WrJ;rDgnx{Xo73qY(_9`sNj#WF*xJF88j6-Jr9ex`75d6TfVCD;$C#}MXuH|Wmhi6G zHRGLb`j8LYm4n|64U0UL^N|gENTsYM!0bnb_Yg_x75t}GFHy(Jf0epU!j)c~xkzB2 zX$UOKDen~b<;@Q@XY&kDSq6#iyWSVed?~9}|1HC=2G-k?V_7;V1r@V!=Ezq7h64UM!VRYKTb{S zZd?7-Cb*+M^B21mrTOmk(VG(*lc$4nlrB!2`Fi{;t1McGW;fjjMMqKsF-=XruZ8Ho zVue+Ppju*UQ9sR9mPd|^2IPj-5x53vwKlYNrr}T=o5=qrCclvqFb%1PW}r~ES(O_% z92-|vnmx@qsmQ=72Q=e=8pEf>&pr`>>SND_CCI2LKV}S-`S2;)HlC$garUOBQH~wUKix9ab z2N`gVNMEHRhx#sWKtIZ~c1Ub;iCES{Bmm*e(0!GLW#_qjI=DX! z))p2N720+z4_WOakQo7X(PatHpvxz!Dh)n9zTDv#w;tAS6u} z-Hr^XaH_&7X6(P6-qGf+L75V{uEOjKnJQMz+P9{$8^IEx@{+h(xX<$C4OtSgCom=QjnxJVz1}QpD-SH8^XZe;NQpJHo%*r8c|FPNNslI)<#K zCxcE<1SyZ)W%z&5^4L&ys+1(QnAFmRKD26pLAODZO+)6~r!0q%n#!K@v{4`!Xk+o# zvR&`Pxsn_~iJ)SF@SznQf2fNK#n=eGQ;T2#Z?SLydo}1CJniZeyM)*zkdB#-6?xb$ zV7>LcF&OGoys61}NluZyjo+lhj=74!#hyRnZ4F_q`{=zyzZ)PGUpL&I@Nm%o<})vt zXr6vJ6v#7Z)0QnlaAXKsikG2}%r5uxU0uYy(~p8Cxh1NMY2BfE2!}7yQy$sO@~c8i zsEm0IPv>)xRpx7g6Uvvnl=R=pzkTXR$DR;6%w!ASC8Uc%EUDTr!}8b6JDTh4q2$fSDkM5~geI#XOB$3bvdec9D3(bTEYzwj z8{@%Ob}#o4PDSHB4tMxjkTa=Z37O0f_-2yx<)juZYC)O{OG+?MwuyNn^Op&EY5zyF zo`ac|e=Lq3PhL#2*f`HRP*dts_fF?6isTiLQ?MQ*yiwH_zgF?Yzq=|UTrd9z>M|xQ z2Tw&o2iMH7Tby{>imq!L)ivjUuVigo(=-wN>^5prLffe|2p29;9SYRi&Wyk%O{XAx z0|lVJw#yq2C3wu`~x$|>so!Z<->T6qYm*LIPfPIC&z{9 zylOXnS_ILpkcs8`JROSr!%r$wCjSvc@uj8bQ`eubQSnph6!-VxaU(@-252!&$N-XD zft1$5PX$uvyrv`w7C%{?u9;%R{x1S!qRE0UonqwbLJRd#V17z`8su>` zkb=OOCssIOX`YHBo!dyWo*4!^C-N78xQo!0G&p;_=@%$)wWV!2$cE}eq<^xg;){6- zE2hen8x?jZn58r@p2Q-#uD@Sh(ABDJp+S1| z%>_Ns%WR}{tU-;`_0?j7tTk6Nusy5=b_sl8ZHkPFphm7IlSvZlF)#(4X?qr?2+_YJ^*} zq>SlJh#0JRm!CTtO2C9+Jl-ve{&syXD>%+IhT3y=5F|tC)BTZE+Py~F2B;@)5%sZ} zF6MJasKD~P9UP1dS4^umsw;1eG)Mf<8^q@!J_IR|WkYX5ILSn;z;`~hz`bzlWw=;~ z&;`?qDZ8G`_Tq<>Gx-7zv*;QrO4|0wP13d>c+QWuJ+g_k?MKGG$W~+?#rQTkJv!f( zn7_Q+`@mwHVLIipcLmKaS&n?EdDTYB*4ZABumo!Tw5@5=fP&PQ$}AkiESrWm!0cu@ zk2LxUqy;vO7Yxz@5-rBpNWE!@bj0Pu2ZP=C>c_7@t0-|rRfwy*w;x}B_;8o8)zNiF zw}iM8@ulO*NJOL!s3 zHvrm>;}yL;cnf{RJcHD7fpte_s_*{eg*@f7DZyvC&0gugmj*@<1WwOopKQGbe_V}JIo7?bCBP_ z&0m7zphao1*)yD=JTfYeNVu%J?>ynl zaoe-=!PRrp$8fpjHHiSJ)y)->Cte~4VRjKj1HlFrEcqSkc(=);h{J8f)KIBJFDEo{ zMR+^t$Au@@Ny1GRu5nkP>!H}JV%I&a9W%a|Gvk1i(_c$f4Nsk~q3gD&6qO7J1=--2 zyEp%ARRr+M9MLY3f%(OAhO5+`YY1?Iwi~99!GG_?V{!Sn!CpN3p9lXn`1c=QzqtpN zLOO=W1D=EDe!c5i79(>DA<1vtLr|1hi#fvdfb9G&@6&Gvg-a4N@c;CO+Yk5eKm6gx zyPtl%`@{4d%KzTK{rKSz=dV9reERMWA3pwcF#6_)pFV!`3T4s$aQEuf{f7_RSMT0_ zeE;svR?t68@4x%>moNg!VnKJ^^#wxc_R=r$8^skE4)RcS_wDdo>Mv$19D@k*u-NS{ z-ULJ=p}hRH{SW*l>%ZqF^|hRP%FQdIVw>JGafJ>Q#%ce$GoTwB<4WXK@NA}YO`RRt z@F00OeMWzWpm!&xb!t3{;QmbukdiGytzU-FrnVeIi&6)$W*6LN=QQYryTm%erp2t# z(jrHxbgfU%{_a;-tEndwboQc!<+)4((+M>0F?-p4d023Vlfw|fl19Ivq)#fRjh4SQS(S;i6Urf5JE0f;dJ){9zzdwbu%`-D=NkB7fMd2(|6jZCA?Y{2h+qED!EOx_G@_RSRx-7`tP$xX|#BiuQqa>5FDH7Uv! zRtg16#!^|w`zV%$#dgUzycUOMXh@eDRpKz<(^2JKr^47*wZD&+1ZkQkFA;4##U8p? zoFnRoiHypY#O<&`9NDtv#mlUoB}s^RmVW@Gmm!ntNW@4kOwp<#OGY%?36jdDtE<%z zdKz;e3M~l!is(T{QZ(r)+GF5=F^~9HzDD3|`8&0!Uq~)yq&n`EY67My;SCXDls#@8Iy+Vqn1wzST_`6D4a>;i`?q_oE96*R|0V$hxs;+mPn za4mmn9^LXE4{0+Aa@cNmo|>K7b##7V%h}zFVA3!21Vl(=Csd?appuDJM9jzl*_woa zASaL_t2rHT`$hySw)1=i_fpP!4~-~$=vFRjxb`dCo@T~VB7tjHUw&-90XQV2pRYmcZEHmRp9h>NtxrNi z>NjDclngz;T3Q$>#E8Y3skh)pd3lDUQ)>$rq;3OhP=w>?dz1EOWD51&@?uX1H(@jQ z!wgUL)Z4H#RNsQhj4gIcTUDq5A5cD`f3NZp?Y+uJwD&3>(cY_kL_3v_LDY;5;6wN; z=)G(Dqgi{KvL^#F@t^cJ{#!7Q)P`r0>9Pxl3~w=q46#P=48ufBXD_g+*zj39k6Vq7 z{>o~QnjswR@nZb=@xNk82md5FumeUC{C`FC(Jt_W;L%R-l;DG%;2FV(1XJ4P#4(9Z zg^;%Rh4WgEI~&jiR70vCkbgTcug9q7VsuCi${1qFAez(;m0hurwj=ReleV8ZhQ@S4s;%>f3>j;$p9Q2po%+AZRd<+MxMdrh<^? zAZYw%QYswx)NGE}^e_RM&^r)OqEHK%GMGT548^iE_NRJ7>Xl(`=Ke2hJ544Bb)gar z)ot|xsXK`iU-oAl7I3La?@HK-QO(6-TQ>l@HQoDURT(sf1(;L(hAbp86P?IYZvU&aC4$>I2 z$VmS*EgRpz`}t7>Zg`0|+MQsG9bccr_7$+y0z&K*778g}9gtgUr-3JR+&dn73o50LC%)UQcOfx(x`OD%)WN8>%P-+E`S9FWotkxhIyMXXlEP*)&5t2pYnt7$R? z1`phV6Mj%5kyB$|UgAQS;wCfV59vRVN51rAfT0vuAq{XgC_b$#j~fsGZ45ypg(Ml) zq51sQ>9AjE0$rGZ$a&Vm>Kdluh9weSe3d2Ar^Xc^yL#ynndBisB=J56|M_OAE*?l_0HHq|FUR1SgZj?K?}ljus0< zEW%J3ov}SWd|Ib<*@umc%Y>yq-{LrjeCiyG1*#rKJYQC@!h5BgiIa^oLMqHe3B-`( zYrPhu*R*LFg^ZTUFycZYtzmXvkqu}|B|Z5Oxz|!;a!I5J)4<|Ff}A2C^ZzeWiCH;f zG-6Ldh@Jq!!@UQ^!GZa;r#P3w+5 zuxdwcYNnma$y=NhAvbkjd$Qd``l*F(1wPe`{J`#dNw zG@q=GCz>;v%m*rr7guf<2G2a3NH$+%Q24Fe#NCM>rM1JeQR-R}9>l8LBZ(JCZZ)|X z>2O9`^VLR6GYKc}CCp$L-Vpp6Ur{KaT<>0X@JT`T5l|W=gBs}b`O8?v@GNqMpS%&4 zEM=+7a)9q5vb0E-*|)(Qq&KRV&G^k<-mUN7Ag2O~{cTbC213so2C~a@Itja!%1XcFpsdT?;|7eQ^xd$e7{-h-st- z&YjSqr|^A5y=jL4+B@E>Y zVG3wCeyyN&z#lVHY4WK3tpj!=WBiXY%jk)mjrYN!2=VutnT*bR#g@8*zHp2F z&o38eFi}O787Z)~Ubntm)2`%gi%xo4Vu+x>ZyBNy7^0Y|Zk9-`jm#ejIWsThr-cku zSUN9S`8;Q5MhVO3mb?;L1v+bi(a9`Axy^c@uF{3DM_%c4|HLFtAvftT^*%hZ%Aocj z%K_8ZBQq~5%Ag1!sop?_Z-vL)ALlP*HL-MPHKc zr^1n1a3uzJU`FR6>9BZ3P+^`?IZstuLDy`Z!oL*`uBBE5?soNJHb5<=NNRqS-_Tc0 z+j&+h2`nmmyqa7fymhjS>cKvuiT8A}kp00(wpr9^x3NW3;zJ z`b=szl?nw>H_U{>dE8S4HnOv+MplaScd?=Y>a!6G>h%?}uZfrylWna2mNl#)C!ej< zg1O+5ai}_6GX;exBKJN}*PB6@LkAy!`uY9+U*Oyavblfz&jW_NW2s%3hg!0XUa~9> z%GC2xHv5ma;ry*AiNjCE@^^&Dn)(YBSqz zj+XEkGG10*M5#?=tYDA4paZ#&9(L5EZ-IxPgQp6wZZE6!3^3HRi5_ zsMJpEF;5^=!|2O<=r2-lBJIoT}n$2OF4a-2x^P2n=z2{nQxfHUN@p)m2XkdCz&>=Wyu_)C1{r&$j9@q4D5z1kQusuMkℑy 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 SK+?F$!H>z_oMZt}-2Va4A(c)5 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su new file mode 100644 index 0000000..9dfcbbe --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su @@ -0,0 +1,14 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:200:26:HAL_RCC_DeInit 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:219:26:HAL_RCC_OscConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:591:19:HAL_RCC_ClockConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:775:6:HAL_RCC_MCOConfig 56 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:841:6:HAL_RCC_EnableCSS 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:850:6:HAL_RCC_DisableCSS 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:885:17:HAL_RCC_GetSysClockFreq 112 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:941:10:HAL_RCC_GetHCLKFreq 4 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:952:10:HAL_RCC_GetPCLK1Freq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:964:10:HAL_RCC_GetPCLK2Freq 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:977:13:HAL_RCC_GetOscConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1056:6:HAL_RCC_GetClockConfig 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1082:6:HAL_RCC_NMI_IRQHandler 8 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c:1099:13:HAL_RCC_CSSCallback 4 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo new file mode 100644 index 0000000..27ec63b --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo @@ -0,0 +1,7 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2513:19:HAL_RCCEx_PeriphCLKConfig 17 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2641:6:HAL_RCCEx_GetPeriphCLKConfig 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2679:10:HAL_RCCEx_GetPeriphCLKFreq 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2766:6:HAL_RCCEx_SelectLSEMode 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2803:19:HAL_RCCEx_EnablePLLI2S 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2886:19:HAL_RCCEx_DisablePLLI2S 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3143:19:HAL_RCC_DeInit 12 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d new file mode 100644 index 0000000..438a256 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..3969cbaec599d0b86bed17c033686f48a2516bf8 GIT binary patch literal 715480 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 DwKZJK literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su new file mode 100644 index 0000000..180ca76 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su @@ -0,0 +1,7 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2513:19:HAL_RCCEx_PeriphCLKConfig 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2641:6:HAL_RCCEx_GetPeriphCLKConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2679:10:HAL_RCCEx_GetPeriphCLKFreq 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2766:6:HAL_RCCEx_SelectLSEMode 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2803:19:HAL_RCCEx_EnablePLLI2S 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:2886:19:HAL_RCCEx_DisablePLLI2S 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c:3143:19:HAL_RCC_DeInit 16 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d new file mode 100644 index 0000000..3dd23fc --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o new file mode 100644 index 0000000000000000000000000000000000000000..152b4870d1d8301a3fdbf375453b022363aaf9ca GIT binary patch literal 707292 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 >g~1^PlF8L)-vq$6Bna$ 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

    3IRFEOgbU~u4Sm!7%X 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 A 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≫t92a>M*DuU@{n)vjXV=F+&E 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੕*Ez0i|23$O|vbs7s=GbD-ao#yGJLmc#!iu5MIlc z!Z>7TA@^C4{28hr&HES@x%=j6Jv_Iwxrb|aXp`G?76#GT!TL8m^tVUWZ6f?; zdB!ZA&g67?wHBD05S~_39S17gGvcgZ%_l8S#hRA~hBDc2KN1v0*kqgQ9X6XuwDJQs z*=|RyK(G*9x*EtOEkdE`v^U(H+44LG;@JI}`K;WT{YdWb!rh(*M-VLW)bb$u5qEn~ zT+9BM;YZ(;cT@?12__Qd7i8T?ds zu`%2H7Z+6?18$RmDShmDq6N=Fya>aKEySfFWoyLEWVNQv zvb^KCQJzSe8}tRGp=r^2x@8kwp@&PW@K#_Q?f^d~ zCiS%3kcq*OC<|`sa+9BYr8;Gb-LRE796#RtW#A_XFKi#jqPj$_l?BDC5{73z>^tc~ zRSqYivQ2Xd6(n-iKs>{0NGQzJfgU!@bu{#-n2a07jIx&GZ+Yi@h;uASavkDCd~(>S zmRqc67n}bEjYYs(kfp}E8Jy`w=EBCQdl9m}xUcnj#B^P;4i>)YMW86~2mE*S%&Ai} zdiiIw@liOlfnb;oFTm~Nyofp1+a?TFN|r8>D@Za&wi;aVSqQQ+;VX<>L&gN0!yTke z4EqWeV`m#37Z8U0+1giXvV9fj0JH%pzv1qgz2&~8Z?WHNaJF4_P;&51_8HMysa1O= z@M%U;>z;scnpXv@?sz#|&HQ?1PwQp=?T{H_c5Dw9dhJYi&B-a6>{Ix4JpPt6%#S}J zEI0zl+pK#Gczm}jv1r0>BS_4~l%Ro=9w*8OthJperZa{MJdb%6Facvmt#XA!i~TG= zszOE^o(iT6Q@YtJhQqUF6%-(H<*wrE(+>7-EklsGZ{@~H6Rr7p%*AI9`vtS^6u1YKW0g%kiG8BRUT@b4OS8Y@ zTkQue`gi57x0dY3LXMK9!MROo8clCd-qA5msBXr|_W0d2Lw2GK<20hJw7wi@MJIcK z9XK!si|3bNGBIJ|MV`T%taoy24w}Wn?Lulva@+)Ea7KZ2YHkTJQ#MnngWukzq50ij zAXf7Xbh-|B@*bC`*k55G+CkBVuP!Uv?7py|w6pa5s!tV1gzX6;;%ls`$(@) z0HJBU>=m?r2hhHbFB^M+R`^|2w%cZj z39@Y~%Gl76Gk1yGze1XR5{WqHG#Mxmgt+S?;1+^=8vm8n*cSD%Zq+FOtVbe0m)Dm1*pLdg%_65PZuZFQ zl5W}DSzI>xL2{L|PtrmusP`|6xqv@QEJAl!4+jCP86GTXsbmb6+zb?e#bF1Bhp2rf zjCmnzc52-F^TU(c3s0G>uLtMjJfjx^WaW>NJQ=u#O%|5*nTuC0-&eDL@H!1@V5yVf z;k@N<#)p!YM#VPYum~@?LRseYZ!#~H?LH^2-G#A&%||HNn&G{>8xywC>1!*R<4i01 z>AYi4ZP_sCvC$S8{?<78JBX{;+t}G3m{?roRxN4UN1Kb()i`4!Ln!)on4e&+zXJ=U zB!>mGrr{Llap~iQmRH+H7Zf|fnHy{8mi{PNI}JD%H<%jn9Be`mh{g5^gRt3MWU9EP z6tODUbKpZrvcXuL1UC76eZ(xPyoTsADZH#^Zm@yqudl8KHYai@xY@clwaudl7c|8* z8cat?JH=C3j zlLOH~W1UNz2zNQ~*ks>@Wgl#T**6VWPy{CdF2Qt#T2l|ZY)@u}lP#4IFYOuTedUz! z`k6>4xyNMSmoA*pvSy;wFln{RCiqCUxaeJ9b!jV=+Fcy332{I+MB6gQ$6)Nkx#Jyc z<{FX4#;nw4saCdul8)+c?#NBa3*op#ts�x=bxrah%}EEf7C^v;EZJ1+_vAsY%1r-D=)< znYh>e@vsYNf`kPQ(<+}eq&*N&fk+Om3Kf zyHZ*8q|j8xmj1NFro^8c6b!%`d2ffLu_I6mN@VgX*m5Q|7oHL&uk(m#SU3ce;v4qX zp>&i~31ThTvrmaMX`@NoJg8|W$R}!pqYGE^D$E`8{o=rpnwUh0la1y39!3Nc=pItqA{M%R1jd=h z8&A2}Qj>MxfK43+g_A0DYjY)CfL%lo2bwY<+(cxY?Lw9vNV6HA^;s@8+RvoaNq=3A zfa&1W%xq32u4bJ8j#0b<*7fzrCKn^}xFME0TqF{rU>rZ_S zZT-2IOm3JUyKehTj_nwnwStCAkLV#dQkh8vj8Rb{F2o8G)=~D@rZ4jMt7U zR?^0pO=uALhEFT?v7fU${~`Lnb-9fhj?a&F(O~_6%y@^nRK#u;$gnp-yn_fQ$=%qm zy$pO=Q3t^{B;QE|+avvJv1@h3w5M5Nf#S>BY!bKuTEzxv`35jz+VaBlAJe~0R@u%Y z=3fWSXM7eoa9_B5;oAL1&XGV#D-BbajH(Z}>wq(Ta%_=|>~fE65Mq#hkRpLub>c)6 zs|rt|;hwu5*W%JyjFY>2=b&Jc#wtpU!pdb`Y&}vei%B=!hxLIy$L z@5+imQbB@{umTyiWr~qZXEv8>9j$lBC}CsItWV@Jjzi@EB(T#buA&9pyQO;tRVF^5 z^}U%Q;rfntNO_%YFzsrXw@$nN4eyrQ%R`B7w$-t?CCm&PM6@hYha+HBi!)dXSekXP zxpCH^$JTWN>Ux*O@D4(N z8cZbQ0~B^A6*i6Bt2pcKp2rW$#au|e9V&{^{KZ!^_HjI_UX4g{g%(T5-FO{36 za=TRSmdf*`@=HqPmzBydFO@&HR9-5TmrLc>5?mcH*(W?qq%pEUFJS^3E`znGPu zGV@=u@~6(sKPr9SQ)eE`%AYp#!&&)hGk>0yKYgb0==Axg&s@pMpE2`&S@{_=f0UI! zbLM%ENuPh_%u!bUteNl3%Fmkl{j6M@dCp_g=bt_E1zGtyGvAh#pF8tgS^2YPp7sgp z^Uq5Qz;CZBm0w>fXN!&g*$t2p@)X|k1h^RE?hc&IP>78 z_UZcRgB|n1sAJvo#}BVuK0bZ_>1OBj!qM?) zp}lZ$*yyxJ&H47i+;{<^;`V&AGhUeMH1mh?Ol$shdmeq7jpI)9Xko6^Zgv`NgsfVq z&&|~vjrwu+Or!D8m`}A&A2%23^Q~s%@ZjKR)Mz&5(Y<>JTBqAOI5JlQ_oY2x!bN276P+&=E&spdiBXk0(&j_2Ere zIBK=q&BKG^PP^W2)aMV|3oW0^A+&kdu0Oyh>X?j!(ec4ScODbaIcy(|M(s|wGn(&= z#^Zx#x9y*G?F4ZWPW*|(X8U;58XdPV>6n6Uw|Q{T=`6HHm_dG$rd$s+Tc?jYt$KTI z)SW+WNMx(JL4mJ;PBG53)hl)Yc)@|k2>?PWv{mn>y6QTb78~< z?bgTho%TWJcz*29LDM`u#MIw^y4yXC89r{bx`*vi0~2`I?#{Iv^WE-ow~hXD&4uKr z?mIlhGtKU4EJ^!#ywCvQderS4<5!Q5508)WL-qO*Cb9f8jXCVv&cdjJ_Qq&|udOdM zju7??8x~uug^;E8%%ume4@Xxoy=D%-gU@Ns9kek`hX>8$`J+~&(>xq?umML4M{~^s zY%F_5`&`?u+v=V^#v!O5&5sT{^M~W{sNHSMwGP{z@fcg<@VM)<5RV6!XrXg@)IOL$ zz%(DX<_-@Rx(oA-_QHI((>*>OcaA&rzUS;AJB}B}_l*u8=5#bqH@c(4#v!Kdc+|#; z?2KE-Be)YB%q?^f;H=@Rh5dlt$M0G=jni{@+&MZr#5!ZU9gPlK^=4<`=&&*B9?s7l zr{AUH@6UGTPGeh+kH_=)NvteqXQ7Q#**ZFI%#E>I4l16#dU!Y-Kg6-tPcJNt59-H9 za|fMKXLNL2Z+8zyqvojH#5Ow`&5x=d=N#3sSB?+onseRb`a!E*@6I2MjuybSaDC?5 zor8AO!}mRK;R=5lTu$?7)Ezb22aNf4#3{q6nVUNp&$Ti5qq&M-=EE9!yaWmT9@@H{0PLB?o82A{2o?B>+5qtyF28`2OXtoZ4 zAN|ne4%?1wjQER^2T<9D%7LKYOKc;~TM_xbOJZ_BZ zM~wsEcr5s6zA>6xn6HmU$JpCrAkB&ix2NM?YXTv+NA4T%gX0v&GaC~?)IzDO~H?is4oum0<+?qTA6`y^5bd^^HPRVF))I2)E9o=O{ z#x~AXbJPSv!gY4g!I7JM7|+c$PD6wMoOsx39JS}LKaN_sH!*}Uw%$Uwy)d3J3h`Eu zk)-Ty1vyBHjF6NSAt|I=K{k@oxfSFjDPGo-lP9DUf{>gv;iBNW;Eo_UQMMlmzDkf3 z?5!YcN%``3NU`1uGL)1a`;+3j6=diORHg)g_2lGl#h~r?K!%=C{dvJx3SJO=H6h5; z2MIxzk}|&)>QhQgX#pFJ~kJ0Zx# z1|i79mlA?3Tp`3_kl*Au_X(drGczQ_WL+Sfote2xcnaT3h<a(xKYN^7$hanGAV9CTPHwLuq@*z4dPLQ9l@6h zE()#*ZV3(q?-3jdjs;&OXzPjJvGoMB^#pu_+TSQ>>x%lfsQgyJ?+|>4;5!B1CHP~4 z?-hKX;4cb(K=3yNKPdS7f*%q5sNi1;eoXKd&F^CcpCI@Y!KVv8OYnJuwjc04wjTiJ zRDY*nPjEvp+aKuv3e}GU?-RTvcunwO!7mp4a>1_=e6!#;34WX4+XTN`@CO8cMDRU= zKP~w4g6|jnRl(mB{9VBh3;wa-p9}uA;NJ<}29}!p?{R`p6nv`SGX$S4_yWN@1Y3d& zf}bO}B6vpdtl)XU&lfxtydZc*@Vek@1;14AD+S*q_zi;JBKYlsZx{St!5!C*uM7UR;D-eNQ1DL$|3dI@1pi*}(YN`$K3?!if=?5Crr>i0PYJ$Qup{_V z!9~F}!7ago;5~vv!Li`01Ya%qpy2BT-yrx#!LJj1i{M)YzeDgHg6|Z3m*9^HzE|*l zf|QSOe|Csf`2SXxgyu$uLb{3@HSjjcK!vQDEL&tX9zx9@CAZ*2(|_*}tLf-e^A2)1~kKj;nEchzHR|`HU_jd8-_*TL15PXN=I|bh*_+x_a6?~uI zFA9D@@HYfMC`frT=jkJY9~Jyd!H)^v@>uWpSivUCsf`2Ud=YoGN_;-T0fq~#S9w+!j!KVs7L-5&xFA%&#uqC)4_&I_r zf@cKJ3Z57Ie8EG(3xZb!uM56b@Jj{1Qt(ZJ-yrxcg5NIqcERrz{2{@23;v|w&kFv6 z;4cgQy5MgMen{{S1^-m=F9iQa@b3j5{Wzc3#|u75@M(h26nw7WDZv*Db_8E4xG1$<~&~) zq=t^=Hwb>U;F|@%S@7Ehze_Oihd-?Hdjx+*@D~JsMKJJ%zoYVp1x*fs-~S7hO&)-9 z;0HfJe9RLCKTYtNf}brI_`s&h3xc03xF)zQXz~I4&gZFoDENhfuNHhrFz|g}p|Z&f z@ccKb{8qv56b$^{532lb!JiU*pWrVE20rh%RQ{0Q9|?X`@UH{|fA=WyBaat+vf$GN zYl4BVJFRj@@MVHM!Mg+lKXL2mOhm3xAB37!?aTQJCLj#a)SNXrcV&T9p~Oz@3@FB26@%bsr-JyUlaUo!QT`7Gr_+W z{I7x^?|hxobN|@$_J4OAU5)Eb!DYcSf_=dtZ+xZ7|Ns5r=k@<9_s7ll$<5k>{Q8mh zd#?7$Kh?eua_+18oreX#MDQyGzg95FxBs#51lUx=*G~|HO2o>~5PXhc`2I(Vhl70o zUOhh&ykGE&;A;efT>qb|{569ALhxGz|Fz&d1ixSKM+ARD@Mi`8o!|!q|AXM~3jTrM zp9=nG!H)^vD!Sxxf}bMzG{Mgj408JysoWBLiQuB(x?qskpHuns1&;(@C1`pb+^0cK z|0SybO2Mxce2bvzchEn`=f6kwKP330g6|dlIl&;8|236=Tk!V;KO*>NfYn1GlD_R{wpf~hT!iAepv8N1cQA2Z&kkKHa}ONAoxVVPZJDsb=q-~ ze!5+-DYzi`xq?BSzOC}U;O7Y*3VxwrkfT4O@)rw!h2Wb6zfmyA&%aaU?-u+)!FLP( zlwgpX|B}kTD)?K19}@f{!5}aHE0zCF@KKWQK3?$2fji^6{9md3cERrxe3#&l3kEs(zg78{1^>O^2L=C= zV32?RA1eQiAQiOSACDFMWWgZ!{!EphEBHb|+T-%MdBGs>UR8NZa8K|Rf(L>@&i#PO z4+{P>!7ms5Zv=yU`@dEBI|ToG!5m`*p1a}3`3x0uMkXv6=`I_Jt34W>IR|y7r z^}kg4+XVkR!S5CP9|VJ(`hQaS=LP>~!Cx2rUj>7F`hQdT&jtTa!M_)L%wv6?f?WDj zRepvb?Wj4Arv&SQK_2~bl~)8e1qXun3I;j!{VHD(e2w7i1^>BVkU#$mmA^&sUkkoN z@cRXW-1#R|{#n6)C-?!u{~#FT&3~Zsp9=nG!H)^j7KYy+Yw4J%T}w{G%$rSMcWq z-!J%UfBvZ=NXlX@bub{A|G>|81(gAo#h0Yl7Q?LGJr`Djy1dq2Q|p9}*1m z-mg&kO@iMj_*TL16#Q<%9~6AI;74G)E7YLpf>Yo-`w~A)-9U(dK-3P5B}dgYKZMooWTE^!_Be1h%2~`|8HMs`r70E|IG2tVZt&B zWAmSv`~UU+XSe^)|IPUV9sW1x3v~G3oG;Mfe{;S-hyTs_0v-N0=L>ZB-<&Vd;eT_! zK!^X$`2rpOH|Gm<_}`o_(BXe`zCefn&G`Zy{x|0fbok$#FVNwCbG|@_|IPUV9sa*Q z=gVN;m!0`olx0|%wb+m?*q+_kmqR$3lQ@$LxSZ>_m3w%ICwZP%d7BUUobULBLH`+K z{yQ%Y%?OOncudMP%*#|FN?4=E3qaUusPeYEBkOTM{y!&a6XrDEw^wt z5Ap=h@d|J80iW?LKQl;_K%Y)4a&*yvxUY$q)R-VE+uV|6Au{B*tU{CTBWkWgZr0DOO|+)@L)eWf%75 zAdch&PUk!>pxs7{yn5TGw*La7I_=4~GmH*!J<-c`4Mq~`eXELT`7UpIl zmShE1XFWD$8+K+d4&(@q=QPgc60YVZ?&N+R;~8G!4c_AuzUD{%%@8pHox(B-V>1y` zG6SbT*Zyt!Jm1QzwlT7#^3n|U-3`= z#o)05oql3u#$rOIV0va_UKU|#R$@&yU~{%(SN7pxj^ael;CwFQT5jQP9^?t0;}zcG z13u$he&)Y74v$=>Xxq;ic zk4Jc#7kQm``Is;Hf!`P`PM}j5Mq*4RU~;BoR_0-0mSRQLV0|`YTXtb@4&q2o;B?O8 zQm)}p?!xR5Kjp4+&Whk1$@c#U`Xh%fk_U-|Dn+WtHLGa_R!K9eymvoJRcu_P<7I_t41 z+psfxaUe%%}Jce1zgT`+{!&X#FISFtGvyJe9m|L!k`HPeL^z=qca|p zG7U2`7Ynik%d;BmvI$$W6MJ$1hjSdKat;@B6*qDRf96sC!e99tf9D^3#XtEMgC`7h z`iYSliwT*6>6wjrS%jroi8a}P&DoA!*@uHUiW515^SO*`xrMuVkSBPKS9psL_>6D) znL!c-`h;S5Mq^wiVQOY#P8MKsmSa`cVPm#pNA_TU4&zu(;cPDAN^anG?&A@j=0#rT zT|VYZe&9C-OC0DFhLISP37DMen3Z{0n59^eHCUg`*p^+`n}ax#6F8moxRh(SnY(y^ z$9a~Qd6W0~lyCTn-x)GVpi?+TWgI4EDrRI3=4UaMWfj(DBerA*c4t2h|$=U4uFuhsv~|BT2OjL&3D%Ph>zLM+J&tj>CD$~NrGUL42~ z9M5T-%OzaRP29=-JjOG;#2dWFCw$G1{F@~&g23v=Q?iX9vJjW}%#Rq)GxBSc?DFb~%F+8I& zE|V}dGchL%usF-HD(kQ@Td^a1us?@!ET?cb7jY#wa69+$2v74Ouk$V+^Cds<8-t|^ zbPB^rjL8H{&UDPmJS@yotjHRy&t`1PF6_-g9LWis&UswQHQdZyJiy~T%gemU`+Ukb z{KW4JnL5xZ9HTN06EhVvG6(as7|XH>YqJqsvID!bABS=bCvz4Tas}6O8~5@sPw@h; z@eUvH1>f^4|Gh{0f9HQjWDLe3V5`*H|Ja}sBA z0heO~N zfXSJTS(%50S&9`|gZ0^rZP|srIfx@UfzvsUOSy)dxr+yQoM(BNH+i2=`G%kPogp&? zI)!6Y#$jTnVn*g*eima{R$*=a^8q*iJ#SmG1G}>yhjI)ja~2nJ1=n*M_wq1L@dB^$ z4j=Ia-}5Vf$Q<~+e`G|)V0qcAoTF(orFJM*z9%dj$Qu_0TqJ-e|lhj26}aV8gV zIoEM3_wW!;@;tBdHXrgi-|-8BW)1WS%?OOncudMP{O2R^{@ZVIu^>yZJgc!To3J%I zu_p&`ILC1+=WsDsaU*x|XCCD*{FT4)cmBaw{F8q%c(%ab`x7HG785cB(=!|MvItAF z5^J&no3kCevJVGy6en^9=W`j?atn9!AW!fdukaQh@EPCoGlOIg^a;iAjK;W3!qm*f zoGifNEXS&>!^UjIj_kqy9LBMn!r5HJmE6GX+{Yt4&5OLwyL`--{J?JvmLt$93?nfn z6EHc`F)Q=1FiWu_Yp_0>u`Ro>HwSSfCvZCFaVghuGk5U-kMk@q^Cs`}Dc|rDzcXac zK&Nnw$~a8SRLsa6%+F#h%POqRMr_Fr?9P51$}ybGSzO2!T+eOX%fmdy3%tfVe8d-g z&#(L;SD??2jK~;_&ty!?EX>V9EXfM2&U$RhHtft^9LNzI&uN^?C0xx-+{yhs#xuOc z8@$ISe9e#in;~)sI)!Bv#%3a>WCmtuJ{DyeR%R_WWDB-uH}>Taj^-rJ##9f zu_Jr1KZkKFr*JkGaV0l!JNNMjPxB(L^DZCrB|q>RgXIr&3d2Z@$plQ!bj->;EX-1@ z$QrEAW^BtY?9D+O$qAg!d0fgh+{|4(z~em2%e=|^e9AZc#P1AQAkZlsqcRQ?GZiy3 z2lKNS%d!eyhjI)ja~2nJ1=n*M_wq1L@dB^$4j=Ia-}5VfC>ZGTBO@{f z<1-o4G7EFF5KFQGtFs=PvJE@47YA|#$8#FzatT*+6L)eykMRsI@doel319Og|7M6n zflgr=g|V54DVc%UnU6(ThLu^14cUV2*^PZUgrhl$Gr54vxsF@8hlhBQ=XsU4`H;`~ zj$atGaG+0UMqqTtV^XGJX69l+mSA~SV_i03Yj$E!4&ZQ(<5bS!Vy@yw?%>Zn%3t^^ zf8+1`gRl4}|6=eWflfa$GGj3zQ!qWVF)xd-G%K+t8?ZUsu`By%7aye8~^|#$d$)ox(5@V=@7gGaa)s4-2ytE3yXbvl-j63wv`A zM{)wEa~_v+4L5Ta5AZn8@-lDoKA-XpKk++577ug^$Eb|M#7xDE%)$ID#iA4&xJ{K$xm!T3zZw9LZXEX0zm z!0N2WrfkE`?8Si`!SS5Nxm?24+{B&S&tp8pOT58*e8SiK$iEq)WS~=6Mqz9wVoGLU zcIIPImSJVqVneoIdv;@A4&i7{;!G~!a<1c6?%^Sx72)OE3i82u_@cIGkb9$ zM{qo+aW0o|H8*i5_wyLf@DgwE9-r_vKk{#es1WEBmQfg+iI|cZn4S4plx0|%wb+m? z*q+_kmqR$3lQ@$LxSZ>_m3w%ICwZP%d7BUUobULBK`RFOgk}UrXFMil8fIoL7Gw#Q zXEoMk6Sih2_T&H#=QvK~94_W6ZsZRB%%l8;zw$T!&Oi8yfATK|uN3I?6C*Pg6EX$U zGaK`=2urgPYq9~GvmLv#4+nD;Cvpboa~aoi3wQG%Pw*VC@D?BN8Q=0VgH#Um3B~Y? z#<)zv)Xc=3EWqL{$EvKu#%#ro?7{vV#<85j*<8ex+`#SJ$0Iz=i@eUee9V{pz;6sz zCD17hBQYiuFgepPEAy~0OR*wrus)lyExWKc2XQ1Pa60F4Dc5i_ckuv^^DHm(Chzkp z-|!Q^Gi233r*MqQI84k`%*Y(f&tfdgDy+>$Y{?Gn&VC%qF`UdzWK7E}%*{e9$qKB_dTh!z?95&q$PpaRX`IU?T+L0~ z$^AUWGrYtbyvHYe&5!(>A*u&Dg=G}RW+J9!24-hI7G)V$W-T^k3$|xB_T>=9KIc1rVbB_ZKA{F$P+xrE4;-Ae8#u@%pkP_eL^ujqcJX%Ff}tVCkwDR z%dsl!urXV)BYUtvhjA>Ya5filB{y(8_wfi%^CGYFE+6wHKkyra)edwD!$^$D1We9! z%*s40%u=k#8m!M|Y|Ad}%|RT=37pP(T*@`v%w0Ud<2=jDyvh4~$~XMP?+jTd&?y|F zG7b|n6*Dpi^RpPsvI=Xn5nHkYyR#pMattSP78h~_*K-^9@-R>F0^DBR- z8|d>RBQgf#Ga1t|3v;s&OR@s1vmTqW4Lh?J2XX|*a~kJz30HFycXB_E@eD8V2Ji6+ zU-KjXW{7%$PGK2^v6+Y|nSt4vk40IAm061o*@ErajeR+UqdAE)xq!>Lj$65hhj^0b zd6l>Mkk9#!Ul_E0pigKM=3+sXV0l(!T{dBBc4AKs;Bb!PRL#|FN?4=E3qaUusPeYEBkOTM{y!& za6XrDEw^wt5Ap=h@d|J80iW?LKQl)4a&*yvxUY$q)R-V2uKu!Y~qJG69n_9kVhI3$qj}vIgt3 z8QZc8dvg#+assDw9+z?rH**&c@Ho%%GH>!epYjbq@jF8{4s;5~sEotJOvQ}M!Tc=7 zvaG_|Y{ZuA!0znFp&Y}>oW+G)!S&q6y*$iQyufR`!$*9<_x#Eqngsg%$cT)=_)NyM z%);C(#FDJQ>a546Y{Sm%#ep2b@tnrFT*B4d#GTyFV?4u4yuo{X!q@!BzZs%wpi@{z zVQeO1N@ieo=3`NoVP)20L$+Xhc4J=-;b>0cOfKMZuH#nj;US*nd0yphKIC)0;}-^P z7U&b25g48En3QRlnYmbyC0L%-SeH%Mnw{8_12~-HIF)m_n5(#vJNPq?@)!Qf-}pQK z;4A*gzZkrEpwmx`%vemw6im--%*!Gy%}T7v25ioD?8-hI%u$@k8Jy2$T+1!o&4WC_ zbG*V^e86XX%g+qbBG4xk!!sJ=G6_>N6LYcvi?bZ7vJM-w6+5yA`*Rq_atdd25m#~p zw{stl@H8*-I`8r^U-ARLF<8q$r!b7fm`uRrOvkLu!@?}ZimbuNyv&=t&!>FDPyEi1tpc6GF)HIQF;g)kb1*-Pu`H{wHXE@eJFq+Z zaVW=dGG}oiS8zSIaW4<^6ff`^@9+^{@IAlsht`2UKQba?Fg}wpEweB;3$Y|CusZ9p zDci6!dvPE~a6G4RE|+jMH*qKT^BB+Y5^wMxpYSz5@^6M{6X+C{Q5c(vn35Too%vXl zWmuWD*pMyQp554&LpYj~IFk#woa?xidw7T^d7f8!n-BS%@A!p5+XniCW&}oOJSJrt zW@auHWC@mMHP&Slwq_^x`m@Eou379a2#-|{nq zv=8(N#qf;AxJ<&-%*325z~U^&s;tAtY{ic3!Tub^v7Ex$T*Q^!!0p_}BRtKEyw1CP z%$NMYZw%HU&?yWfF(wl*InyyK^RO^Wu_9}*KAW*EyRbJ0aU>^jI_GgI*Kjj;@c@tW zEHCpW@AE0&@Dsl?WXC|KaE!`0Ow3fw$Q;biVl2xltj$Jj$qww!ejLg%oXlBV$Q4}A zZQRSlJjDyV#yfn(7ktmJ{Gn5z&yS4A7>v(kOv^0H%|a~63ark0Y|1w5%w8PG5ggBH zoXaI#%}w0N{XE7qyu=&4$0vNvkNlepW@kPYWf@jxEjDBewr4l? zKp&5bE8IMVshMAd*1zCdSS&ens zgss_$Jvo5GIgV2~hl{z28@Yo&^C*Aeul$X_^AEn_pZtr#y9PS_#K?@rgiOKo%*MPd z!qTk7nry)4Y{#zb!@(TIiJZatT*kHB!reT`6FkQ&yu}B6#<%>;Al(9eLNPp}F)ouZ zH8U|M3$QrLu`27ZFlDIB9R4ihsKGcpJBvlz>=3Tv|wTe1VYvmb|Y3@39I7jgyHa~t>aFi-IUukj8a z@de-WD}U%2=<_2ZG6v%_8PhTgbF&ajvI48K9-FcaJF^!DasaE{|t z&f#LN;zsV^&pgUs_$zXGbOvbd#!rUyxlB~e$tjDHo!_Mr*fgHi{oW{9a!qwcwo!rl3Ji|-8!Fznd*Zj!8 z8De0dQ&>h}Y$jq#W?**aV^Nl2W!7RtwqSd9V_y#8XinlxF5q&m<5uqBA)e%UUgd2* z^=o6X|7@hH$lxdimxmb`TSf15bmrdB3o!FBDIGp1+m2S8@Zlb03fJG%xZx@A5HU@&msy*w8?yFpR{QOu*z!$E?i5!Ysv#tik$h#$sJBc!(!?o>zIB5BZ$$_=Q172Kt0% z1V(2(CS@9CW-b zF9shK==2jKGZqsv1=BMd^Rfs_vl45v0h_ZOyRr`la}+0X2Iq4b*K!MY^B_;~9Ix;e zAMhF9@-u^s4)h7d@QlW|Ov2R6#GEX^;w;Citi#4^#g6R3{v5`!oWj{$#FgB@?cB#B zJk5)|&bxffm;AtQ3^pdvDGVbqCKE6@(=jXaurN!pB5SZdo3Smsur~*BBqwk>=W!|5 za5H!D0FU!5FY_kv^C{o(6TdU$*g&UnjLJAn%v8+C9L&#REXyja%|>j=4(!f;9Lh1A z%voH>6zLM+J&tj>CD$~NrG zUL42~9M5T-%OzaRP29=-JjOG;#2dWFCw$G1{F@=h2Remi6vk#Erep?YXFe8X8CGU3 zHe?I7XE*lc5RT>~&g23v=Q?iX9vJjW}%#Rq)GxBSc?lLCE0 zF+8I&E|V}dGchL%usF-HD(kQ@Td^a1us?@!ET?cb7jY#wa69+$2v74Ouk$V+^Cds< z8-q;_bPB^rjL8H{&UDPmJS@yotjHRy&t`1PF6_-g9LWis&UswQHQdZyJiy~T%gemU z`+Ukb{KW4JIVI339HTN06EhVvG6(as7|XH>YqJqsvID!bABS=bCvz4Tas}6O8~5@s zPw@h;@eUvH1>f^4f0!ER^CKfN2IDgs(=rQlvk*(N0;{tgo3af%vlj<)1jln4=W+>G za}#%RKacSYFYyNN@d;n^BmZWIX@O2*8HKT#h$)$Y*_n?;S%#Haiw)U=?b(feIfSD* zi8Hx?%ejtQxrc{%lIMAqxA~CI`Ho*0bb6pqXhvXk#$!^ZVP@uHL6%^7R%2Z@VQY3` zPY&R4j^k9$;bN}hM(*IxJj!4AD}Uqf{DZIfC;wvb8G%keF*0K@AyY6tvoSA=urw>N zCL6Fh+p#PAa4<)4B4=$4f#vI~225Jz$Xr*j^cat$|g7Z30_&+;;F@;;yP4L|WaL(UF# z3dg97!^BL*jLgCOEXJ~|!rE-amh8ap?8l)T!^xb*g4DPU1{1;Bv0xR_@^; zp5%F6fGmr8Y{>tC@JOAJ-{>i@>e14$QPmIi1Ovn^W&uq-gA}q~HtjPv!&UWm|J{-(Z zoX8oR&t+W8E!@q6Ji&9k!dra6XMD@g46-25Cltdo8sjnvQ!^8DvH**-9ILVp8?zNV zvIqNf7{_u7XLAu(as#(>ACK@fFY-F?@-biX1HUoY!a%1mjKr8sz~oHFtjxp0EX9hf z!TM~*w(P>*9K?~F!0DXFrCh_!+{FVt&a=GCo4n7be8W%t&X9`&ox(9H<1jH(F(Y#@ zKZ~&}tFSg3u_ZgOJNt1c$8a)daUoZ5J-2Z$5Azf+@EY&%5nu2#-@@urqscAV+XKr*STqa5Xn^C-?Ih&+rm&@E)J=H9zuihFB8l z6qZpKn~9i`8JL~-ENg}?GQ z{?0%6ihuGi245EF^b;d9785cB(=!|MvItAF5^J&no3kCevJVGy6en^9=W`j?atn9! zAW!fdukaQh@EPCoGlMJ-^a;iAjK;W3!qm*foGifNEXS&>!^UjIj_kqy9LBMn!r5HJ zmE6GX+{Yt4&5OLwyL`--{J?Jvwj$6e3?nfn6EHc`F)Q=1FiWu_Yp_0>u`Ro>HwSSf zCvZCFaVghuGk5U-kMk@q^Cs`}Dc|rDzcb{@K&Nnw$~a8SRLsa6%+F#h%POqRMr_Fr z?9P51$}ybGSzO2!T+eOX%fmdy3%tfVe8d-g&#(MpRiMw0jK~;_&ty!?EX>V9EXfM2 z&U$RhHtft^9LNzI&uN^?C0xx-+{yhs#xuOc8@$ISe9e#in;}*QI)!Bv#%3a>WCmtu zJ{DyeR%R_WWDB-uH}>Taj^-rJ##9fu_Jr1KZkKFr*JkGaV0l!JNNMjPxB(L z^DZCrB|q>RgRKvA3d2Z@$plQ!bj->;EX-1@$QrEAW^BtY?9D+O$qAg!d0fgh+{|4( zz~em2%e=|^e9AZc#P1BbAyhjI)ja~2nJ z1=n*M_wq1L@dB^$4j=Ia-}5Vf*cj;ZBO@{f<1-o4G7EFF5KFQGtFs=PvJE@47YA|# z$8#FzatT*+6L)eykMRsI@doel319Og|7M6yflgr=g|V54DVc%UnU6(ThLu^14cUV2 z*^PZUgrhl$Gr54vxsF@8hlhBQ=XsU4`H;`~j$asbbD&RXMqqTtV^XGJX69l+mSA~S zV_i03Yj$E!4&ZQ(<5bS!Vy@yw?%>Zn%3t^^f8+1`gRl4}|6=ehflfa$GGj3zQ!qWV zF)xd-G%K+t8?ZUsu`By%7aye8~^|#$ek5 zox(5@V=@7gGaa)s4-2ytE3yXbvl-j63wv`AM{)wEa~_v+4L5Ta5AZn8@-lDoKA-Xp zKk++5ZVz+{$Eb|M#7xDE%)$ID#iA9e)#{K$xm!T3zZw9LZXEX0zm!0N2WrfkE`?8Si`!SS5Nxm?24+{B&S z&tp8pOT58*e8SiK$iEq4XP{G9Mqz9wVoGLUcIIPImSJVqVneoIdv;@A4&i7{;!G~! za<1c6?%^Sx`m@Eou3 z79a2#-|{nq{Gb=ZGaBPE2~#r@bFu)7vmC3k4jZ!-JF*A+a~Q{R3TJZ>S8@Zlb03fJ zG%xZx@A5HU@&msySg=5+FpR{QOu*z!$E?i5!Ysv#tik$h#NCL6Fh+p#PAa4<)4B4=b zkNJ`x_>IB-ITrnUJPN}|jL8H{&UDPmJS@yotjHRy&t`1PF6_-g9LWis&UswQHQdZy zJiy~T%gemU`+Ukb{KW4J`Oh1fe>;U^RK{Uqrea3sV15>3Syo|fHeyS5V0ZT8P>$hb z&f-F@;CgQ3ULNKtUf?y};Um7_dw%5)VFP`BWJJbbd?sUBW?^m?Vo6qDb=G53wqa-X z;y{kzcuwP7F5zl!;!f`8F`nTi-rzkx;cI^6-wY8h&?zjVFg6o0B{MKP^RXz)urh10 zAzQFLyRk2aa5N`zCKqry*KsTN@DNY(Jg@RLAM!ch@e6~75A+Gm2#n5nOv*IO%v>zU z5-iVZtji{B%}(se0UXY8oXR;|%vIdT9sHR``3ryLZ~UEq@D=~$Ukn~0(CH^eW-KOT z3Z`c^=4BCp?!xR5Kjp4+&W zhk1$@c#U`Xh%fk_U-?6nK%XBOkueyb$(WW|n45)Ik`-8;_1Khc*qOaJkRv#r(>Rw) zxSE@|llys$XLyM>c#lu`njiT$L;N#<|95{2%P5S^L`=yH%+7o)$}+6XT5QM`Y|n1& z%OM=iNu0?AT+Vge$~`>9lRVF>yv>Jv&UgI6pwR+-LNfxRGai#N4Kp(r3$g^uvl{EN z30t!hdvXAWa~!8~4i|G3H*yDm=28B_U-=t<=O28f_ zgr!-DHQ9j8*^XV=hl4qa6FGzPxr}SMg}Zr>CwPumc#9ACjBojwLH=22`gcDI#qf;A zxJ<&-%*325z~U^&s;tAtY{ic3!Tub^v7Ex$T*Q^!!0p_}BRtKEyw1CP%$NMYZwwYQ z&?yWfF(wl*InyyK^RO^Wu_9}*KAW*EyRbJ0aU>^jI_GgI*Kjj;@c@tWEHCpW@AE0& z@Dsl?WUN4^aE!`0Ow3fw$Q;biVl2xltj$Jj$qww!ejLg%oXlBV$Q4}AZQRSlJjDyV z#yfn(7ktmJ{2_Lr&yS4A7>v(kOv^0H%|a~63ark0Y|1w5%w8PG5ggBHoXaI#%}w0N z{XE7qyu=&4$0vNvkNle<{#khc@BGgwjLk$$$qdZSd@RZ`tjt<$$QEqRZtTk;9L-6b z$pu`_b==B5Jj9bc&#S!6hkVX={KBAd1ARg>0;4k?lQIo6GZzc81k1A;>#_-3vlDxA z0EcrNr*aM#a}_so2Y=>K{=#4R8-M2?e8oTc7lZ$E0mZ-1qn{X=v6zr4n4Z~~mql2b zl~|Jv*qrUym3=svqd1W>IG@Y7mRq=+2YG_$c!jt4fY11rpBW^6pid}@If2tTk4w3Ro4Jbzc${Z>nKyZ#Px*$Q_?;mW z20DdfRK{Uqrea3sV15>3Syo|fHeyS5V0ZT8P>$hb&f-F@;CgQ3ULNKtUf?y};Um7_ zdw%5)i2{9oWJJbbd?sUBW?^m?Vo6qDb=G53wqa-X;y{kzcuwP7F5zl!;!f`8F`nTi z-rzkx;cI^6-wcsB&?zjVFg6o0B{MKP^RXz)urh10AzQFLyRk2aa5N`zCKqry*KsTN z@DNY(Jg@RLAM!ch@e6|{3G@lg2#n5nOv*IO%v>zU5-iVZtji{B%}(se0UXY8oXR;| z%vIdT9sHR``3ryLZ~UEq@D=~$Uksi!(CH^eW-KOT3Z`c^=4BC zcl^SjsRMmNGXkSC9+NT+Gcy+pvINVs8tbwNTeA~;asY>O9H(*)7jqRiatD9rQU1bT z`5S-dAAH3>`4@wy33U32kr|5#nS$w=jd@vwrCEtJ*?`U2j$PS@gE@*5IfL`LjBB}t zyLpf&c#c^W@1hjU~!gXRn}o+wqi&2V1EwdSWe+= zF5*gV;CAlg5uWBnUgupt=1YFyHwH@==oE&L7?TN@oavaAd03dGSdleYpUv2oUD%t0 zIFb`Mo%6VqYq*)ac!0-wmX~>x_y3>v?gY%H@(&&<-tWsX&AHE1Pd)Yg=Y5{zbB^=7 zzw_Srocq4#o_p>cJcn2D7T&|Oe(rX91an{>ER4mmG*&`?tc}6g0^4B-cE@P!k3%pH z$KXVqhVeKb7vlyh54}vmcVjY6$7yzHo?}| z0mHBt#^694hOgpyoQyN@U3?!u#MSr-ZpY8@EBpq(!yoYq{*1q2n$qre%81$VaV&(z zuoPCr8W@BPu{l16ov|B6VLu#Tj?BEEv7aRN@knK%y< za2c+}O}GR1-~l{_r|~>q!`o<;bGJ`A%!H3(UVH+d#xhtLpT#=Z2wURw7>YfxH@<)` z;RqayZ{piH8yDabT!|m!R@{YO;$b|2Kj0<&34g`Z<=yS%i&-%@7Qm;lB$mf&SQG1G zQ*47BF&rbXFAl<&aTLCeZ{a&Q7eBy{a1Cz6Pw@-<8js>BJcn2D7T&|O72NIg2F2)tO9=G65+=qwoIG(|acmwZX zs*3LR@xd&Z3-e^)Dh6UbY=W(^1BPKQjKP7J#&Xvu17=0Jox}CHseG*CQZDbf zl+!$yvb$YY!%d<);fx%dHoglljkeu`h<*LW09;W@mD zx9}dO^>RO7^L_FhEa$<(SR6~E`5w7H%e65WTVOj3!R{E1PWwr2Pjc-C`8e05T=sS; zmkC_T>6A-3{9Gn?f0^xNddk9uxflp%@tc=fM9c+Xx@p%lz9@raSz?X0Yj>R|eZJdn@a0#x&k8vyR z!Y}bKp1>dQ68?n0Vrp-9JNaT(%#8)`DJ+TQu^QGy)4wGi_mbP6ru1{}{gKkox!WP7 zpL4fEN*Ix7YE_XI0|3Kx9}aDiyz=exCS@kr}zbajYshm zp2Mqn3-4iC>A>~A&POl@=E1^P97|&*^vBv5j4iMohG2J$#{M`2<8Ta4#Az6h^Kmh* z!1cHVcj7)ggvap=Uc?)C2UDeWw~r5I!CaUhi(m;XhgC5U>tPdYjU6xydtnR?#9{a< zj>pM31K-8>@k3mVpWt@<9KXVE@H_kwui(%48>UI;Zl{cx9UsR+SPV;HMXZ5A*btlJ zbJ!WXVHEbm!8jaW!#8j$&cgR_5iZAdxEVjgy?7A6#qaR~UdLb1E4{mY(qm@KiTUtJ zd}6Yrw8 zkGq{RU^aXV3u009!wOg(YheRyhHbGEcEw1H#TW4v9E}rj3eLoNn1IW0EpEacxCam5 zF+7du@fzMn>6Tpm^`AZ8PJI0$kbHHq5w<{ceW4S};n)lN;0rhehvR58*PkY{JRN7_ zd|Zqxa6N9powyGV;c+~J7x4z(!Bo7T_Q5P@+BM}mjr;ieqt|I<7;v9QU=GZKg|Rrw z$8WCqO6ZTZF&NEp*pB58?2ggcAI$MP7Qh|@40&3^x{zMlSHuIHNll=AxgbFa^o z>kIC7`?p?S_^0|$^E&#w`n$&TtF5p-cEO%#&Km}>JQPRbIGlv$d|?jD3vnr~!VS0$ zcjJCMf+z7TUdEev7ri+@$bi|<{Qhx4mW!evR>10*^1H|G*I(k_J^s6o$G>_$`x3{& z2po%V;@dbI7vK_Hi67%u+=XA_VLX99;3fPCf5p@sSH74Pb7KK~3QMAC@04*gWgOM( ze*cxvBme05XpZy0Yn=P5{fc>?lK6e{1YX}$a3;>f1YCw|aTD&qJ$L|*;b}aN*YGx4 z^b_WH|1+`tXrlhZsa^AvrwEq7a#$4uu^u+T*4P2VuouSQKpcjD^!WIv-hZ0oFr~ju z>2Lo_{q3K<|HB;bPW?kZUawD}xgJ!C8M#hGOim@?nyPLV#@By)wUsyieQiigNL07*haM0a(k15pBO-c4 zg_}pq#w@=s(UFniQL?eX=8gP9Vq;@^g!YTo1l?ky`}LNmn(U(EUshXmd70O~RL{$` z5BFwD92X$}Z{o^$hzqvGmGuzU))uE@nbUT4yfWL>x;n*aBbYcn=AGj7zC9CH(L>xQ zTby1~b;_sjr%k@f9^&F{aaBCTCD`J0Ya(+TyBvh}&z6tKlK;s4dRl zL)=+g+_N6yZrI`iJjCgFlxgQc4{;f7aWy@}>H9j9ua<{6y-(7_1$l_m`)W;GZ4YsJ z{ldi6@eo(f7N>o+)BbH~i_>#Ir?}3xxcVOAB5ZLDJjCh!o#uHo^bi+kiwpJ;H^COC z?**Km#|&GXUK?|YTVRXRb77~r<+iw{9^y9I;+lDg)B93QyEOL@cgPmk!b99?TU<+9 zTppR1RhFKoYq_Eewj#H2x=JDWS68KWFa9phJglg!PoIo99V5(RG^K7=`(9Jbx)Smq zJ~9QcVr#IEHB9DpoY8X>-57RdDg zQ+}6^xC@PatkRht9)GpIAu_ohLtN_2mNl7q&FPdcZwINZ>};){8GnA0r(%=nvBzU`8)m`Nr&Yxag#*i%xvQNg>{krA$8S! zH9h33meaEG%6e0r@{JAmu?k9%<_nU^seWxFUtw8qic`J>$yZE*G@luNliD8xCEsC_ zOmxckmE_a!T4=s{GC9?+c`nN;ndL!3r+i1{2ATnKENDJ6{w7twq0(XNHEC1KY~uaV za-fgZoBEmYH>rFxi&<6+ee*?e%C~ipkF{gJyMB!&*6I0PJ!x5yCYk7zZ){^nejKN z_G>C{9NSYj#VKD2`GZJ0UTVJ9GC9>RLGsnrl@zCZGbG;$iPL;-Wpc`QJ-?Urn+{|Y zr+kAaN&VzvgXU`|lT*H{#k?%NhG~kKP27GLX8BreWu@lR_HoLW_GvFmzq4kFnN6H8 zXtu8vK)#M1@)eRVHqA51M5lalb9}AUvR>=gSth6YZI^tVOcIGRvx)0h{oM!0OQ?r@ zMdSmdS5rv<#VOxu`9oPJBu?uWCX-YB5=u$^Ofu0a-`4rQR(Dyi`MS#FlrMt}G8L0i zzY=niqu*81e45uOU!Z)!Ouu7hikVH^e(T?t<4;yy)3Zkk0JVtYzt>$HANT+k|V%80kMV&9r|6i}^W!1U;AW+xo zq-}4Ht0FhX2Jslh#EqAEIsMjM=_*4cPS2Z7(Ks!t?eMjhOWa1;tlqaVSSEcQS!B{K eTk_p6u|Ymo6CHpkCZC)xKNOd7rEik`-~Rwg&|_o( literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su new file mode 100644 index 0000000..e69de29 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo new file mode 100644 index 0000000..e69de29 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d new file mode 100644 index 0000000..4198afc --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..1fb44205ca8240dac88367ec66dd757087b6136c GIT binary patch literal 707300 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

    jJXPOU!Kx4x9a(#-aA<+~kc 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 Ns_pM{T-Nt<83 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%0DVep z!q6y9E~eRiKTX*?G%aE$Krky6fTZt1?eHyr%i#*Y;rP+pzBcHRzM}*s)XyZ zyP6%-fG9l!c4Cbj&1pfK9kys0f0gEv0sjz?rxvWM}cIp-#S?IOKFPt{g z)ZZPW@LYNb=VTe=PMp4-amlv5XO1K|B_g8%EzYVrM;>W~g6fWTxX>5`ZhHFR_J?2!O3f~YpB6M^d=o+c+xw1=)oIuAd;rsXhVXb$dRk{}Q6lFE%iZ;il$SWqcq!@)#A zYdt;PyMJn)wfC86T#hk-;jU+|S)ewcyde!XM``nTMm%+iDcZT+&NtV68ou4WLRQUO z7MYZOy&l8*wT9MtG=U3Aob!j4hlXBqD<=4EzONa;_Mfj)vI`0<3I$M#3(&NIy5U>+TwB`bd^1F zc2O35A6Z}s?xn?hz?I5u-9jXmtMDMvET}GgKjc!}O5$^0tV{U^^56^pasB0pJHPuPDU3m_V`Bx z&3-_9&7Ir6`5wvubh&~WTcT|*OUvRN3LhY#H*Q!)d#wfU>eg}rw7#FBFbEc;@FmIe z_4A}*QeH0x)Q36E%Lb)OgHE!YfO?ci9yZhd8GVaBZGmZ(uq!ZIGuk%GR7V!7g=G8yz|#q^V=clE!`ME1*Ck zIK(JD!j3D2gZa3HYZ{%p!9U69FUfEciZsVbM7Tz*g6K zn07mkY9!N1_O;B4MxlGrKh9YmImm3)2U`*g7cxUvhx?AZx=Z*l_UQ_h>+luS9T+tB2ZLimWK-`p=!ri{iZ`)T8;z*MnAg zs?r5H&f`G~bW#YFFClFv^3rHGFmpTz3`FH85pptMlqsl#0TY+*!Xp_}!H`MPyql+Sr8prst#A-AGYA8qALu_sCjnmXjTj$R~q`DFXw0nX~HX zO&ezgB1=phTbfEoI#pFxhM|>{(+hk5PSQ5~>>_UAByl!BwX!=xm2d-0!5Ne343XCp zs9&@g8AY%9LwtIpk!???MQ?@*9v#%7g8M9u;Qf4Q10UZKs?;*gDOJI=Q| zZC=F|Vh*)hNOP_EInW}xg8Mo4kz{chVP z-TK8{Vb2iWvseJ=SHTJODNS%ja;aZT4$ElP>4!J6LzaDvW<`5zNuJw26>A{X6u#Fi zDM^*l;@CU;0gIN~dkt}X26+s6jQJYKj^y?H1UW?DiCZ|}dfEvn>cOfdOharzhQ^w8 z8tHttd4)36Fskt%!&_#XNjtMdUY{&u6q-})n=%C&zgDLOx6aK8*jjDP4{l!yt)7OFSqX?+yCX` z+c!@U3B317{x`i%HL~}QPc?%7@}{To=lu&b+PDvQhiZu)Wb3x47^C&j?zr^4naGD| z6dZd>axw2)iZ^ocWuu9J#7%@JXPC7=Y_rFcfQrH^a$vZ9#{FjARQ%_hRDs-Bqobka zu6i|N3mloO0p6oCv+xd%XmFSzH^@erU$<7vXp3`izYqq9)QiwtTVW$9jG}18cpgP7 za&bpSEH1+VP)S1_;S3nf<;wVoNT|Cs$Dr($y^~2JU5XX6B+ZmZXgT3?$w+L+mmIvM zSW*@#VI&$V&k***#-2AhIut*k@6FGgoA;F8CS3HquS`&J?G73HnvnBgASn< z330I3Qz#iolZ9eErHWo27dkV)=iZO6kcuAvLe2+IOF{GO#v|IcV-T4_br*6dRDIBo zX4MAv0JXsb`E+HgP$Uf(4M%UVD+saGhw(wH&<9&P>4*_l*!TVuVQ1tuz73sV@;E`T z&?A8nraIeo*P}5J65CHvqEJPR!9QY|lfjfLo%*!j5_-+(wnh%(w!t7Pr@UXck?^c0 zqb*`$$bPAI0SZ~H5tkqxP>W5buNY9)9GcK`Y20h0nRLEfeFGg7jEok|m6z3Hr|U6Vr{-&& z2X97?Zj$_2;X!LXBGk13jw96ViS(V%wOPSBz=s;M*?o1^easTmtI z;~bFmmwswMq;WKwUB#(MJm-Jq&@h%RfxiOl_}H(UnMZDV?8rdxv7UopgbVK#6y-+H zT+0Q#fqit1q)2O*p9m=3swiJ;DqYE&*sj6V;{@q|F0}F_V`&@s`8Z!wq>^pW@w&`n zbV50IL9RFeXnZ)}wCKdL+~42Bu;|KL#A!naJ1+mOi|-$PW0Xfq{T= zCHk~zlv)XsAoN#o#Y6rOIBA02@&B?4BTPuCxL(2+tsYI209Z$7$ud?qX=KRlG@&8< z<)5BCe|GeI*dHDo9}R~6!)JHDAMPK|Ah2_#7;-^iz`xBHfmXLZumse;3%c3-f>R~j ztYx^ITuHQHj*v-D?JM}~F|_orQ5p<{!(aWX>4EW~b z`{Ce+w-1s;CeU_0s${XOyqT)`v2`6qVbdU2F;lIMw0TU33N`YWaDtkjt1&zW1jI;s zYt~I@dnkoTmbMJYmVN|CYLj)71tQroNHfa}F4iz*>UTb=iXgNA<-F8~ur z1hew=t|yi`5|km*5IEzh9;Qc39T_M4dBvB(S0-lfI3zxo98GqpASldMzoR0tY(8*ydf3Tz22`gi@hQm{6SU;eP-ZINtL=;qMAM4>bX-`Oz}sH1n0h zk^?{$ovr%a%0nP#Zsa9a8>Xx}$LxoXzaqzME&VjXui0BH2+tAgtsCOvcK)_<>oz`? zRcDS7;8gHPG%h#;B$S|=Fi#x*i;F-0u}2xChx4bqmGdpsFi-!LE0{QtGW7(;{j(kv z+{V**#TNZj^2;=>r|A zxY`}P5+psfU-Bk$w@x0#)TNCJBZ;ygFOaW}saael$|PSmBLL&Ysj;_%LUHcF2_6$4 zS3E-*ewa|+6&aF72|8BF3u^DA2`gxJ(W%*qqX6$cx!Sz$l^1#s=@eNDxBxa8fT~N6 zQZAd9cE$|y;X+`u_PB-lMCQ7FhBVHsc7ZT@E zy7A_y^>9>zCN#=QimL=k%T0@ms_-N(wKO??YR*j8$hJc}E4~!DHq2{SUY?lhSf-es zGW8NX6vHxsAI&qO{$ps2D0){tS}>^Tirhn-5lc}%x0fiNgw-fU9TaFo>mtRAeJ@hn z(K)|_ZPOSv2`wA^kA!`N zOKNezx(A41i9 zF0H56m$ayuKaB60g8?_0&)B2dg;;=xV6|vRZI)fyG{(%B|Au9}^clkf_#k9MD!gMM znq9TK&H2R(u%PB%j>>Q}!s8>rBcQ}hd7({%v&IxkvHnr-n_s@cGLV$UZ=)Uc4m#QOM0C7nlf z`)5gzm3q9nZ;c)gn1+wh_K5IAV+u*5*`3%NK*R!V1FhArLR{S=02f{d0%aDcY$q>` zFIoXasfM2Rm|N8pl45(BB1_e!+1TVFweT9nmRYs>Y6XTUgdR zCoc$;zO3{JTGy&qFP09$vdj)pq>uVkU$3f1V~sA0E|FI2hg>R)j%c^iAB1;;ousKO z*f~(LrxdsHfHKvuoTd)@gNBFUG4X(m|3^D0VY|}+v~a@3X8|RV=1_StS%TnQBds#^ zAn6JwRP3o|@IdX@aQNW%NVsEg4$C$lVj^!py#4e`CDY~RCn!ST)gigI=}J!_9sqAr zDQTg@(83X~LrzJ*L#%2v{SL|bGzQK|R=`h5+Wy@fpuhpUutMpJiqy}M-Msni-}xQo zV`TtvUXwM+uN;siZC9!J9oiWXxS0j|0>%|EbMBrVcYK2_ojET4b_p5@`p*szo*xVk_m2l~Cx3Q`(m2O6j7ii3NSO&07)k3#$w_gUQGvY%@Sa0t zb@t5Av0sD51#eA;4h9GC>~vCtL~Hr@03rQR)`~~IB`~JvC^H}H>NuMRnJ)d!QCf*4 zRjH78ma0-+ahs%*p2YwAHD;J705;}bJ9sB8Mk@%G&F-={tEXUNQoaJRDp?pUTlF$7H3N>ARR)s;Bi>lY zjsXr#rT53=62?;x96@vxjLDnI*FY{i-X6EZ5eqEhX#A2YT2=S6!24cS0#M3rau{jv ztW!^m&304zVp*RvBetD`bUVLM(jiQqfICxIkU<-eKN~N=^G~m>6;>G$5N^Wi%h~O_ zpT@tw%jN0#BzPMFaOsxe=JWhKkYKW5jIvptnQKMyJB&nd$ao2jdmQv4tQH0w@6^13 zjLmCe8#+U@XsO}E1aj!Dah}4ER}*1Qxv=s{w#f?JFg7lMl;F3{qM`bQ_j_h8s1{+g zD_B%N{(Nqu$MFT3qw5J=*J0-O3ISYGG$SB?^7a!W@~_{#L4OJ|-S1&5xbxDSz}?#= zGji^{ckvk}AEaUb@$S>7kM~>Uvf~7z99sAxNQ!`lfJ(lTIlbrYL9!ee%aEo1$P6DX z{rwzMIJuZfsiXiyT<9=mWc_gQ@dFFyrcHEJ2wpuCHctbzk&>%3#fNult(lf& z^UM7mDk{Bu<1gj5>A~a5rC_1O^B4* zsv!2|^j-*@RhI@sGlF1N8V!&+OHxMBAmtbJIjCqNt(X56a0+1L+G6oYXS0qVB{pib z&O&gdMFMET7kwH!rJiP&uP&9Z%1dVfyY(flVq6#JAE*HRMb?ei}NU5~M&$cegA7hJtR){4u#_HL#-B z5LW6+Bp4Yr;LFHdWN@>;NHn-^)?zz<3d0#9iLlL{0aiOkp@~Q!{&fH!hQ5PHBKqQA zL5f5T#{U8qir;!+SG?44u&BkEzEp(y1R=XeiGYf;g&w^!(IYykWjd6@v*6Rcx4Qco z$yL5Rx&3rEg8x4dwl=xC{+)`BuIK_z)`xR8JYzT02$CGZ8Epad9z#-l@*M{dXo1}e zrLM7H*|LK*n9x{vdU;U=4dphi9nYi`-OyPVo0T2`hKuPwp&ufNakqJD_<5sLhzMc` z6(Z@817cP^9+olRjb=@Oz;_lR-T-BVIz+tGY}{s{0Xf7r>UifiG}#(O8paX~d0rVE zgG{cLt-v6ZX9S-#G&W|h$=AqN9yJWE&O@KLJRLz-aDfCUz_qSJL>noT8XKDai%X!7 z^Cj8c(xJVVDO|fVpS_4JxHw&hl_EPDwp_`&k|EP?HLK3xRQxAWBkEF8E@YAoI#><) zmqxIFhdP_XXOfDj#$7)fyur7v_}e%H~LxJ%?-n8#Kc<_6$wR4VnH1IIiDYpVi7gxS2}A*8nWq=0ZnC89BX+&28p}jtwlaiP z5BKc0k4eE;bQN0CO6%9qlE!PzZgeh=LpWP7f>s7Q z-se1K-KXK2LgAQO74~U$>K1X9IPfQ{X>z>7Zvg|AkpJZpHYJcaY9!zs&qnj}ilferzHIP@M;`9|O-1G5&vvLZYMLGT(ryh8-b9KJX%e*@bqTgv`}bFdON#}S}1$J<=*BiDD$~fA6{Lh<~H0# zJS`6w%9W8ClSnvI7C2q#g1c^c7oL4K4K+B`!@{{DuP~_OK|q5+&xBk-VhgAiEIdZd z4-)q@JVrS=SZv4eXkWQo0Nt;>^f53MJ6qusI9yO6k$(Pvti5S-8&{Sss-J@Aid#W- zSvCQV>Z*1Jh=GK~0R})(x?d2qMB9pzL|=+@sb2T(-~QHGd+#%3CMdgKJHjIJ?30-% z&#>o#I4f%)lIlTTB-`OevZ0fX=;G$h&9BVa$aLE_CFTG*7{u&4UeOFCm~OV!g{}A^ zI7JzRZN}vXyn@Too+zVB?`qK2fK>+Gsggj$x>-7eyO`){CZW`NcRM({MMZ+!GNrpE zp{$^q6YMRV(-gU^pqrg-sT2DXR0oqI2w%au!M^dx&ninz$>nWMQ=pqYB8!3>*DQ2n z14_$g9<;3WG(%Mcx(T#tZPx@FT2nFWM9EealjjS+HK~*y)0Q~1G&b~Iyqs`z4la9t z18;8EZn<$F+V?S959h&0EU%Cs!wbIn4v1v=4$@$_)&76MO^B$rIs*Fg&DJOfXW0FyO|}lq&g)>60Bg6ZpX$KnrZiGxJcJN)qxwvQv|jI zqOZ_HN&M9-MG(~8%1swqGP)UX{wygOCa})f&;V&?WYS|yec~ZoBpzlG;-iMwmYU?Y z<;V&z0oGHHDpe4J!knUT{as|fq6(ro!d0B6@Ou%d$wA9(iirN=x8_rX0;>vzAyg9e zxvOFNR-rIiddO^zUU=Fl8=;y`(I!N132>o#2C&Eb$_BlAIr>PJ7|Fm;<^+?4BuQ6C zmli__o0PVLv-pcscUR0T|DJU)E8}8)*i(PI^eE1(3`)+m-BAX+#*i4!r=e}4%oSne zf}iiDQDC<|QL$bWeB6F;4ljFF^lVqSy*Rg5Uj@r>usu}d=mV&#CxRMJpf`1;R&Jv* z72%H=A)Z`T0#*&tlEpzA(@x52J@_M0otEUXQEQ?zJ*1Q*ffxRDStNGrD^%^LFHf@` zB+O~vuEz)m!|R@YE+)XLg&$&5t#36c)D+m(u!P8T1T2e@YkSKy2K5Jwsod@P(l?No zl2CPt5|<}YE9y>UR20t3%{)r2SS75fL^DZd8~p`PNZz(hS#)5hETW362aw~uCWbAt zOWU#dWJdJ;mJV6^+hXb}kk+&$asCkUoRP6-1RrCnklV?mibv6Duecnfb#{aEDbC|d zPIEDm*h^KHJR++*6E(BrN=rpE;tV#BBZLxeuZQrP8jfFA2q&*lXa`s`0ormrAI1Y7 z5F(@$-H&2(#mE{UjVWz{qv>#As&hRnw_h&H1i*jkN%57FJSvZhi^wEHa0g)SM>VJE zV#*huEQH)HM<-2dSIk(mmj)=&6%LG@d4a)jR3IT$k^^cnMIv&F(IP+4ME{qlsV~iKUd#nD8>Z`)hCxUGG5Fb^JGi<{AD>|JpM=%BUZ_=-GFjj|$a1 zed*h-yf5d2FSz;+vJU4AqHts1EEUoU!=5${NSC&!?Hot>5qV`HJ3$E83bU3qV*cUK z4xSE(p^iBEbn_b`j?Am+5R=xe*5mRwplLsv3QWU^%vYoifp9@xdXEl5hJnV1kl_9G+1B8dLckhx_;U!w!9 zU>cL->dZ&n5jRvVn;irVE3JnTxK_V`pj8{F5AzkUt z_4*%ge!0H0A{ze9yst;k+$S$%Kv(00PH4-v(P)S?Xy*ht0jL#v)XTXCx!Ji#a!2?!)Vr8&1qvx zY!=tD0BTSj@dF2S@ODHj@I1!O#_q{=rTsK;jrV`^O3QF zL>Mf_6eM*ek0$UjRU?qVatsEsvJ{uNuLZ;%+|%X)*wW}ULFgScR7_i@o_|OKzm?k!2GGO1VFFRAStK&>a~u`3gdGpEKR z)O^GF`f_nWzs9ue5Ub=Uj>I9OQt+(X^+nP*fGZe}W!&s-(ZfWd4pLMgrTg%me*b|pmRFLW4CW_M=E4V%!Xhm+yCs#;qc?G%z1^M}CvK2ps zVe$n-ua)E5F+m#=n4}Ha2VUS>!D5GX+M$@^sRMJX#w3=K&VQI%RWnnOICI=?HEWLf z0FXBLOA8wy%Md&Oh~y>3?%hvxI`4m#VmpOQmJ z*4}iKaxZ~46-w`3cw8BKlKUZF3l4)wRc>V4le3!-OuRFE|L*6HA5bSNF*Z)UBKM0^ zIQsJsG@@yla5ysR?OOUley}q);I^ruKcAoNi~xX-E;r z+Ee1KO_7G|t__Z3YK#QV4;84+R`^x5MKD8{;@B{{$_Ie9y9ulWJ*}o&^0w19WHqP7 z>2|?Zd3`4|6$X2FRFYjSv-C%kUX`g7g0I7rs)<0a%;O~1rgzq-0)&Key=dZtylvbwpqtO}ReMS1& zM2g7wApI;6)OhqlDg4W)wXGhr7g!H}!DzG} zq}{?{m3+{iS!7I}Hv!Cff?}32ez?$(b~(&tRq(wOOq=w{4qF1+S(189X}ZpC-`;S& zNj0eLF3x+cslpn0I8oiM&4SqGzazx??p{7S^PzH9;!w|#WVb_^||y|dLNzqdhI66 zk!LcuYz|w`w!hgsUD&^7x>{OJZPshZyA^R3cGO8Nrhw_oOn*+h3<^SBDc|Ud(N*)+ zLY)5!g*6PfV)Cx?f|Iuqk7P+HAXw{&lss_Se^nz0iOr_8>9>U_WJJPuZwF5ls7VT*e~_;gv2_EwYVs-iGI7gOgXI$xCo0 z?&py78z~!M?x6X>ZW$lV89*Wnv;^F(Fr0cV=fCu}s9HhS9B%S2y&arrm{mdiaeI!- z{FfdC8#l{jezE0cF7^)7tZh`F@M4aeAY%8y+R70P+{~+{oR^)k^o`UImUPdH+Dqo5 zqc+e5|8WMn%z>XlnxAjJ`Bp(5cb~pR`rVzubocXTNv+oU?egx;x1a8jR`MqTez|_X zegN|S<_$hAWLu3fOIVe-fxwLsg>Ds^Tuf6*Zzuw*aj94w&hPV{&vi0aqk0z9+ z@=$po!DP@e(KsqI5f^4N2|GZtP^guA7{?j0VGIX{rWZwwzbx>f`{3sD{nP(s_*nFp zUJ{TULfnSsA&=X&%aLqY38ZC9)M|oA=8`?^^K8RBiCQH}nKGUo<0JP_cmo(3Y!xEx z?%v(stmoH1TVPM4ZGHG-I_NGYKnr3t&dUB#z?Qvsg~EpUP#L#JRs9NV7;$x!ZUCzi zt}Mj6lC&ba*afe2Db%5-52r+YWhrGf>+5xLAZD`|ynIoe1{X3+SaT)gB#x$P)w}d4 zgu)Q19Gxe$(gN%KVNXTLIavK3v8cK|SCtN+zM~n@&JBr@_(d{JV*k?>qGqw@ ze$Xc|n<`P0J{>s7ljlkG3r%pd{Rva09j@<<<^i9eNtu$N*yszDaQBSJ<~OIlJ~jZd#xXlT*gIv^nAqDDJ`7 zRcQ)w7&B(!=ArJ-pB-MFyhzj^VYHfNZcv8QQi;e#xEQiwjN(tuY&a#aVVaKF`S(!% zqZrKb;^J~Hjbh!DY4;p*M;~1KOB9SP@*QX1NA!97mGUCMrZs=I(?4C{Q^@jf_S)}& z>RgMDFj4FRPVDKGNw6jJj3JpNw`W_BZ4g*;`xAzz!eje_dF+HPa7}Mdq@VF-(~(8s zRBUVdkV*EHI<7Lm7tNYOZVtHeGZA#<5++84@ASOq{L=l-h}g1&(2RUP!c&=hjqiYm ztr#WzwUe|Z0nnHdEcn$JN|jjgg3Z?U5KzM{an-KvSVvV7z7nPkSC_N18O*jxesT_4 zt=e(I!ZZLb5^yQiS3Jx+^3!4i!YtKb=(IRSAP3Ep)vpIjB*?%eSGLft@tD@8{gZGjg@ayoC3x(-R({*sy?kRgO^;}vLOqh22<;$W zQEc+`_RZhvd_KN$&dJ@AY~vNaO13$(dNesO`H9m;Ey4EwuzW#nHF`Ni(Ni7NrihiG zx+!gxqYHYwRvYC28wJ^JRtzIuS>d@hY3TyzwJCh$GEqy@2)Za+26L8E<6b%-ZS16B zlTXtArkDKy3A4EQl|B?F!*%kI@sm=X41VE{T;@?PCuu_$y)rW(3aliCKOZBkL*%h; za{PKe2FGWjc=o^G$d{i9(o>13lG0Y+AKBO|Ncw2V>WG9r#Z;x^UidcC{LS@yd}Jo^a+shil@b3Z^yHW9LqCah0e3DOk&x)1_v@$*><{I5V^eqZ!ee-> zhv9*30)FXw-31mKGd%)&qH%bWl60GrD@NSvz(9KfCvW76zc^}qmTXT9HU z-y;v>`oCb!@Rz7Z?D{7$SRBUunQSN%T37aFO=mOjOu(w@==Nm z52j(5EWpvIA~aQ0Tl`1XK>Oi29_H+T+Hc25|Ag{vZWi3s1xut-3}5KRY7G!7%MIfv z*d3iqh_;fjK9cw+nQCO_!m7!R16E#rw-kF2vW$X>Rg zr!g#r-R!x^&t;3gGsQXuu_)u8LL(n1flL)nmM2xb94~Sbj5bJ*FKpxHQ1$@+rhK#j@~eh zk{aRo0Znv4Rt)hU|FHH_nEOaPO1_Q=2F}MQfwu6hoF!jZK|2@wX!-Kgt7Il6O>?cS zPkpNCnXd z#Zyr=zJ7c26VevHh3Qp(@P;|T+eY`b6c&IC^#`=EU6O0 zk-L=HM12}ooqDA-Z@ABYMD1((_`X>VC?oFyCE=*}QM+sX5& ziaRS#YIle5{dwI^P6Ur2wCeHPNlLMGan=kvs6gtB2pTBNfTTR@q*g83JQZb&U=CdI zGoV12=h6c2x;<(=+^zs7*(&FVIzs9wegi~JdU(aLRxFYf7SLN5oN6Aaz+DxEKuX=G zTyo4E!h}I^M!}JU0|ne%GDCqAN8U#c#)SuIY5MDeYqm@@V9t~iWWwB}LJg>H(IH75 zddZL7kzNy;Z*et~+jTe{E`?MXvWqQ49bg3uA1vTh#HJ!aBMi^YgqQB{Qg_iHNOx06 zO)hN&`;=GpC0oYb0^`UQ{ucwNzdRJyPIH>`sVzuk+JT{pM}r}4-G@e|18fE&hSGov zC8fLcb(gF(+FJWe?=*a-cMQvA?HOFqNE);(xpiU9X+wJI+VKTAzGK^XJJNwdPkID- zdVGZ3uvU=8{utA*7Fm5#uXE%xTdsna@903NG07BE@IEw5lgQ}T9J8|=SV@#yfOeHj zP$Yz8591JyLNE(-SL`8vcMC37jvj}s1J7;YzwNC!N-LN_kU`K^&^I=ZP_%15A&7?~ zg6jQ}bPNPdxS)7>3ucSsCX_~A+C_h_a2L544bG$)H3t!1YIL!Qq0Pgtl@^q{tWk_Q zpc-cqgZKlkcaB%+-I4H->rbnMXYnc>kOAM`@g@i6Q{D`^W}QuKzMAl&*(RfI-nGG* z>mKAL37fPlbw&75ikgjHkR90KKiZS_11Hv45ZFb;F7&rg{TEHPex0<`8+T?jgs3fl672Z0ic;89j) z)9|fV0;0mOali-^V+jLjs4Nez1o;Vr{mzhG>hj}zs6kB~!P1vZ=ZX_zaEF#=P)5s# zqjDl&h0N*YBg+=;;n;OTZtn&2 z$Q)Qm{$;z2e3L5;re_xCgayFQYLqR-bF5C}h>HQYI%?da=@CoqCBnkyX)a4OFkF|S z)%zO8G@fI4iGvKj)46XL+~J4U7k=E-q5ouqyo<#2b7&u6IjQRO%r4@1Moxl+07^Qa zG8SkXSkg^uQO$4%K`PXikd#gE8_V-j`>Jr@ZnkOxI^UsI@?^CH=kS{4o}jtM8UiuRj!$}J^Kda+A@Xy^ z$_gM$N_)9;_jZjJolZbwKu>m%XGoVW$Z#*t5xE)r$&?``$^=ZK)~9CL-DwW1P&xR+ zu!f=J1${sbxI?8MmNr`MI38vYO<2)aMji;>&?)?<{(j00zg8%jW_vunofbR-#Czfsw z-z*q7mDFP2^J;?qJ(rdg26(EiA+FLNXzLnzRYl9B=V^djIlt%b>sA zzI)3n-SqU?cfZ*w6mvPgQ6_D(!EbMvF-oEpOekK-s%XA+=OI}Uxk6;x%%{vMk@|1u z3q2r0)$G(neZPwVkV_~|%J>LEhkOUNw%*=8Ab0rF4Kte-a&*HLJ)3(&`4OyU4v!3A%t`MbdB;Dy2bd~Rp1KGw0Tn!U8; z#K_PW_|(_1grG(40+h)GP$c!zWIDgYm*c z<&iB$Z&7&!r$cBqwRlt>9ZyN-jX%^;t<<0)LQ?u$l`?8;&}^cJ^xK&XYnUGGN)rrS9MAFO9HycbQY|9d2WB}n%B8{z zcs5!nVaKiNHAF5tY&llnc-s5-UVgd*P?Z_1Z}|=;O;GCl>Q$`=Th>@gi34!U!Sa3+zkbb(}wG|Ks2zU&ryo}75oEGR<_sO ztPQ65lAqI{Z+0WU5VXMOm@!A}!GhFyUXGd~sU&3G=^VPi8HHk$@Nq(Zk@*PRS^d57 z1(7nvJNf35w=-8V8Q1Cxgd7{el!NdSGT%o zP_($@lmw=B0f18;b`9{(uxkugIh_ge%_+7Al9F8L@E7cK%PN&>M{_K&mE~ z*}?t-I~}8ZrTDA5tt$A1GN)z1ukF0Y!RRTaF}Va|DwPgTs*Wr=nQ1I79<;!Cf+<9Z zs=E~;Ht*1HOpw(JGrRi*cf;Krl7D%Qlw|bd7SUY8O;qK!50o zb!B9y_TYS682F@5K#TV46{do`AKf zx$IlYhhpDNf~VEPK13K0Y8PK#z|RwA0O|O;L6}vlVW|LI^orjapj}gogLCarzY^RS z>moMFPe70>>|(4!Y3K0{;vkBQmCeJ*^Im~9=YaufeWzqHnd5O7mb)~Utr{LrQROvS zQk@piH@o)X(ec^nvUFVCZp4fZrvF=MaW;fKZ%b+d<%_{NH9EOGk|-=*XxkGuZ|I}( z7~%tdOetFn3fKVZ27XqReGjcJ`q~a6o}*=+fBSW65O1uOeg_c-QLf1BY}~Y@Z5EI4 z%Hu75s{T7Ybsm+&fuWQ|5*U`25hJaq-fA=ee)^UW+>!z!O=?KW#4ynG65^hvMm=dm#LyNt$xlY!r#&V>}}GQ1#olxUw(v1Z5B1Ebi5P z+fsFpQb(9z>K-#2&YJi;d@(`3m3rzncGE+Q8kz*Uc=$NK{RgTJ-TvcarC4u+O)Cf@ z%8K`m7fLz{Q1KEpSuzu}SvrO$3xEs?hNFG|IKs|60vrJO^avVho{$=*SBpZ7&agRe zKmPRY=Midp>eI$W+uiN2PY@bYm46fq4iUn0uuHO6ZnLVWxyp)>zuCh7UxSCE-UB~j zWmMAWf~b%VQqKuGm?IR*M$TfPY^CDAUP#R=i9r|z0_T#->&%o&<;)HUq{-lx&57Mz z5deB+dEWVcF$p`tBe#`G;1HTn+=J&1pe{}ljcYhE0qO35J1;#Lc}71i#0@Ee3aUlV z_2I_HrnIAjl3@C@)#q0~-P|qT{l7Pc;7!=eLf}ESWe?3D`)<3_S9CM0WY-h|?*3|i zDvM@~q8QlH3w|q&3(_f&s#z#cD4G!{20b&34W>;dA>*g?CXbxHvR{&3P_#nuJVPod?#a=@S>6#mE+j%eYjaYO~usFM{5sR}6(;%qkV>FS|d^ZD&mNR+8IHs{aAt)4u~zEcu^ zfBg~Oy)h1`0nMD$?xAszWLnm3*4N6>*kjB-^z43IT(L_T0*HtwDGpM2{uu~!FD#bP zRi_|iNy#b=4bw4!?WM!kk)B;#8`jB|6%4$$74;@)SK%aJJ%MBROSiY1wY)|8_W1%h zU~#47T~)juvcDC$#vNn|eyIV}G-isxjRR4PvLtCo>?3FO&akzV?z?-CFl!iO5bz{*M8zYgH&P+N!f4h>{&gPymQK_@BUqg99F3f!fR1`*gE*Y%{t3}hDw4;Lt z5+e-sn z%)mMFWVS5XTke(yNK=;>I^^!yH7AWm+yvM#f~tvT@)hn`AoP@xCV6+nYBW0O0VSG- zqNBV#z?4xTO)}NOt2Ll`u9mp1-n)&1#}0abGS{v5c#NR9m3=KY*Plu3HtL9wwKm&H zpc6PDih+^QH7+tVhf@!%M-HbRRG5xxpd;kKbFmg5?(&RiT6jlU=0f0 zz+SJq((^R0!|8Js8?6>`8zIVx4@L^3)nY_OnIF#_nZRdC5D++tHyi zQo2iJ+5p%vVH)AfL$RHOG&?SpCePH|3NHwE9c=ZBF-(HmnW=o5TOf1*o656-$U5Ao z3Zg%f37yYYuqMr*f9Qu-J(!Xo{#Y$A`i*!Rju(sdi^*#nABlfW8$rc(NX2~oJbPNL zrp98YTVsJ{ERWP$Ksr=TdwNLNr4ZAN?BrG&qPTkY-3&3f*B{^9Jo^p-;|q`7;9D&X z1o-Oh?fyeKjD-ndw-4Tgu zx*+KglW8RNT!NMv;%xH=Wf#q8e0)mzcm5j7t!;1VLLkB^@s2aeujo(Xd3Ort=EN## zIv0e(L_CKG$X*>+SgOTjba%j=*ukaL*TxOq9g=uCK)mA4S+%c1ymXL0zpU)Scxt!Y zHk*^q6g9&ym%{qQEV|OC^4Y)uM-O+O?oV$%{(S$-y1%nxOgl7&pAri~1wXVS$1vgo z3?X4Toh+7aHy~>at3h8n(^IB*)TN#u%M`vI$Z>(B+G*?7&ALNJCFk7$E-U%cHdNCw zgQL;k)?ZTgP_~Y%}y`~v82S>lYzaL${fB)n4o4<2P zu|D^AH`gDwbDlk~tfpG-!0J%!Aj8(ANE~68Ic)?uZW9n`l1~?AlQ-wb$5cEUdMIEC zli^hzc7ngy-p7|40q@WZ6O04uzWBgFY*+Nf`%RW^X?dBwCoyy4)DJ+44^ra&_3&p2;7gClVmYOwJ1QP6R&wFS0kQI1aY^f$Ge9(clg-E@r-|Fb!^1oYnL{g!uDKpThZ01YIdvFm1 z$6v7Ig+Nnx(nlU$KfGOB-`_kbw2jchLVE>U?{Zlk>+KyMRSp_*S+!`;G^8qZtH~>& z7zC1H=L% z3oD8X%}MgIT+x#fi2+d9icXojRF4<|l@a7ed{NcHU<3;v>3ZlL^bU3a&dQ1w2@QNOP%S=)tX(@HVLX5KP)+jy{j3B8})2+!C63GT3qh=-Vt_Y?VAt3Ufq<^fLr-N(WeQH*rg4352zhN)@r8CM+7sxerI&}g#*H*SGUU%nC+Rxm_f27f2Z@B^t))R z%cOFb!YiCKUnvFG^AjZYn$0N{H(JqX(*(l>mH$#`d*~xGAXXv+wGLnnktfXfABhV& z+ZfIe6p5Dc6@mkglwa{Lj1Bm7Lj*ipv^Zlc!yoH@ar1w~{nt&U4skHBZ&pMfDJ8qg zZL>PX6-3)4vy9L)RxG5hokZ|x*_fCuxNyYwVKrK%xCZ-j)lt98oAq+e09_T$Y$Xa( zX#D6EP~uze1e&{mr zrEQoXE6%{BOFQK-5-`UUSYk`5#~lk9Akhf0ZDc5p21iWRnUP7|o-qd5S1B!^?(nT( z&Zk^D&NFz-ij0?*#O`{IyhBDrcQ3?nEkTRUVppT@7UAvcWsc%GjyBMyE7`|EcZ7vf z1C-6q7$UHm7`VRFOYIKlnAuYBoHfigUSaJ-jmTah7Gu_p$>w0gAGxiC<{Utd#J|j= zq*vso1=?_ur+n^hg3Zv-EQ=*8}#XlJAO6zw8B)H*|ne{|LK@a8EmfEs{K?hyVY7+r0z z-bSu>E>umRGJWFd!PK1`Z3w|{KoqMch5J0JP+={RMij`ZH1xvvP;|T8LmYU{)gW-1 zZlzEg?Hr5AjSD>#+|nGV<#*Qph?STw#f30+0nH`Uo5SGu{`TX~_Rqt|Pbf2p)O$=3 zZ0B25DHc~)I;fS}O}^z&?1O4(uu;(CTZx~oXFCVZg}QbDX&tp9ez~7;Mkoxx5f!|3 z)vEW{k!Bn)Jf(YEb_qO&7ME{W@*#3C5B4mRHSKy6sD@(_qLPHWhq0K%CLz7EYqht- zuz^}nwPQ`Zt?Hm#lZpNOV!oJqENVg0+VI#9ZXMX-u5G5M;8)UKU<8pX3n6+{S%`&v z=3t-~@UJc}G`X1kGDLn?R-Ph6-UuhrLR9bBb&5in+T}9@@_UTI?S~H!_sD*H`%zg4 z6mNiI*ytb_PnuE>gT3jk*Vp&=ckh0DKz*1sSn_KYzQm5)LOo(Ea&=hx?tEpZRhx4Y z0c``FI$H3piY8vU_*XV*Y8o7XeRrdAp;l}%(=8PF_j+5zbwrSnn_R~^F7g{Fg#a_u zQb@v7g%M%`GE}oc!exyf+BJEZi!6Sqad@(3BKj9M|D?KXz5E4cDqLWd975y0&;#;x zELOO{B5{qS8#I#n`)uvNii|sqdFih&QJKey3zP2cnc1&Fb_}8~DBf#s9PGgA8l%(WMV)AvEG=Ix?xMQ`W;gr72UidC z0sQ&0(5Q2_c+pE|aN$a`tRh58I>WKKslO*9CPdKn@Xec>PoHe-xb=tj%>twu=kv+% zVDB&yT4|PTfP8_ZRlPi4B7HclvGgF}Ib8yIz!4GQqkRx7GI2^!hz}jZSZkjqJ1%Hh zX1B^D?Hy3VZ%#p)^>Rw;;##jXSC~9EqJ`G02I*5U5^ZqUsbEZ{24N({gc`9d)A1#O z2VNyugNHEDG26+K^qT=X?ZgGOA34w)a0F0r*o4Wh5F?v~SW0bFx}aXW>?8%Zkv_h{ zT>c^Pki9QS;cm%04Z%BUIfynR?uTV}Hb?!8AbiokWT3s5uJkdOGg-Wl@DD)&mcn(* z{z#D&KcOmW^$Ts%V|_xU^jM!riSt;WsCxfcpIz5(J=SOMcl6o+9eoZ!&Vosx)|eW+ z)rEXgjbfx#gx<=XRUrqFmc(trTQKl+LfNmGA>omZ+V25RwV3hYh90&*Hx%1d7u{@# ziKFDXYo+Y$FsCbWiPmFAf#{}&HC>+!1_k=M!II9Y+NUT$mcN-(m3-7&)q{kesLNQs zTui1+S7Y=~3B!o`&g@+X8E(jrTK~XTwI6 z2O=dQMLAzqCpDq90Mih}wz~t48u>ZUPHd*)wu_*-sLbh~gH z3XgBnT|ZX5)nWQ#9SfuzfQ|=;!cjy~$WP>{F5w!Qnv&fCN#Xapdt}M{u&5Vod71P4 zuYwD;&t}4DOMOf>oCJopq{#9c7n&D@OAL|i!^lz7=GX)oK`-=YdsXJu*aA`Q-pRV9 z5q_a}lpz$wg7VIGhl+pbyEf9<3D2ERKVmY&xZQly(rcyRa!DO}H1oC>ne|l^@n-)V|g?aPhgDy4VNj6OrPVN_W%} zoX=RKra+5@s>c^PEw~tuQJ0xRETq@&K6+?qsuXIchcfJ!tvFvt%hyt6*-w49YEU9d zDR72kTvn#E*rm2S*lP)hxLMd01*}x5Iz26+aNd%j`RlXB*F34U6LTYu10Ssvk1Vpp z5Funhn~Zxp_bD4=$k9R}UN7A-gIu!Ag;KLYe^z-gfWwplt)a6*ydx+F*fgZKLo79t zD55Cp8A`NF>HGkSt^X#^sRm%&3`0D+b9%L4=pTqsie3aiZe+^oP*X#3x8-Ln`1oRL zwqP!LV@l@7&{Md}R`N(Qy-tSO<|)lGyE2*gZDIK39ZvJ9k8XG8$lh1)zpB?K(VWU1 z&R452om+|;{u`QflV(U+R$IfxasO-l14eYcMlIbNDAJJk1qzJ+$TBI?k586gqXT<0 zIRgJa{VN-wquu)I;nVef?|*H7-TPmC{6F{#>G8h$x4WmWq8NZ;=7Mozo)+ot&zJx#k=0+S;(I#$) zk@#{9*cCWm>PQ3zs5mvad~d=O?S5J@F(gstGqW}3etNh;FAK@4U%}+c%2NwJL^ty( znH#+h>t^4Sk@(F5By$-zm=!wt?itdn#21(RINA+C2t$~m9{XYYGt&+kQqIUEx#8s| zX!pzHoG@Pp9fpAkA{TIv8GIozwo}DaAWbJ3)ll3G+B%mEQg2I0K4Ntjgh^YfWY23& zBPr_FNrvr$hfFLcAJ*15E*=31NC@r~ zH+m$@pzNX#CJ|t80AhaOJKNOHXNWozxxStk%txCXcXyDQRLs+88J^(MjH(UDCA`DS z&A)BBT0aW%77+?lPM&#PoR54*wEIwr*To=OHO&i9806r9tZo_cnytp$0sp0RhIo#v zZZt~j72s4es3$2j4uaU5&nH(%-+)ND1p`ugU+sP~_-6YnDMF(}Lf?%+!av!j<)@w8 zfvB$WXG`FFjYZ*e+#uAn_ObTyxy3eeS8^Ip9zBQ~dYE`@Nyd;HRp%|P z^lUMb*y-mMI0WXANsowj(;4%8Smi7?VVY*Gb&1)D?i(U&4c2WM69stCG#j8x^T9I1 z@znP!cX7!drGP=x6l|k{JHH1~8g|Dpan#Q8R3N=tN5U`z!pEk=*=ft*+u21oi$YhW zNWtL*cZm~Kfy7TBDKgCK+V6M*rY24$$`PYx2d$5A5Esab5HXMcCf>FMD;A6eExCrA zeV2doiV3JM;OT~qO%x2`2^?kOrkJsI2mf><(ltG(+F~I<>6#C<6(T?nOI(HfL$HE( zR}moAH}iwQgA-3#|>wI;TcXvHro_O zd_xc1i^Gp1X&Vo28(L!NL5ZX_p-!IVk%Fv@vZ@wI8aduXr|A^XtFAPO!tzX^+X$En zGt6#xXdYCrlCe)OPrIpkEPG>H`x{LIYmK6a+g!P%yQFnAlg=MRQZ(B2W57wtgkmHh!;@6tv zKvKLQHy8=pD~zg`Dc8ec9-f z4WlgFH&@d&+<0ifO-aT;DJOEEG4~SKd6r}BaLhg`IY5L)-T;{nF;Daq2M}&aEs)4O z?S>0cc?5*%RD>llqWO7r}R-@{Y#tmyA5C{J8 zDf25GgY@u@s19xwsLxE%xUr*N)7naj{BJ_wZl;1B7rI<{z2cml-M+oC5A&N^K%Zf_ z-Z3H`v!I$hJKyYX4-N-AyZie)hkJv=!~L7T>>N&$Xo!4@@`A?QF4Y@*N;ZLcGt^Fb zJg*&AwIj<(#Yd8fSkQ#@Ux|}c6G{Faf6-_J{?@a{u6pG~J@;U7l6`k|v2k&m-F!Aq z7I#jDyJ`` zo*kGAX`7*gn7f{^)m={bEmFVqrGBY#X#=RG(V?)IQ+X1a2E;9I=3AIf70&hw(%2dq zBxpR=mQ*!fp+M|ZK1Z!Ir^5JPvTwIau?>7Ozqxz&>o2p9Z=P_Z;G4^|7|&OaWyN@& zlVT7vHl#!wX?=P)=0A$~a8C>Gk1;ZVoTEtE|TDT?2_UN)`!kpne?(A+rC@q+k2*%VOQwYSI zghS%fG-3*eHq}GqV!)9?qIz}nRLJ|}IgG1@A47Z!&B2bJ3u;g-Ul$L> zCYv!2Tnmo3d-yxJ8Ijl};!9jntLTwpnwChjUtXG{S?$hlxIX1@)S_Z>k|;_Z8q=_s z3sh*m)qh-SfWVK{(O-k;bC$@yyxFBBa&1yTd8i9J-BW=nF4 z^zWCGE&WT)jQ{xCztMYQicJ|$95amo1PNntklM7#Sp{56<^DS+@on(;(6MOu&morW-Xfn#*jZpTH9~an)Gw+fjd7&?66*HB5S}!1QJLV1N3TVB!i?t!M5I?YE zlp7WUGZszGhVmxS=YiP1BE5o|-YQBh2oC3_3`^7O3x|pB#mwg>k%^c9G9@r^l+L~l zkftU-#j%47yV?>Yd!mW%;0MidI#w18r*AM3{INxB_aGWBOaw<$*i)H-k>m_zTu;s> zP+LgGER)2Sig_OP5>~7;$Ba+iDNYnvyZ?r2fcoO38j$jskHtQCOfm4tO^>Msi0^6X z0Xq*_y1LS`#yUyFFDIe`XcqYW=5Z;XVf)z;6xh+Hn8l=10-?=WKDu)0clNZ!`+?&A z51__f@~VUM&g4P|uX98vfMSc>7y7CZvvek?ZZaAmqgy1HaKhhUaT>{RWOf98KAIPa zxOA2CaFOj+eIa;`uX}@U27|rr0|;P;_%qn<@7_Gy**=`2ELLnp$mM5q4}NH5Zg!By z?398rI}#FsJ$RP%DJi&r0GGM41z!7T0unGb0>vs8r%h`^16Zsi2((ut>((9?aGXnQ zag40N;Pxuvu?=@$3k$UQ2vdXkFkle9Eh5L*qy?@5mqZ7=TK+EJ`T$ODVN7xskZw_S zUjwdt;$4xD16g!%&(boP5(uh9bQrr6H(`&^v3pJw(FeeOF5fk^|f79#|d96lc& zp`>8(vOZsir@?EUBR3AYzwNjp{N-YA6!0``sE{C=pm?1N88lQzt#4KnuwU&exydNFwQIe!sGiO24yCPCRj6{!buUh;(rf}^|Qcib=w2qNA zY3c5)cs(`@S6Xj$CBF$MHi)W8qe!0pUZuX?3r(m#Fk?s&%tCij>XpbH)M_CY=I$j{&tbrUo%egMaCr!W)ML}CAJ0{ zGB`jQ9rIW%j!|Mpu+ICoXwmCWLU1iCzKJw+Ow4+k4~7YnZxo+gK#SXf|~(EJfwSp)_T$ zXb68cp17%(o~^O75NRR|j>rmtI2Duua@9=esf^Rt&zoRsMt z@!|Lf&AkD#r5gid+TAu$1ZF}|Kyfxv{f0^d+IJ%hv8h`4>5rAw?SyB~6lUa}$bv8L zJzZ+aGdABd`?nklWW0J}d7mwcpWlPeG3irQP?n4#%Ve9N0%%U+uzfE+g76&f_m`dwO^bUWm>5wD{9JJ!*_mMlL&w(65Uxd+}d!)QKz(#RxTZTzMrQa zMxRyI%WggZ$gw!7QJ!tD>ss;`8*~^j1!zNB{wI zXKG96gw;c*k=>ZMU7N_A$C~8=YnaA4L_TQ%t97w33Q_%ea; z?Ubt6id1&{GVvDkWdi>#-yo*ZMtlX6TqEBZ|Hy|ZeufJXyIC7NHrzSrkv`9luq*Fx zKKwdJ-;bb@_!nMiSN=;?bX>A3pqebJvT8ED$r|X$4HVLJi!TqlZr!S%<2xqldO1sfFa6NaT^7@SleVQ>9|6 zIgB7SWR#K$iU{NW7mU@s8-NYN!v|?+zZ__N;ARXVjGVj5rS76ZI9ne8D<4uV_IH&; zDNht(MSGqvE;;;=keS|AhUb>YLCyo>T1ubM8lq`S%mlfRIh<&Z$LDm&@l98@YLpG+ zw|EYE(P%?cCQ);%{;JW**O?=RDe3iP6|k3EH7ZB=*a-Lq=_on zf?;F4o_`U%g@$4JGhmO`Z zfcp`~z5%}fg~#^?Uw8pB^gKR-y}mL=dWJX^BCiiSaFntN3#1)GwkE59WG~N`+W2lv z*uj!@N5@GjXn=(!#gS^Y$*p3UwFh!5TFA$W0Jw6t;vICxS-%LW6a70}F;zl*yH?#~X^z14bUk$KiXFaA*#%dfgV5Xzj^WoBU zTw;NFvXu$vY`n*$DGwhW-s8-#Cm-K}2y4+x@Q3&J4${hFeVH56XV!%K|w3CIc&;?WU>9Fnon$TxbkLcP}{|Jn*yVW%4G4aOiFV>WiKn(!WU>Oeu#eLi(p{OzNn!rp(z+?e4N?4 zT;{D9=}w&!?~u+(qjuGS7jZO!33N*-HIK$XEFxq1l3PY9COXZUvVfis{H31lX5C@> z85{_>d4QGSy4!_4&qXxaz%I>XG+QK^K2QHQK+wG;F>s?nPyO+#!{RNyS zliLZiRvGJnN&g$J1MR2+J@*T~1CQPHnDandL+GqY4lRvR0~c-Rq}Aq! z(-uROi*_7YNgX7Sg19vdPBc&8J;30#XPLJPnIp0&!bhDZ_3ZTXT}=??pMF+D_y^BG zpfB)n-~vg>v`!=9HeMCh9e9)?V!LxAgV!*{J$vNMEJbS*ZweVYB+rB!gt%nb<&AmN zTs3;=R-6SYDDX7?dvR*{PpTHp%o0KAD<&9PpCe;qB=#Biy4!W!D6pa9%UuyybL#-Y zqoL^KZkn4|9u>2lOsCoO(1K_nAAelmeO|x4zP~oM-(2ldeM3L7!sr3Y)5+l4$ysET zvQXPWUnod51{XK)uW#Rqw~p)E>$moztXw9Gl$F|gRSC?m1A{b?OrjNIM=LEpdH~MB z#GjMlx1`xozp%48abG1j^+!3c-hcil2&2Z_ukYbr^`bUVtxNOw4$qAYC)AG5)+x$c-0bnSkC4 z0?xWxm-F@b;tFwt@`#MBtVO5G^XK*W-6zKOpt{HV%U}8L`1T(kEu(DOwpI&Pw4Sdi z3IIsa$zi3bxk&TIcM;B)ZV3K3S#p-0TQ2%D*6XAXeWiLZFhYt%56M_bK z&mC?`B%$a*(5fMtdQfGS3LXO0S^@FB9V2{L1k4>`2O+pQQB2HImRTv#YEg630&O}w zz&S*~qw8PqAMUDxC`FSN&wL=^f{`+3yY7LHD1aJqpid@hpUM?~^$LY`igi8pqCQhZ zxxwRUr~l+)yu1ST7NsS|D*c2S2xn3A}hJk^%2nP}OJ z?3qJi$z~V5cLp@>_O_mxluErjo21x(*7KC*!scGp#%V4+FU3EaZRQmiurAN@1psj* zIVNyEa1EoaCsP#)f+^O~ybpRQq{n>^BnPtei}a@ceMszniCiT6LL>ObH7@%(#WxM% z*h*qGWSw$0FZ*W2;Nxl{0mR-Fs9lBlW{TAX3gmR*(Ta;8@h)Qcklm6GwqskpzCB4 z75i#+Ua=`VN~`_8do*A=s?eUvpquy$08OPuA;lAFs8C7gbmF8S5?Cs@3)rwE(VYHh zw|9hCO8=7snY>f3v;$wC5&Y+iO<62W1A>!E*-6Mz$f3{-*5$l=l501W`VP8lnhDIK zLbe(kZ9^x0Rg&Of*pz+1a6yqgGmOiMFrd(t{3*8W6jK_4ciw!oK(321{0mOuA#wSmGv+%kTA@mGhmZqn3qwOoD4b>C8^9aC^jHmnHezJlp>$PDRf z)e;kFf8!Jb3Y{w$GES*oUob*Yn)Jvmb|7k;99L{_h-yQA@{WrDjv4&KJIuusf9Czu`rtf75K zN)4-#ev1`dOG(#k`g1S!2AW^O5`?o(+4y)%yn@g)=cMqQ(rRblGw>~q)U6G?drRWEQENsTNM~Tx2^;QLo=OVsp!`{LIS0HUI z?HARs6W3L`re%FQaRt#3L_+E_-wdv~?&zQ!eUk_Y$lFdTODDD#%D|}_Z_u-} zU|5)oIkdJ2GX>_{$I*V(Yc|MsLxVZY;-C<=)i`fPU$a5H!md0&Dbcsa&P|E8z-hHC zj*1JN5JDqGhO45$HfU6 zZNh#c$O%>Q4Pp;4{if_!LWyK~@cq;P+M*9t-#RvW+EpFjs!>@{uL}m-$0o) zOam}A2ngCMd`{>Fxhc6<(NxCf9;_aVTsz2tYnk=J@lL9L&KZ^_4Xh!$ofqgX|oj4Wr zE8XAb)wn4jdt<(PEJn?p~ zgQDtqxP)L31%scXlO1Hp!;d25E<;FqS7$qe>F(#x$!3A0X^6E7Ir6IEH6b?cCViFX zpO`J7mOvyp2UZ}5jooyf^hqg6Bj<5T)(vcCL_9s)iwoe!MH?4cord1lKL7AFTl{l0G&p*MqwmvGtn1vK506^>hAu+*Zr zm?F$V)!}9SQYx)xBQ^>8orp|2#fpcGHnUq zS=5SBKk-p6nI^jAx}O%YN#d}oX=sU zEQ|O1oXenAqfS%J!z2*nNVMM_+kjqkpEP{1FK2C=u(hfaQTrSm0=)T;;VOXuqT%J~ zN+n9fDH4W8XT^jzWSRAJJQ8J6Y97Qdo3`_cNQ$QfDzVCaLLZv-cZ_gsG$EmQq(R~w zvRJLDNg)Hc$(KUJzu>YgbcBj9nsT0aFBF1R03t5#f(I~3%Gqc!TLdNPqvBFJVxjMM zir$TG8l5zYYt?>%X<<2meW&kCP~diV1y7fDAj2_q$z=F%uHV;bZjx7M2HT=yPR64b z;&#Cq;FbFBx=An4yxKdLDcim8ni{4DlbS+BY!#;}hPHyJubpV>yRCpO8lBn~4~8Fy zwbRM4vB<*nt(C8_f2ngV)Sz{>39jK6oHf-B*VmD{ zRR!Pl8T5S7S7de+0i7+ev4ZMx#1z8+tXGHF`o(O1Vhw-6CLA1ELa{(`C_xwh_G%v z9$|chi8A_4oo0gs(~$Umtw6XlmIueC_4wlreRMx40I<&R6)|x9W&o}u&TZQgvw6KQXPgn@&DtshxN zY-^S+rI<^37Fx_gthE+l#h9gtpSxI1=5Y7fG}Ena`jAhoh}io}-*%5@hTgMbEBA>e zzzj}>I}=gp863M7uTjg(f0Y_g!Y#rJG1M^VG!QGxO>a~J$l1;mY@mM7X`$H2?B&|6 zayh9;!UisBWL$7y?~4>UJ-t1yGI* zeO^>Qb)DSCZhFWSFc&tkovw7j<0U4D-l<5(Y8;VY*q)#kiR>5D4CQ)+1_^OBFpX(H zfwasKeV+`DtQt>OROm^Y+xrX`M0ZwZngbf zN!x>%AKzY`U37Cgnj;cKFgTcPR21ibN-F@4XN#jPTqAL5(ykL3^Km&erM}^eL)%m> z?VPWgi(y)fR-fXVC{jQ>yK16g`|-+~%?T-7uvS>5IPMhqA=7iZ(u~*3wMOBA zx~0FX)FB`eN0-wnR-Dtf#eZZzvLDd0VQWIgXeJ_S{2SUBash_t=@YBYLREr%j*uMb zY_dL-c65dW&ll%QFW}PMMLmL8n~QI_a=61Uc5id}7be<(dX*=w*bVYcHay*O9jtL! zoNu7b%DWH<8UYfc`6Xfr=RoM^7ox}DlJf=;LN6UYZD~vYcJn`H`HXOEaF2Ammo{L` zp^19R8_-{Wyjq~dh-4m#E%ftgchFvqLq!#;NjtVMuqD>44%N4V9V874-X|K+k6Hwy zZmV1Zm=!GvfOR8zPT3<}Na*O`o?(2jtoE&R{T zsXv%fY)#A_kZIBf0w~-nZ`~4omYpiQM8m~h0VP8@(!SFz9rMr=Yg5+J`JGEtl{p^$0gaDh!j)(D^M+9zXRD;<=u$*Mrb z$H)XjTsuBF$EJ7YmbMFFrSQskk z9_!)~JGP*o%7S0;77M1ZS6k@;$A8WZln|Q)a<8TUMy9(H7@j@(4u<-|H#?Nv_nu^w z#y9rP$kzN?;9ATdjXf6Fw(g_%a{FCiQ}K2E^#RF_{+mv`bfx((LabX3!2v=jBQ*t= zXDvFC$eO}hVI@j#`*&~ZA_;>oAV4O_CE$V<^djNLM%+nefLV}LW(qY*kKqn}3>3;F zS@56va+eaD1)kmvWuue6mcS9%5Z&QdyaSXJVY765i z4@!>Gg}CA%9U2!=wrJ|pt3hv}H(j3`Emz23U<&v>(*bVkqwy(UHnm~n$?5R*WDLvD z3X@7ZlCR;om->LlfNfdRIJl`ZkQ5$=Qo2v8Pbc*aG}6ZuD<|k z0Jn$=}Z~>^s8%{~;XH-3>k=Em+z;=FWUE%1MJ#i&n9~#f4ob zsUL8(yg-~M_}G^0NEXXZG^s3qnONFt);lomasdV%ViM3A9W{WOU)K|CbV8#Np#oy* z!CtNU`zm_*wQ5-Y;o_L^F8v=Uk4YwhId9G<$IPFHV9E(Xs?1KDScaD7a8Q@w!zL#A zZkpP;`;RW8L?{GDVb^d;11h2_KxdqB&_wjWmZJ*_oN5)P6K7JAQe<+7Md^~2QXj2N z8OiIKl13BtCHc&W?Hv?y5cd9mBZP_Wg?08*d+--xm>#|D_XIITg%hA&_$DP@t8Q-W z@(bkOkD3`wNvCV|sm%YNe+ZcY7ce?G*e{I#RlDh9A|7#plr>1xACz*t|DbRa`NJ%o zcqplv6oKa`z^cTS+uM=alCN8SCP0g6QU*538Sty0OWy(&NS*VV5@}dSY8CdDv0C7P zBDq{NSv;#_H4$~j-|+|h1nMC)p*{-CPr088{N8{RNYFgX!m$hw0vXJ7p2tYDPPgFF zCqI7?Y)nFUrC^sm`1A{cNvR(jIJLz|)Q1#-+9%T#sjaM+G-bV*!;q$dk@yQOyTxH~ zLf5gfg*FJLU`-Q*_)VHf?S2NU!#Nari&3U`1-HQTQEk@fkzQuirK1oNcAw2wNCb2? z0WZY*Xs6gOEa;K9BCwHb?PNrSvJM2N0V zKK}v=IhOc9sx2|O!_nyF?7|s>ywzb=(pC@eI2h4|Mlg|w!BBUsMHe_rG(c+cA-*fQ zE)sSK(%_kQk=iVw~N3q>th5l&2}|!f|JwV%y?^}j?)?q$3glUMQ{Xvx?$?{1Wzjj8 zDCgieZXq0t=hpoIWloUC)3aXT?gVA|zkYl93I5gJ{&M}{m+NoGx5y|33)-h|kKf&& zJpB0Wr~3~(gJ(Z|xPSHrRo}k7e)Hz$)2H>D+mH8mx9``2emlPT@!{vN4#~Jc*Wl#| z!u7V&FL4OP6<7qy6Lt4>zi{d9IXm#ho3PP{+)jUQ|L_}M{*jy1H>?2Q24$>lW-R3w zDR|DI+HpF+?r7+i$hZ=U6g=DST+wC}6kaNit0%iVga~k8ZsHAZCAgZCz$?=f7|k-S zH?`%!UX+i375p*U&S3XZ4?cNUjQ;@6g|8g;mM^KknR{^octv(SR;jO+_?z6jGv7Yy%V zmTe?>0}lv;+YA+&=$_`zOQWmHq#*N2EFt=urZh=mvIB1x@}`TMEptY5?`t8laYIq& zAGorYCL?aGT*8ZyX!V+mP+V%53&4-Gk2tBMnFxPp;qpG=BK?{mtj~?Blz8 z;p#j-oE4R(bXJkLpi&#luL;%Jx*Bz`j2kiqI1?J*exQG8uWClj05ps!UQUx}cK!0* z;HL5lq=|@fGFU|{W8Y+w zcOM!QU^J*ILO+4OLUMJJo}yC+{u4VF|H>yRTcoT-{m7eVo6>%#AY%3=*AMW92n3W_ z5+a*X4sJ4j7QS(})^}HWDb7QoXoIFIW@Z;ZAYiBUa0BsC1c0Xe?Oi?W%t19pClj#L zmRmCE%~q&>(wzvb0m)m_T%TA`WgC7DX8q##k(bYIb+|%SZhW)C^O!9SdhK3ZGhG_4 zpD<_LCwikAoiy{YYsvh=md#vxxCg?+8O-;I&OD+jo=ooUZtq6mi?S;#vO7@WLo*-d zpog4OP6*+RH5<=}J)9Ee2E7XhE!-0J+&5iKLMQY}-#%2BlD@@izYKth_>ywTP4nu) zHt-Y~MrNQ|T+ZR@1SU)!o_&W|Q7Zf3U!OKQ5_6MDV4{!1Qu(AUnu=lV$g9HB%haH> z1+eL_E)n?&Lqh3Z=fYxu)IGM6RjHmX;H}EZDTs7e58X;c6%hi;DyW%Jx#6`cZibS&KPNhzB}G;2eq6D;y~{eAc<+ zL1VOl5+|f)NI_e?7(RXa?^x2_ze?b1fsw%f-x0#J2|OZrun{~acxNMcLhvrZ6stLL zOyN^)NaGvG0=*oAa2fjnQpRMq9kGGUj)9I+I3cP+m!1vg#n$1rhAoH8!AKC_M{Eh-~uqLIG`8Gp{NhD;>O^RTw4WK6P$CnIZ(OMi8|GTWb!cERlk z-iVVC9Ma%xQ^;G1AU0&J)NXSG2Xc7#bb7G|NT1B@IUb#%0+3~hW0o9gxvIvy+h3nV z2#Ocqqq7Q(v%~Xa*unyqTEKZZdWYJ}ml3$0Ixrp!YTr+&lxMNg6{Js$g;9=~Y~%Y2 zqY=>?9Hy9`W~`+J+koR9^fW?Ejt20=@pydII~41xtkW9r zqtH63^x8gX9fcuoqU2>?hVE4WJuwW~62bVn@Pr8T0IX#;{gSV2bGn6RtueZGQ?R<2 z@Q4woFxDJ1#XOGLsXD9$KRoX=;Tc4O){*kyXLpv0E3G3WV$h><)Pa}qNlj3(F?UTE z(N5gelk7N>NkA<_V+?6a;$RV6j6VZuWBtVE>}Jgl8n*0YBNpE4donx~;WOO|nPCJ` z4NAYvtXPP2xsPZTiY|H^i4MYJn5GS>4E%~|+F98~f?PMV52hg8?mAs-Z|BPm(d%6lFq4HT%4A!5aEUu9y6`O7oI>gI|O z`?(&2DHX$8+XLesrZ}Zj zYep1@YmnT&2`Qt+;vtJDSVnfN_jg~^IcK(!bB6PeH9TI!$_kaP^C=c5yBlGJS<4Dn zly(MDHp;fB5EW%NLk2Pw^fX=#rKNM5)K`*dMiHHNUF^8ni%88;o&gltEcE*+u1DB4pR0dd8W;x)*5( z%(SP|HbgN)EW`6^0=IV(@nKQ`&K=+9IM2zFK^mJ)Gn9OJY@1c&ag&1*ZX`&DBo_%w zF|kX8tRt{e8A z{POn0_1$ObT2sy(%qRFcY6?atrPEy1?t)1vpexNx$*EHFM67!W%#Yz#J-5(qDjC~RhkZ5vJM1{+#~VNNn1UK;Rqw?gZJRm3O$Z%uFDSk2<7>_ zM3Mq|asxfSq&41bVsxL<+rp2=_Jc@}Fcw)Krjye)AxZWVL3RvcLDyk%klwArIm7oq z-!5<7Bi8|H|E*DF2dw-O#--C^y284PIhuu^n4)4g;neOF7J%#N+MpTniD$E2n;RF# z$&o@xrgOgztx!ZeXff;y$=K#^LQit`J?N7mK;76wZ4Ha`Sm6=GiwN{>Xh;K{OA)E9q-j@myI~ zTIpmniL*L3vHEfmF#RpulNOMt@yB+qCXc!@en0$c&dyUwBv6M)l-RGM<4KooGJs>C z$AS;}1bUX{xyyEk=%6oLqyN?E>EHUdgBxo%FQC1i+`M$pj3* z1jJ0W(>7{tv+e|3jJ7g^Qn8tJu9ex?cQzOsDzr5fmD6=GA>AGHT)7wPq57ry z<@<28zlipIyc%i=Bg0jk`*Wwwb)&Bmrz>Z0?0+f6WB&l(!h4cwbAEI84#gR&*2#*J z`^6Z2Ii45#@LI~^4sF2h%7N1}JbOTcloC{MnR5zWN=N*S(i^ zJx>BQr%E3|C%-4znhmt(u>te5gb=l1k((e{6g|n1Wl2ruM8v7WApYnn>F$s|lUg(- z5JAKT^M?puDR2e@&Lyu>Ji0UP4WK?7E}34&AbU^faGCUA<+Q9}39;@7LGHK@bHUTW z-7QWsBR??v|Bc9*b{QW&_6u<{kKFWF)Qru7l6kN$m>)m6LyKsk%+&eJITB0%op#q8 z()%27Y7HdXhHGjwk8Q4l@NnsMvlIhb{q35Qq80iRdx96KTV1S%r;rpWd)C*@ljAHfHUaur?p>ub z1lpp_*wLr!R+>;PD82-22K-eRl^)pXi{JmzJzx<({_4z zV=p5E+Kd}eEDx1l$1AFk;g6wUuLwnH!1SJ??Kmk9Lv2?B^D#5sQUnH=y3qPczZTB$ zWX7@XR9_b6cRU6zBh)a0!)4S`{02Z{x@kOr* zVoZC2R@i89LitZ*slZPNL93Y}n(m;uDxD;PUvj@e=7DB5!jr|t`2})yV`NJI+-QUE z`WmO2c1?x1|LfgTy`my3Kl$DC@Knt17OfC&m>A-(qN2FJH0mMw~L9&vLZ(!Bbt`96cDG?Qn@=}xI ztB+D+^dz`I`-SL0GyvT&OPGOh6f1ctj#|7s7n%;>}K3h$T?A%mzdHU?T*++PPeSCBCwD(<4Ik;gey?=^FLK~!1 zFgx&wU}l)Xv+q~|hT8Y^U~>!j!;cQw{_^^ zp@`CB15Y|nrmXg4d?8$*9%>Ltx>58uQBVhJPmx5BXuydnneOmgLnxSTPdDS*`hiFm z?OrUy23@!z7T-@mssy%<2xhk#tT0VB>RFa)}i+Csf%r#+OJK@CsGm z=5xe-dWv`I3yIJCsOxh=hiGL4I+9A$IY62)`D3uUZ;^CbqiHhCC%J$${cJU(qchCu z1+3BC+Kmj=6G>&lm$l%vLHcPX1U{LZ4tnL)dLV6!G^JP9f4_P7b#(py{g2lkWW;vF z7}XG4Gcs@_8f#XgjQuPZZo@9Aq;Eno#BADmayJ5;rDnL}2xxaN0!5fC%3X6I5!)fK zT83FDr?Y{GMH4VbANQ;-GM+Z&M-8lkYeEf;ni>!P@}s$<3*y$*L$~UQ;k@lkLX`l5 z`I)HW9FA8P;OQIB4Z*9~OV0*R1$Gl3Rz=GfOiLHo9f2twBIA7NM@mYt{OkaK0hiuV zg_@iw|q#xIEg`$UlBxS;LxI05I)JKpX;CJA!WmG8}GAhe~%6%8H;V4#HCiR)6Zb8Q} z$#Y4WGp1v47Uvr6dZir_m?D;ABzceAJiZ=khHICrvy4BUjo?)e);3LqGX-Lv6Hs&D zsMJ#_0OeTFM7_s1bkYMP-GlQ4aR#LrRQsw4^I6ARAck+$D|dmPVAIMmJryCy*QT+z zTycvl;N|%2@MEFsqXcUhvA4`m`uz1I7ckCEn*WT4QC^c`9`45u4(o^KfP`jlr}1La z&=RWmil4P2<@mRgaxF`+Zqi1wRK7?o9F|(Jp%>%6ly^C+nbo_+^2Y}006ht%Zk5ER zIN^NXi;#iw7ZPzpMq#O5jVjA1hwwP4SA6f0-5_Z_k`Ks79vq|yN~5*{6z?$9M1a>} zPqeCPGJZzPH1s&ayMCedvyVOAAb|2CDp)DX^mpxXZY?#_BILz1ryy?flrd4HDB4^D z9Q88qOJ9iB+~8;@Gu)dp!o;>5&m-xE@=$C4jC&4!*Zy4v2>@GSf6a^`@z{aXAl@Y0+do@hE)Fv8+)Xj8>ceOjnDJUpF{4G!r zm}|(gu$}{1V&!LyUNWj=mA|?m*yBs&T7bs`@`KNiHX3F*#M{iD9h|(#nt;7jrWOtm zTBTIDv9G1cm%f)S?V%Q&*7Ii&>lnod_7WSph-2LOW_NpVIM~_U-`_dh8yp_) zBYg323b#Ds2jI04Dl8Ts>qUkgpot}u1lLi7x&8WZzaC%TUn5Yqjh1;7?NpWutnMym?lUT zk+YXmI4_J93%dUG?&i(APjoB5#PlFMacY!U0aE9~n|lTVPVa6%ynOfe=GH1pYl_$f zbF{G&#&x+wf*sVRYHXLo%aaA5d=F1oa|8QFWIrIN-^>q4u|d2gCu`Hq?h51@5S-*K z{4cGC{<_Kozp;r>(HBaLE$dN05R&dni{?G5wAq;ZjtqjnHJ;ZvzL&p~8>ay^3gC%C z8#`8S43PG$lC?rOZ)9F$X5(TyxxZTYB2Q-Q!;Y*^u`{8PF@NpCQQJO)sMOecDmf7K z!-z83^Bu+b=dz!L7+811EY%$rHQ)?vkfPYYsAWwpFrcy&SW@Ny`nS4$R>j7<$|4r< zC#u1QM9$P+uRsL?H%L#+uZ7WAbJk+aYXEw36~9#Lq@#mQ6()E+egE+3m&NDlyPs}# zjL?QtRJ7t9Xlo}}?B$)*39q;bm?)l`%Zo?BX*XrY!c`wZ8ZCk1O0lWp#8|_|k{Cf* z?9t=fpMUcIE>*fk(b)Qjhy&^veqNAM{Dn6{rBLkvYg>yMgmc%~Sw|p;x2vQ3=y(>b zg=Nw5rOb}woxOCwFh^El^tU@%MW^OkX!g*p4JJ&w=NuBdC!`%opPY_iww?sx^`k;s z@7m>nWSvK$-c+FY3M9xa`K)Wh!HZ*8CD&GQl?+Osip3?{fY3sb8oM;Eij7!b=x*Am zqS$AhaNHM|+xa5C#SYH@lsPxCPJiv)e*l5{8L3Mali`@ypyIhw{zNIRirXGD>1ry0 z3xMe12GookX+kxh{9;AU)kY`FM@w3!RUk`nJ*A<952c^K{bN8QF&B$lePkPA*cBy*jZR(EkDFVVUVK zg)ec#RbT_p#qZv64OEeUngOOvfa}sG@um%I3+AJflT9^cl8~-GdLb2y)P7cV0}F1s z4cBdf(#Fs_tmo6&%Tx2Pbjh^?T-_FazhFW}nAfB)X|(IWbElXch4R!M#1QQrYCC{X zmCOl^eqMw@ST$|&!mx+^7RL%ALx)Wa1m6eDTUqIMMM6PR<|A<1bP$JkI8?jD2A-Qc z;(BwlzNzamgYKlhz|DpU{{Nigc4ksO_6u$qkKFXw873h|p_DR|j$)r=3#GXU zocr%Drl2MGcM8dSpe3lA9EZbAd4pIBNEH$FBxOM?N0Bxd+%1zoy47e4uETWLk95@P zF)0bu5xe)lAe#h&S}|l^BHf}c3p5O+=ZSd~ZgQiGcXf4>r8?YrcVwwfSDF*dG*p0! zxOW3`-9j5OXrKE9HKn*L&Fz5nQJh1_F>IFW6t=R>uodh}?0(wuu#92wI>;#p2KG}a z2ac3-pc(gpqjpvYe)LD~h^)HG%lFqP@OAp`)BVjy>T-x~&2QK7azG@rT1MGJ;u~a| zMSNX{VnN0R1|fQ`(k3No!?m!&^VqAh3azJw&+>p?bp#WSfGv7n?!=OXSNWupgSUE0 zyak9J{5u~a7JBu0^y~Zkut50Zvuoqv3&pDktsFNmf%8!47=!2LNEVqU_fmB8-HaM{ zlPjj_B)iZSRJ*`I#zfqKOLiY+*t~;YSMzJ#xf4yj>d6yr-bqvB5Gw7N&O*L420JUN z4=TbUl3D^ajyQNhK3E7IrN6r|L8Fr%pvPuS0E+mTj<9NS)WxLLS>yNq_T$fWNmcDf zy1tlC`bpC=*oOPkaW?A}D_RN@dW2BpHX~#*M+~PNWX_ zA#MX{eI}=wWvH5CjZRG^(nOQvTsB)?Q;L1&LQ+Y`1xIlgZMGClmc>dAiJ$;5i<3D^Km1$&64*jTae-31x;}IOL z3B>^fQ^NS8bDCZ2g=hfn2AUC|3ZH}bNaf@HKib~4yN%?^64g(^^{nMZ*;T#-KvL55 zbk73uAYqXN3IHipf5DPfw5@BERHLG7c|3i8``vq=bK;c=s(h!XmMtP9A~Pc+PMr4x zf}mLg>z4^QyJPhnxxTO92;bxRF6nX#{utQ+Qdp-mgLR)CMa)Zp6XR@vNY=UjmIH(I zfCLmcjErjaI_&iW4h+%*q+bb7g0>uQ)2SPb?~#Wpqdr=#a;IB2@l4`j$*&5A0{rh0 zw<>kYfUcaUvt6>ThO-@4Gxg~ui3&~rfZ~uIHq_7~a}hVT4DaAGmb)zq4J{dbGI+eZ z)p@{J*2$fhl^*ETw89Z%d%12=VAYidQwikWs^Q{yj9NN51@ZMQd^}&aG*J%pj0Ml# zdSu%D&1*miQfjPI6d{jYbkEw{$NezW8CJcc(Cm!K%(#pf?$U_NeF971HrPdOHW`5!h_*9eo@@(Oi^h znkY*MD?{*~zO40!WxD}uMEI7X*763&i7|DROGyHtzM<8_g4(Ykvq8vYXa!<}SwgP= ziHFDQv6-JoFdWF-3K=r#8i*_K!LE(l!$Hua=inj;)-I*^rFoI8(>GRnPh1oqga}sx zPP&G=;VH&+9*lj9R@!&*blAe6+OeD@F{UOlSpmf*_-&J#;xZa+00ajf!8n$Wek zSPflM-7_?-LUwuv$W #6U-j9#-NfbJm3xj)-2^BZ~}JQV*HPZD@L;=pH>pUS7OJ zrU#~r8uWE}%o7uZvG|k8)f6n5%co!VYI;C{NCwEtkraTTEid&=8LXMMK0&o4LqeH? zdfxrf@v$iK6Y4t$XmS^vR0q zn&Nbnyp@N#aLMuk4gN7Lk-G?0ilQ!yLvnSFsA{$qj6yy_*6Vu%q397`f}UQ- zS(q9!AqZxOC8d0i=s`GH@Sr2==Z008pSV2?i%A0pPUsDyrX!NQZuO%LiQy~hy?X}$ zA-X>uLQrRWWIO;~fHw(SA?KBi2L9B5Z@(KK49%Acx6SbEmiNSxNkYP*xwyH-ilEH< z{JWzc-~2z{{P^wzxgGD=^N0-3o+8PYw_v~F+PEKp2Rh;nqKr1;i1&I*y25`I)lGzj zt0pZOvlEz4#bUj`|MK?!r~SjHH$VOK?!%u9{X(%PWbd*F<59ZNaVOX;t(0u476h1x zp%e~CLxIUM83i*c41V);z~AJ)230}rQ=6!z1g0}vUri+A8?hXra6CMS8qtUpz#02` zb=qTN3H{hW?T&@Zx;u9wwKJ7EbtE_!H(QWTq?T)ag+Lop@%8yLY2>O7G$w(GtQezt zO;H1~)9S|FKJt2LC*DY{qzRb%7FB-6Duwp`$4z{Ks0UyHPMssJ# z5Z_lHc`xxT8;9f&2)_qIDm>s2Wf(5&a1!Ga3%Hm_GV zSKk*L6mP=wF0_P0WQlRr67n3lYRNO$_lA+AK1~3iNs*+iGgO-=C>tLdQhv2!cq(6- z;*-^>_X#GmPzFNXqJgs0r?|Lcob(}oiJsnsnEgOQ0Rb0}48Dd6tW|5BNjE2m?89aR z_NDlGx<1_{|7410^hobAJDWE)u>WtmC46D9@4rB=XN~XUFtu-_GxDkd@vJo4c-a zZ_i8f@t}s5st@L3Vv;Jy7)qy&PR}xq0T%Z(W7hLzdo@Ag6xV#vYa)0Mm9!J;hVK#3 zHWtwp9uj(u>mOPiLz9${@_?dxR11jTZ)JeU!SQ19dhqQa(lti3IF_g;tU9hmuXYi$ zW5O0lK}gaPH)OBDx?6W}wkSz=f`3@jBk(ouG3?m%>mI$@c#qy$MVAIc^qfy#Vq@Ms zJbZfhhtCi9`~A_;-|pZ1MIN|oWJf@W&f6Q>K|X(ghju&kCj=GV|M1P=&HHzM`f&fl z(NNjAU0Z`tCEyMdO7WZXH|A*#ozMoJ$n~O$Y(|%+2Xw;Y08Pvh{x8+B{+4>2=~HKy7F-2f4vWD(!4G*=P~hB-qOvRt%8q3P6o1G`*;p(Q^>zIHo-|5s<{ z4vzF~F-hpa>FIVB%j(5gw2q2hQcbH`6=1{QDcSPueO`ci>e zq+HU$$W9AzXLD9Bw{6&H1Dzj@qzxfe0WS&_qu`Oi)!k~tm$s7Rst8!Ok(3_m37K9h zhvx#-?24Gd+$LBIfRR(->*?KQcJ+NC%w?mGj#Ibp8nTKmZKH7F1_qCexRh*TRK*c|0RI2^Sb-#ylnpdlK3-7Sy1~RicVDX6T0f2><^g3Sd8+1mGf)7PajokT8KKq$=hVz;O)V zEL-%RlIQ+FAoV1IjOc@KAS)*g5jX_9<=vdo_PGuIM2;5tIzdVbgze#k&HcYORPU@| zg&816_nGa(n}^RoqX^_@)MmQ>wD|n~y^_AD53X=fPn88CJ;{JPPDbm2(6srVj7+m& zsB4Gq+98C?`0LPM7|pPI+{Wg79d$afAxK||@(f6LXA~MNGtf8V=+&&+;5%eoP;vt5 z>!QjFMJ{+3Gp}D&I9UMB6BO2m@d!o_>WYz74;o}qVv#4g)>@KcPc&*R+DC4HY<}BU zab_ZuOVOhfAfjVR<_c@;5%jYqIkKL@CF-W%BMKp100G!H5Y&E1-sjYG?@ z8=aa#oIMv+(!e$;;ewC1+QI`h0N@n={^ZgIl7=8tVL)P7&gQC2XqEzX#+fNM=W@%H zWPBdjvDRfC`t;gk{`jn58r;_^YVXusP{2fZWW^|f7C*ufUuCS36=(9I$BHw7YQCW| zkp=|drESV8w#}JsTy8nTs)Emg{u(4PlaA7`-Pet~7z3U~pRN|Mw_gVhkcE;qk=LEN z9{*$>pD93zf3dY|CT^xvE;t#Z*VC6L&+$%Aa1f1GWvfGp+a?kuP!c1ywsvJ67%u+Z zY9{(vs& z^euUQI4&ZP{`LBZf1wC_YMQXv)=&vfftnkV*E>Y>+anl^I;KHGPI~o9&X;%=10Kn9 z;=d$t8k>;X1waHJi>|@`f{*_2!yo=m`vugBil<~`WM99aHS!qA>#4EjH0g_E%OUAs zM3Dx>NWuJx6m29$$ZDz0K|c_>blpI2&X-y~HuE{PGI%`UwOj$EtVJKPAlK|- zmsG4S0W_Tsey&U7GS`@eE8Oi=*tz9}n_5nQNOcYei|zCS8RaGVX|Lz{Z0T3+pJti_ z3FGu@dj;VJI)(bX+g{C*Qz3$J2T1LwII@WGWV+L9gp2O)mfIy4CM_+V2cqO00(tv{ zPB&ku%?OQ#@F>7w_l3SwbdV1a(u+-J$_ ztJWNNt0Jx=(+P7*FH@QY#3y%kabI{3&lXeC!DU?HFwhBKpPTna>hw|2S9vs#L^82Z z^)6`IJ)>+l-0n*)MZZPZdeUI3MdawO)scXeA8}1wYIayxkrp};cIq*XI}lqDgI$;? zIy4Y?x;Np;vnt;SHoA5C;;wjHyQ%I5zvg99?(r6BCy?>l4Rx^_Vg08e$Unu8T;B*y zvm%!x@hM2to}-KTS#v~ZonH*{Pd;2&R3RR#Ep!g`wsC0g(~AzIX=L$CB0XvMX;D|= zsvv$i!=^{R-Cisv(5Ja3S#R@&&k}JnD7K+apwY!G&|;PuHiBs(0w_#Acp5}doLlZi z;kkSR^EE|Nc=1|cmbUxQGQ)L1b-JIC8-%S8DXFH2gazDKO_)dM&4CeGNJTv}_9t)+ z=iKA35fE{KAHXb#*~R;}Sr^*0Ys>8{a{;iykHBreVvYASfGcJ`lOpi!+}WmeW6c6M z<%io&1&jV$Gb4_n)@we~BA}4YYV-Ymw}RKpW{Gt!g4zgeQlp~^;vOn6ehvg}y2L}t zkdy7QJxSXP;XiI1?T2g}1?zyRZ?7cHus9Wd`-&BmtHU>R`Z`kCNgKv|`t-?kA#EH~ zjR;{G&>U%~mY0E6t#l|pmBDKRehO^^_$`|!8#O&UdD7;YWld17eCA4%b8-K$zL%rQ za`PQfdAIS&-Rf#LK@lIR8^PijkK42Ys&SkSXN>4}c04mG1yHFaX6jX)F@a6;syq#Y zk+;xK4eq5{prpsq%A_kT2^7j}*2je`3U`1fN_r>D~H*zJz=(-54e?TbI%&s2zy0BlnZAW-R`em^qI9UtN z+WUXHcmXjkt(b7E2D9EZoTM&oH_MM0g>{wB*;pvTYZ48mU?*xW2z2h#BN7e-k4U@E zcJmzwm(BouwhT1@I)Lrrlnx!vIW#2U7Iq#UULwvIWnqhh-wY7EOW$I(=UX8ad)VM_ zP`IWNV>hp9%;bbR31S8LX_y_L#LaWb&mLtOkVZ_CNB-+fXUVJ z0+0b5;7$&QhVUS_cJ79AQWNm4pk)Zo>Un|QKBfzH2veE;U*-TV7i zy$3e{;Q>Fxnm|_dF%b@HmIeTEdl>?P>j}!U>m7=t!M;+!XG(xyfW$B~OqnrS5la-w zefQe-F?LJ`%Y#i*tsS3u-KR+drHt;sJUr%cs(>DT9>r6xTv27+GM3|DmW6h89J*-X z(2%rnmllw_n$6%lHi+e{T6O9`Sy=8Bf5HOKzyr4GGm4$?8q}ND_;CfzxRhheUoIv& z-Y{#2X=TK&Kvp#^614@A3~f896eDEqCS+TfBA=NKD&<>Gw>_7)kp$}xb8BkTR^$9F&QN;jdj#a|03xjVmwHg~(%-<)7;R<~>N;vgSW!ijqT zH7FgIa6Fh|X#f8H&Cd^*{lgxmN8iCc4tg0wW>v|*H<`}uj zWy!CJXt!UpDa0bVG^DfQ*u2~CA8{KQUF6(*{5$9bHbxhiD}l2WA+W>=C&rP-f%MYc zWo7Q%rRQf&$Mp(@w^quhiykKGC49mDJ-e;wWp3321kdI`w{bm-A{W$NkX5fDQnnxBjMYV>d3eh?m<&l004xbh^*UU)X=aB+%WECk^DDY%5%7fVtE>zrp<{!xb zw6IvH<;-cR@Eej>6K`s~hT3(dqa!eG88cL@u`@G)OJ3c&C4!%Zhs&BTT31O%RZoB+ z_=S`90|xo~xCxzpgH!jVOPH|aUs9i5L)an(h6@7RkE$z2Z)C?qren!(7UdeW4M85y znCUhYFtGh&TWNvjbKMgS?&Ib1)jgWh)f$@)8UaO+nFMeN6^)9eEs^qfb+a8jIz~h4 zV_9dBsYvLk<~|8nWVbD^mvh@u09$ZB|McnOry~EFV~Zvw_IL=SK@_hJgf0a(c-CLnyvt^5WJg- zp8KV?kqvm1c2)#5oFprxVtDW78#BMr7c!&c20f@lMiwL7j zeLH=2MoQti_n_1Rv})W>(>k7COL&Y6P114?GD0trzD|?qcct)nj;3w$co`29iVHai z_TSpZErgU6V#)8{wLqP2O&#H7N^(r zXs9;WLg^5wdtw}$ht|=vAvAGJD_9`^14ju&2?I^R3e}o<4Tau=?o(U1#>eEHBZ;r~ zPR&Yqg=Nr`T>Jblw?A!=F5Fv@jihR?;e~`7{x8WzAic#sqCz#PF?ty>m1IreFxZ-2 zEtZ`Pmah(c0kDJoI*_sB;cz&*ay>Px%PptFg+ZN4(ect?iY6N{nljlqj5jOLcMOap zVNYeEtYxrHx4y?Vji+II|DZbZ_n!tuBaHe}>TTy6pT4w*C!sx*o=sp;hru(uMZ@#9 z1N8a`+%e5bacrZ5=)^vcZqAD}<0vK&-yJY~!`ePQn;#4lA0YAWM7Z1SeS}ne@FSjr zJ-w`zg~c^!<&%r+CwoS#QUkn4al_!A;DvCx6Nj8RS)isT(w8unu{US5$D+V)M`gHS zOUhdr&286LKscM7l0ln-t=@y*{qeNt5^)2wUPIbJ(fsJ*9 zK9874Nz2kN3*Yw-A5u)F{6Agaf|Uiu-`%VNAEYSM&H&Bb6EM;*(=AX$U05;iz@P+F zAso}Pp@{5wM}rT$-*d@7_M7^=vrteuktOq?J6Z zw~Vt^I{TD1lD>X_BxLYz#E0W}VY0sdqQHPp|Cx&mZHa-%;0r$lF3Otj36eYgA{s^D zOoNHa1-+6N2}#ulZ6y60JgL;?6+M*{Rf;!w2lEH#b}I-B(dBx%B=We~UgH3G)R=^6 z4=E!wG3Fio0h}Bz;g|XzgfCi)Hfp-4%>}&CEGy}po);E-MINxPGlK%XY=Fw4zse>S z#fy5Qmc@W;c00N96fe0Hgi^%Kb*(8lM~NDbatx zD=V=ob2mIqdfN06ty~e#V#MfiPn;%f%~j50RJH0^LChGD2u>X8hXNHT&C~P!^yux= z!CRAYTCT+p!(mf_mN`&}Fp?XGP`8GB)eUr@d#3w@-Uw@QyGGoKp{l0o-~MgDOb$d= zdJIK6pg!C;o4;nU?&5Jp?QkZd7%F;;K{e$&er?aec_1J^efnSVh;~f(rAX%e%U+6% zq>$3u2ll-*FGDl$@h^IWYmQCsXqEJZh|-veLs4fzEg9Hce`n3@q4DG=c7lq$C+?v! zLvjJ6F3`!Vn)Dpl?+^#_lE^ONxeV{!J1L`#XU#tJ|c~OC?_nYmz|9Ss(P`(lbqI&C~^V&4rz1fedc?`;l;3Cfi z7kMhkwA-1?K(hftGJOklkqlU_@kP_Ay%36yY}KB(FI{R6+<)l{YT*&cTyT^i7Hv{I z$S)qr46c_zIYMhd;#5KAnmEpxk?+bbZ=_~Ha4Ntg_YMGo{4(*F$Xanj??Ql2VT{bG z8+SaEbGhs^Mson7>kAOmjr-1}YketbZJ|Li#CarYD-`L!fDt>R!oP;!BAi)_2-Skw zimKQvvZjdgUQ0g2;ViSaT-`@G1;Xy~>!(c2LVJ%iaS$=M14d`@!irQK~k~ z3bstzvT7HJc90;Y6sGXxlKpGCG(1RSaP9Nex*Md*MnCAD1r?Ghi@N4Ye?c;(lmN}7 z;w|9X1%%!qnuMtm*sl`uHMA7mgB6&syRnXB$au33j@hsa#S(ff0oe@c_b*4^a^Dfw{NEshz*%{%?Z^eMLOKvW0cPLv?$soJ}Vz6?aCY*GOr5eOoCMcz&W?11VI)Gal2y2XF5f!>g~3Z|-*MHb-DiTaYIU#1#QS z2XRey&Om&r&#ERj34R`@kRo6Zyr6YZ9@PKv^7Mq)}UJE>m`+Y(!OK1hEDjydAmA$m=+Koehajli-)`ssR%7SE`xq*S2xOk{D97Kl=jl8SmJ zLEH!$gj2F}2X#D?n@+tAJOuJxh%EOq5J7^dA*8N7Ip3zu==5kC_%7<{prf6R z8Szmn|2mzT3eP)}h$mhflpWU<`nzPZ@L?YxQG3t$f zZpIikiIg?Z20|g}Qd{VLXU|K+UV)z|(pG(0Aq@3wP`^%SH}nXIsdrTdnbAf!VB%oY z2(KreZLY!;(La{Vqhsu9dbL0aerZr=s!IILpj$NR1%wx56kj5#&wg`liGPY~jiEM4 zzzri1Dh9zlW{!An`ypt_7l0S;rb9s6-s_W$@#6#IPY$%79%z4YpnZ6Jr~|nNK@!NZ zC1~ONABQK7(9T$d1?A)F)Ix&65Fi7wW+N9v2p4X|;T^ryPXxqzgw|c#$J~{plRf0Z z&p&>K`}sZWgFht2AJl<)z>n`A*l92ZJnpPn?HeRmD?9yU5x~uN!5P*D_^Uo&H>tO; zCg0CDgZwi~+A^SLly3HPLUw@Z?)CAaw7wWIfUpH9TwhG|l}(%Ub3k%%F&mKT+E0P1 zz6_XhKLqv_m2$_sV??1pRq7%cX3U=>3S65j2Y5uZH^?HZs`=BYno?E;Wc^Ygf{88*&Be=&x9uOhrb|^3S1}~Z% zJZ1N1la&WeY5fUM(82RxClAE`O9Z&=@MaiiObs;}_c(o`NOn!_(^o(S6B=h3Z3dN4 zo(g}Ah^57AN+nG%|Lhu@;Go@c6HG;i7@NcfGOIqlG|XF6p@XsPGjF+ij`Nt}`}r3E zvdSz22SI%E<%W0?|DVl?L1u_mq^Xh~2;PEp${?TfyR+wmG#D#7*~7jVV;;H7aTMVf zQ#aYd`16iL4&9GD#R^ZqXwtpxbiRcIc?wCc*`J`*>e3pqg+c=r_xQ?jXI*;+=tgaw z2|m3$7hM``v?lWIk^VX#ic(jWKsW0o&{;}Y5Uy482wL~mAmBe2ua|AHsXpZ2lS|^EV#F|JKNFGofE-ZStrd~O7`>ce8}_1LaV3-yxY3E@ zvtGoRI`zmne61O*@HyxmqMP{c=uOu3ah`~f0})I_g70^V}0galzN<5F(04NqE~LA`wzPGk_MWJ z_{pqEb$_5TBVTe5VoWzqlHe5DBm@i^%-U~lP_ptVun}LSctmF-`a4A_to}9p@}ZtQ zPDQ4;qSmANyGzWwhnvqo{s9J5ZiTlcEG`Qw4w89L1Rwh~uGdnfEKqw7xU^g3%}a?! zjknIYeI6hW3g{OB!>@L*3A<9h(BxE|_FV`*fZ~8j>KfjMD-n()rY?+-LuM8sdvEq& zoG*HUB1V38OY1K(c%xH#rb7cvLZKhKoJU!4uc*I?EWH(=H(*abkY_dOPM%0|l=GT!UN(Q5w#0)}4R1g?H!t73C zF6U-YU*_GGB#x!Yn*5O5b1k0**&7o7{@ZQcHU?z5n2R0o|$m!}SmANpWczb;oZ@ z;!kqP0L*7gv#B8$9W`Cw2z`oGlzb08`(yUO)h&{& zO0sh{!3TNzF4tVd9Xve7O~f#Rci`Qps$6h*AaqE-hXUgJ>74rUb`JNACNh~Qid*PNNU5#(7Qb{ zI`lPa8RxI*M~C{7DB5vJ2Y~&0yC$V~?r6p=bJ?)tyJDLH@fmUdwoiIk207IHf!lNC z=p)z(>1b%0!gQ(I6Z(Z(x|^l}n9Q89skQEQS5FA1&m>JazKBQUew_$$O;N~p5jH?) z{ugEi?Cjm}?EmlPogCggX9MTgleK4|SX={v&L9suMRS^p5(V8MV*loUMfuz9$IqYM z-s2RF#0Kh28xXTC5juAeX3)o#xe6!Gu*mged~KcoC$%LXX9SNi(GYYU^l{deHiW!0 zYfxUJw)t$nMA+({2D6zoP~K6tC;bZrh0WCns5uaFQo4;QA-unON%&2?FoHmYM4JGG z8vF&eG90cPn@T{ALr{1x6x@THCaX?)fD5t93B!-d6t!TI(_uIq!q578E|z9>bp<9- z?F$}^n+xND&KT8~6&2(>Xbo27^VYr^(Ax~^f^a7nM+M;M)h+S3!o|Rfq@dT#Krte0 zGe|_rUF{Rk+^)kB^}}ly^s2yCJigCOJ^GZxU=Dw%?K&+-bC|0k)yvByW^*PLSSBRW z?Gn72QgpSZCQ0=N-TusOi-7wzF#U5G%!iUcq*9V|0bpHBZ2mfy!dd0i4)CocW1^=Y38KSTE4t;u0cp0)I9||uUV~+Bl z0lROdua3SQ9*+<^RXFwNB%ZV!)_Is9Br0tZXKjk!KE~Pu%Z$&)E+gisQL>_#JNg1Aj}`N zav=`E)gQE+Vq>QhMQ*KErj1gkzkT8X}H zhagXh{D{%88iBiVWw%R&$zTyFi(M&5sy;n+pCCwVL>Xh?n7kCD)`2}* z^hU~{S*K~jkw+eaH=o`;{2kMuEZ}RNRrbXyH9gr05~^HChyvBoMJ)^r=a{;SN$_#` z?uGet!S7nRa;lyhyM@YHnG7;!tD5zJflMzalsRC2w;#50)MBXm0K?6p=7LAwbn`tx zJzZB8S+7#!Av%hGHlVV4W^F*U7Baf>2AZzbm_Ylji2{kGiZ%u$9y|x#%fUV%N2JDP zkv*C=9~rm3Js(E#=dX+#aoqF4CjhGz&IRgNBE0VY*O zgG7H=0{$CGzv5w-1gk`q9(GNa-eS56rMldqh+NXmgfo&<8AZ2l;wp>L=G~xW(on$} z%BtR|r)n+_!e;NK2@Lqp63>0X1Q9ef;qP~^nTp|z4An{F_}Lw%DaqIk^J_nq=NzlP z60yM5Xv{Y?WmJfB(B)4Do^LIZ1%B)4&EEwq!x$H&YvG3Ac~%ij!3X4DjE6zSsqiTE zzgJhjZt|bSKD%dauUqZ0jm@e`F9KgQ2x?z$_Alq(heLouo%1!01-CX8spt0A3XiB% zpL;~7a2|p8U66w4PhtLrG4d~tQP{yWv)Bcw|EONsD&PpZ;|R^qN83o=yig^I23o_D z&6lhD4?MkK6iI0+`&zLfz5P$Xzk=K_DIvYGvgZ?gD55x0FZmJ=Q&2YHpPXrJeTzjB z5^LHVcL%Fh)HOYjxFa&xyQh$wam7qWD3Xj6O>R|1CZ&#mZFm=c=Z-*Bj`-%1b-+e2 zYNZhDehFX8yNs_brGay}PN0ew5KXXCC|GI>1k8lQDWzu`@wR+?Z|z*E9>MBrrVN<= z*Kwmth#CXHkY)m02bX!fj;N5XrIUg?M!JHbiAp>oQ_G5Z2x1P5P~9GC9AT8&Vb#jn zffO>0O3~}cLJ@$~`WB$s?Zo^TqOq8xP#TPm+t1aboP9Y zUEOx~A1Z`fFZ~Eh7Eu>?1X0e_H3W}-r?jxyNwbQ<2q)EOt6Qo>8B?G|$NoBv$;05F zJHq)24z+Mcc=qC-aYsmZ$y1|o53l(SP%VH#>pxzYdmt~6D~`fN_1(cdQ+6mv<-Iyb zHj{JM9(bQN&vUF9b1YzWcG;uI;wr(K6jP|(AT@Mcs5goA*d5|*CsSo^Jo)z|q8$Sg zU5Hh=+(kfT-G{L6m&{A@js9U+Bh+S_%)uq8aH0Bq)nw}spYICin(^h1@;L+@B9wKNj z8baqnu{&zUC^fEqI}Zpl=8VQvmTxbC%HbxsT(CSjjKnJSB`eog#?%_jHqWjgCN!8R z$DkayG#x;DO7YAz|6|MY6UM$2oGD4@`E8N$2O5^;9HI(p{A?x{ATXOb;wX@$frwNE z$&x#|mlQ*JIfLZv&uA6rqz&!oJ=-q4j!f3whOgSGhI@s~9Rj=kGJeS)P1zTnIVf{q zRAT(i_w$t7m>fh=Ms`lLN@RvC0cM;Zssy6&_2^N?>d+AXD#F1Em>rh=o16KS_Pn^3 zeo6s&Sn}l^R$E@)nRURy$ng(Q%jJ@jm@8zt$2v3C*vjmj{44PIAsoQqaLom$stST> z$GrIY!_O)aKA@d3kXz;F$CGR2E*%T>GK)e1xu@lgON*w6cX0>oGi;tJ$Z#Xf7P` zo#6`T1_eDVB|viG> z7A`i7AFBsw!o=QKv-3AU(_{s^oA5bXn3F&)W`mR&_WLI6xkpn)XyIBfIrjp=jg6ou*q-*XJgb)LBa?bT?_1J;#aTb~kLg9faio z)~lLH45(;^XfDJ>01lNyJ*oBYb(coxEyntGxCY8c)bb-Nu-D;)_cZ<{T4Cc$v+N$a zk18aVr5U$O#h9yOMaVXMvEXq!Ky`Sjd}*gMFPXCHRMS;&L=!Ax3;`wtqf83Eb}+2_ zidB(~cM5TF10jX_Pbd>3QNvR|9L1P*XNlEf$h{MIW&dBo@Mj&D&D ziaSMX0N6Ly0k1EG6$t{UtRTn>>8Pw?KS(gLg?RIFev9(Mg`8x`$R)=SG3`FR`_uA6 z1M6+CmPV9NbKAVSZEmRh@`f0Lo1{ozcTFd{H2AM?-haMNI1$OSpg#h(T~EAJeUGKF z8KlQBMsu><;Ir=F=}bM3pJ6&N7@F)3u{&kZ1Azj+7dHj6D!VjTr>QvFrNrO%=>{V? zw`=&xk`EQ_0A;1SdUC07PYDx5=~3YgoDI(lQ6{PEA$h)kz>_VE@Vn`R`Ix~6F!@v9 z_(MGsP(8e6%nSpSuD3Wd?9}H08NdaU&;%;y0XbAo2Ox%>8XiilT;SdtZsBI5zLBR| zwgwo0m`vS>vnk5XVCplC=i}TOW(Ozu&N6ZRCSEP&;QI9ru>G;r;rPr*s#7%h{tzL~ z4rpULeTLi=dB#s|Ntp0k(W^yfBfOC$6ymREsUa(&Edk1ap`=nimF;>2a&5f(>Cdw_ z4{s*#!TS9O{}8#tT5YxM9n)ul=5SM4A5##;1l@A=_Kaohv-)R{=a?muz8vleN3J^s z#agN*)Pw`uy`CVT!LT19g~%e58nq8lvVq&3om;$yq%5*pIh~1KYAQXNSr068+m+#u z=;ZbE4%x>26~nOClc!+rw;_D*^cEUHDUn9be)whA2cYT1O&QQp__O3XkH4JqYw_Rh z6+nbY;i$5p7U5 zMopL2i!0~?JByIEP7IxHTV#(og#8&=mV~?f6%mVQJq8(tN~Z7?2rZ3lqoJe745KOG zvJO+431227rLu-iC(}zW0s{e#!Ds4(5I5a0TF8b{DuI{QcK0vVVBPfV>h%A|-~Nnh zT%z}Z$!0`kp!mw|N(3_4f%Jr~@EuLYc+?ieMBZx?K*3|LW-?{`F)Bul#mKq6OlySKf{6mPfsb8|qzLBx7loeN z{aLB*q2~d}A=EN0w;}xwtXD(yp*+nXB1yqH97IbfI9a{JQX5;I*Z$z|m;{d-k+G7t z84yG=Eb8rYb&lyTs?K4f(oD^;wuE8rk%T+y)Ga+|=lE-QNr<{Zfc719N0g*g`gn%s zBr&8oc$@1xcfvM4pDq`y!tiQ#Yd$J|A-K>JBQFiOEu9<7VaVwtB%w;e001W^5+K-i zXUrG-07+y9R;aT-)~+c~mqWkrtfeq`FW%KZ0BBN*z1;|m-%RwyzY8c`y@Q4AAwjz#w5W5d43c>h}QG( z|Mstg;jszIE~fcG-o~+VKY#8*>Jr4kFKX*6>E`ZY5!)`#N8htX0@EY@Bl2QDKwZ># zv$AVNd(~aMx?MYW-0hmJUNMD%_UO#`m|io~knzG{hN_pWr^snLK%Z?y11N5LgDTYo zVT!#{nGoHkbqg+(x)kfs?E#z~{4`$!I1|K{jRIF`fgnn+0d-I#Qj)j@RqAin9a>0t zeLxbF^77ObKRC8)rY)Q#Ru4I?TRWZO+6!66z?6DWi#>bUHv`24d7gX>`N9 zf^z;X6A>&wJluc!@aFxiH-EXm{pkutFO6#E7gR{`cAaahl2Ph+e7{T6&xy+4`f4dcyWLWcxzrFGj z3nY3!J|zb@@RTF|C98WZi~yRGulY!a{CD!T9g#}JG0oK!KGFE+ILND$3GH<5)B@33 z)>;Qj1xH`MZsg*G8565msj1pN-4IA*#?TbRC@A_dZDMR=?3lS*_mivA2 z+AfR^c}87_w-b;f=`oXsXwmz8H}Mdr7}EcX!)m%P>b%MU`cj)f4^bF4L}An=3NZX7 zqQK0sH@gP~WpCT2}D|gKB?ARbS%MoW;M|q8@6?_p4DWr*#eI zQ(r38Z_<{^Yzmi}By0HbZ928(f!dQxX+0~!WBTQZca`sz|c{JUYo$3 zF5RWu(Njg@5kiScJ%LSe@Y@^-8ac#!vZ42Y@S)NACbEahnGbIYEa&_hwT-k4K|_1` z?MC@rO`)Fx$RcFG-8P7+{bM(lRs94=q-8?i!w3 zFhRg5)-Kt!?$)db<&k<}%zcXJ&ay)zW4Sz!N@BoV67O{DCbN8ER&>yCd2?u)uV7$9 zy0*>h4sTeX$b(~Sg{oq|#cf!;std=^G@!%%Et%tdAwW)tFsig7o&D53LkK#Q$TzP6 zQBWH5k5Vs`4b@Wuvhh@$cf8HD9IpAXX5B&I(#1}z@w?jJ!ilwXU}FvYW@RH(ktbN# zkePhA&ibyAa0Wt*EiJFb7&ko$D}@ZFq&N&43~jAi>#fL0vvk# z0YOSr(6X|{eZBo~Z*xWb?aj*@C~s5ZXy`W0-LmbV2ARvV+D@17l!HZ^Du<(dNriHG zMb$R7KCaf35gZ81Q<&p4frBc;6W#p#WcuefA3of_$EO9EWQ;LXQHv#Ak>$<7B5`60 z-u)48EgC(E8Shx3TEIUBEL8$!hPiW3Jx?rF9wRW|Uk3j%xPSli{os-3Kpld5fM0nQ z2H|19@MZrPm@(q9c|AJ9-u54ue0EXL0khx>r41~|Rn;YMqhA24cfbwy>Pj)KP)RSL zW`(G?yeqs}Ji3?ptj@Q@%kW6qCcZcPpCIbBBlH@QKq}wqeuA|@*~loDQ_#T90Nt7} z4$u#?P{Kj3#6xAP(2yU$*?H^dUUc+6c=LL(xY}N36z7ljc0Ih&%)2cf%aQf?4(3H% z>6vt#3M++Akc>fa6p{;&!c-A>Cav|%LREYF>V)1UDGcwL$n*^a|M#DF@814}dDfTb zAXPW;h{YE({Lrbk#fU4Ipb4Bw(c`d2f=)2V`IsTl`^nCzFdqbc_7i+COYXqLbAwDA z{5cs|*^{=}Lm}@U?(W|{d}I}Ei;av15~NW!6?HVpV>rvwRFu&GFrZa#b$xecm5p_; z^J_C55$`DUJe64L_1bH-g7|?%SzK0}UgCubKFUS`huiZR+sRcrl1N?5dI8C;U=O;s zIxqH>akvk$xOy`DP~nNKd2Yg@)P3GAm?oQZKEuHCm#qL_b!l*Ak+6KUEgRH3L^sE= zr1OM|=4^MjYbrtP)5#POYh&RVq$%gPJ#={+*Y_WzSOW9B1@E$Z4WD@|ZFQ|xEpS#= zla=})k27=SZp;hzze|Lz(z7SR65)Zh8Ng^FIf5ZhRv^}9ETO)5f4h8DmsX%CO5CX7 z(*fKefRv>!smv|UZ0`U)l)Cr`t{d4siG!*8s$DP|ZEs+l z44!@6k_%|v;ThsaoCgm?bGvq?2p&5zIlv?Fy1kk)b3dpc zvh`;t(sp>=dg*|ILlARRXaOtK0E8|Fz?3wY4dS=(1Nx1MK{=tHTzrJ(UreUmd;ZKal1@@IKt%g!u~xz z0ZE%{7L;hd=+yez$KhYh@nV8AnTeNO8*xYhJ&+&CIk;L%grn%wBhM*nF)7J01U#6W zAYyWty3Ml6Z((U%-GOtcB54TJ(UbO>oHs#^lpzPk7EJKQYSpF38laO0 zxLaNA;CY6-m{}w9laO6*#m*+461J#EN*2JRxm?hWdBM^htS|gc_^HET{u`EYDIeLZ zaO$}c;~rBo5#@VQ(b=xrqPj;P9mp`bGk{Z%m1@#PRzrNnkgsP7tCdCO9esQJdboae z`7-|IkQ*k#aV!eJH}rb-60q@VIRje)Ny4JGQj4}PL@aJJ<7P_q!po#Ik$+KZ~ z?dOfs1zU5xmK!n@@#x`O1p~q2^+7) z#8$Z!1N}QyE7~+WDGo3XE4mPzi!u#aqvb;NSUTnh9 zEGK^SieGOQ5E|@2n^PcDS=DLXhtG=R1SL`l2o=r6>F%=QxIx^w5Cct%kg*_XTrLb% zlr0WzJW6NfOCUxB&F}R2)ICKv2nRM~L)B=GhfYf#5)!ei!M_5YY1QR2^oE8$vyn*q`ZoIlsd` zc*SZ&B6h$s*%(S-F9F-_3G$|JrX{>uy&9k_zX1U* z>GyA*iaQ~IUtL+ExqltFgymk^Agq*{UjfwWb4%Kaj?`P9LMmEe9VbtfPG)ZNSrST5 z55#PC`ivKYTJTj$^Xz*p+-Mz|L<qJrp97lP;VAquqB%#A>2d)Q&2;fJwm8>}PuhM>NH8`Fd1&Fv_v&86nay;lZuC^9S>O}&3L$D!VAa>cy zsp-=S0{fy89J{^ReWE2x3^1JzdvYqc^9#B(yfFXCE`N4XC-y!*eacL%*xXuUpu;&D zPZ6lv-OW}7*4gfny__2AD=;|gPxn6~pMwE9DQ2jRTURTn9S}`y?rCHeexV<(ZnKai zzgd!?vP!=Os8&UUw65lH(DD;imzGa--E&&$qo6;gSSz9%aj}j=>f%VaGZIe%cknsW zk3as1tO&cm|8zgQ|Kk9RPccTCcH?(QQjtp=TGG;oknom!G&xN-GhUlBz)#bLCY_c# z;A)bsrqqcQEF=Sqhl933r=Wl&b3J}m7gt11Ysdo+0hf67B+MR^8A z5**}a+lgm0Hd3LFSb>~+8&x&Fvp(u9^fUq^c4eQ)=8It z3$kZw3$M=Mv>~r`Zj$-nH;c3I%u;u>I+ML$Q`ITLl{Fq3(Eb^t$M$qYXGEDkvf@D0(%{p7npNKC|30Vvx@{8!dbOV-G)79}2qujNGKa~!(K(}G+(3s<(GEmg zdBg>{%#+9YXb0*kNs}k%OepeHm5F&2jwev$K^JcZ_FIHSZk8*!b9{dkKd9=?zyBMM zuneCewaVGuT(9K%B+-!mm~DrUv-pr7K7Rhg`+Hv}&O5U5CA9+34@JiGO?5)PG%TTu z3wOK#w6XSS+*dbi0tp_;O|)`w)2XGS?^{v%4C%HEzK*}RIizQRZY+2baktOg%o|YM z$;pLIiCZMyLpVHc92})a7(x~kxIm(x9lwQn5#$1rHbH-JyoL}$AUe0W(Trt(dvpNO*X${X-APD2v`;Wn%Y4e zoqXHY3t4sb&E#8SdQ~~H5)=0h&{v3s#gye2+Vw5vCt8GAr%rfInWf20+EnZ+Zbr5hy2H((9y7`)7m*dR(uw6v zSDGRm34!bi6S^N?VV%0iOnr=sh8ZkHMJHB?=#2jrYKHDu?IE8Hty7##`*~e&{edyM ze=nI5LJtl0w;P9}!qIcD72}R4^xH{^cpraHWwBP#dj4kNenT+lHywPh+|ROV-pH28#NkG zA&zEsOTDcb2cf%wizPI<&?4MS=U*!*K2VT0~XA{mn{bf@3n?BL9Ed$UA!-x;=f=nHBo^JqNt z70nIRl182vh^Ro%IeDAGXDoa>N&psalC%wbEHn#PF0O9D_eJqa(BCuAUqIg)>Ki#= z;MeQ*Y|u8?!6`nsU;vsEQw-8f5KhO0Me8+50T2em%e+n60SzJoqBOU~viYNfgDQG# zD7AkyxN+eRhxd7}Zi$r&*YNFX;qK*hj0XNdp0YyzG6Ii78Frf9{-it*DWrFLB7|fi z1s@js!JlECRK-#u^%cLKxq2*|qgCaX-To1DHB<5r=5=X`PE~yxpQleH0))%thfKs| zZLV5}BK@2>E05g=7zI!d2 z6&IO|qRt;uiVcoPJ@Fd?yo23phV3a67ntfDas@La979K(CBXn0)DBs0v!SSN)}d8E z=g8bVEm>^`j)tKW z7KP(kz6){rL{JSO3IJ2P3=FMK)^Kbp^hA9mSRLeKy;mD2E(xp!lsQAOW_0-Cg_h6G zgyNYG9Ej-C!%TdOB;BX(8b)V;)b?tNm1T`$0)J;O>JFo{p4-~h+;NqsXKEcc>-t6R z&0HEZ@t%Jxx1qk%{@8U7`0g!=MA$djg&vde6n@|UO4qa4B84bE86qWfGi#ZOr#`Qg z1>IgPR@f-6f}Lb@wZ)>vfeR>Q)i&n}50L5%{#E!&G)zLC(omu;D)hO5!VETL zFmUW!1nnXb=yHoXPMeN-__2}tsu*yIvbfMoEbp!|_m`R~@UE=vkEOXQ&Gb?J$d5qQ z?e_%Smz~udBb4eI$UM!mY}7o-paQ=s+uL?yN^Y-ZvE3BdTI}K3*Y>E4Pd2gH?!yKG zRp)H(h@yZG9}=FUmOI@%4P(s!`k?KKitLZGi1iPWq+Am%7j<`$}d1%)JH7#x_0K-AxpS=M~$ z8pg=8KKV{lO-=L)<-S|t06*cFMKjs~A-wJC8Y?P8$vNZrmj6D7csj^r$bth@SFNM#5=(GCwk%7Eg?Nd2{jg%&0y{M~ccf2{+sM8tM>4 zr*YOm?*w8He7IhPq6I(G(UM*Yn!&lm!gQs69Z2IjHv1QY;_`(;t&}TQTa9RKR$)MR zIC#K^r^seMnVjaBywA@^j79%{b^zPkWEks&Ll?J(4-9f1c2gCyT zHXZubtb$xT8cThiy7e*xeMrhs=PzEp!Vev*ZnGFq?Di*8uHDkGWp z1K}rKDhGSIHKz!6!(Slu00ZJ4c&Hk=9{%pxi)UvqV4OU8el{8pPoLfYc6|K&%8rRy zB44Z{u=!kO?GBjW<%Fz(j2-JEAacS5C+&v0tdO2lNz!B`=ibhNv&f)pDzMeRVWIkRw9 zm@rVQ*u{c(h+Yi4d{W5`ePE*JimT&tKL96SI9qLQH1cb6(PST{~3=|3FJ=DtXMhY&@PaTY4 z`;mo0;&{;}Hexy~IF*{#t4BC*x?F*RIg+~LO^hPKf9AOelOs;)wM=6ETU#Qif_B;5 zh&oZ^jT=#HQ3teYQ0*V4r7?|Y3SITjDr^374?F!)y@o|&N_T75(Xd&Mr+n&xW259E z>)TcLX}C7MaG;R?#NdbyDe(mwW`4t z|9UM!UA6M`PTDERPO)`OX8Ih$SZE=hvP*)U_lpJOh8j!j z1QA)9!^W5U^tyCn!C|VL%XS5Z)n!+e&ar$vmUjD4(LBroRqv>Ns754w5GKX*6;Msg zDQ1*?=T%OfLo~ItKrp>Qk62O2sOgGlJz@41Mqi_Py?lQFv&r_$s56T0Y-4_xu+FmG zUF2Zbn4-|R5FO++Uicx<$#^urm9X0#01||%lt>sNHPZPCzF3McrIXcwDlGaJU{YMK zE|=5oEGaZCe3rZe)wKGs9Sd`?{r7r&mjZVBD$x$fFzf9RvUj=9GG)pljf7lq*(;Aw zabSUV+TJH}E0f;1B1J`WaZ0(Yb}(VdxAu9Vals@Y_8F1rBo^uWgQi>p3+m8b4JvuDMXAY9}D?o1=PGu4Kl zrpxz+t$^Er+3M0baXjnym^8Hhr4uCwvUH7iRfxxgy^9s{>NlVlsHq%L-Fiuz7VTMC zbj(fq!t@AOA|#+j%F$EuUSReb9Mlf0UPmOxhiqrZ6h61}yPHK5;M48aG;~fq8Kvt! zl^VxmGMMZkQre1e$xelL!$!vtzxaw|6jP+7dmPY+XHaIbC7apW);{v7ww?MWGcF^s zQSDS!9Ae-@ocE?*9)6YxJiPe;3?fv}pc?Ep+j8yiIj6#y#+>VtH%YgsW-Xo3Au`8!Q8h2s-?lnI7vm~p&~&cKxFt#367?h zWqQJ@T|mJ=DD6+-v(0O(p8z8PI9M``vqh^BEPJ#M@brZ>nZ0w z>JvPR<xV4I(R$yFaKq5mCJ(=jdCGXkqn?Lu;w8*A%n;c0R%QVu;}zL zOT}>m6JkKA?J$2|jx%TK&q+4UUm| z_9}&O1{porl@Nav%e%Zm8WQC7)RKjO_xtU4(4lR=V{RrAHQz4M+}x!(WGRmPdf;}S z2Ju+qPn)ttF+mM)p)(L|k&>Bu=n}}`>Y!U;qFz3#TGQIt44Kq~g1T9Fk@696A~LSE zs*1A5)|{#)A^h9zg{|EPj!-6+F4gj#z>n3`o^_j+ zrl9Ag&=a0e4TeL7xpZ7+H|Z8;|U^gM4VjEShjk&tN019(n!d+c?DJr5|-nxI1AjHdVn8<#o^j&b&tS7&h(OZ zYure1$bEV=p{sHny>zphl!Pd*jO)bh7{b4XBQhPhf(I&FMfHIN0Huwup(P-N78xh# zwl4C7i42%F%5-RYF%&i|OHf*Wdb;%mJaA$^Bx=UW=T=Ij-U=Y0i1zFNY3lU3dTRk5 z@zpY;e4Tzz9r411y13G@(WygZIyD*NmOeF|`UIUbH{>u6Ku**b=@y3jAtqnDaD$M6 zLu~xItr25OJXDIS8LELM>%>UbKxcmHPcw0$*-z;;q1{Jz%|sfSc71!|v;yA)({g{o zm6$pXkOA6ZX^i{8zv|cO2m!)(+3En`3}^hu{GE{^7W&R2MQj8304*kWs>j&VjhMZ< zMI0r{yq6H?)GWF*oZF`aD)R^rm4?nRWw?KbHZnPUk991uUdTS&A)0(->Z-pOIy1N| z4$=zPwH8`HSeO7tUrQi{0qNm6nvR<-7QNXEzOrwW9+A;FWbr9DgvrYc6coU%P4nb~ zIz9;bi`eC6F-1&xP-l%7iBdi5Qx5vf@R`_}^T%Q;+EMxv;II^Mxw=J0up>iTQ8#IH6gjrl8u_cx8eW5S~t0Im|IGk>(A82m)D8X=PJPR}w z{7Sl;A&oh#C68tBE=OoJsz+PJ@C5Y{;Z?pphEzb?x@AyS5S^ z^Tah5K!5nrII%q`CnpBG}$WQKBUmlp{OH0=UB%`V*ChHkKl!(mdO#loGIH1!m; zjCYa=4%>!tfrCus`UgBA4J2!~`uy-VCgjB zEgEO~G*&59bSZQga0z)v8}pTOCn}NS96j|qF#jXxo9}Afxx+2WZzFdw=xgS$*WmHT z&(V&RIXS@4wOzuH%Mb4!f**|I&U6V-mT;e7hpXRi%cMSU-@L!qIb;6r zE}nriz6Bc{k8i{7f3?24LvpG5FbkaEe`kI9$eEiOf=cS)+L_d+;nXZJ3R-4^+e2Y2jUIg#$0I}oy9J0$K@DJKkD(UfGfyH4KDQoD zRFujy8W)^>4!nj8%qDz$aFJSd+&4VNFEK9UEvr`TEFW$4qK6m4s&V1_9*YH6D^i0l z@$Daw@ZSw1DN?$H?4uU9d4F}rEYm=pEHn;T^yvohfwCIitPr@r^WAtZ8_Efy1qe6m z>1;o{p8&A_dcV2<@#Diii$Q<>Nz|z5gveTUr}>8w-`u(h?yz{iz# zUU1~+Ih|giVp(I%e}*67ZuzRhPCz%m422$GR)9)I2e+Onmg2_<7RA*ISYl*Q-qn3eS+PFTh9Wn|0H&iLU8N+Xr6~bdBi9V&5$_zm6iP z0Caz&mSwE_^q^q9k#7xt9?4hJ0io^HEdf;*JQ`#j`1d>JtLb%T?heyaOc24^(oWI( zH#D8Pp(3v)M8Mgix7ATY){VeJ;1xvq*M(*zn%s61a=M4l5mRvzk&{O0gOiFCWRI#R z3M;4|J}7?MUPGM8382;+BsIeqIHZYmM=C9M7D<;rapHxtB=>W-aDpDO%Y}w&gxF8< ziEvXAo{S4UvjO~4rO|Y0t>bVRAd8jePx}n|lf?kqAlMC8D!zwM8=!-OO)FkG!ZtoC zZRAYS^_@8#YME-9Rp1f7FSHfzyO}i{$Fdis9QqUvKT_tFzrC1J-l|WLS;G?Ty7w@F?FU%mi}j{1Y(% ztww|R@dS?AaCP{OPJef5EgRDAh?;VHX83hrf9f&Xp|lnVjFRuf<~yc@Npp6|lgT~g z;XT!_)NMd2SD(vQnBZ;$S1ab6HyN#T4??8gKaiEX3hXQUzx}u6ho2wbe0Y1$Y|rCw zuubH0@RJXm!=bYs{qEs+mw#Kl|M<7*!+U0ju5U;|execXy7R2&7X6SB!cF^I@sc|D z^qPUUN2ER^MTj*csZB|zb3)nTU_3Tb%P$OJhLmh#p{k|mC^Rq~Ka)yGbeT&DPU(c= z8$35z=gH(XO|Vh*%0YKj#sDk=ivZNbs)C0GXRL z%2oal1fck&@y4H-%=%_A$o;x2q;-5zlHB=qxEV)mGDjRuDKHcu(CNc?aMWF& ziCoeoTemQAAIet6MDXzz|qOdRl04-7TEA2aLiX9YF1*wCvIB33aagR@6wT)wM7Z0yY%cbg&KQS{mng zT{_(2dkTCS_)Kz|2(2YHh;8)@r({7=c}^y9AYbc8CW>=Lb6POsMbVO**h~4^33?)! zAi;)zchjj)7g-S_y@UsVo-QlsN7bSJ-3A-tZFYc7{itU)+)Fq zZ)C_bY@8JA5R1&PF8g5yf^-2BfhHT>`(fA#4i6c@T(IANxWE5l|F^e)e)DM$W3}^9 ziB8koebC#g^B6k{K?3io1c|0g>!~$PcE(YdsVW`c7<1yLizE_Y&JKI2gay&FzPbHS zZ$4`rRdl+Qt$PKHsihfCnO4_QG1%9KG6?5@d<^D|6lXob%J4QY8cDwZ@#galJrEKo z&tcdyQPKf>C@Myc!fg>C$?t>;y!5w2bSLc8_8+;j2^?w`Ysj*2FutBZ?{WoQiIW=g!uQ9WXn>$-6j@wiw#|VL+!c}QHb(nZNMtCwSjG?4J$6_MhaC!P zz;depVJk=^tuTTz;%1Py8d#?6$w#?FV2+q0>X=Tmf>dnoX#&)yQR{$XqJJ=0?K*hYZh>@FBr3`W4 zd!_E8Q!g?R0L&p?2zwAQdEI2YMRy8*6pUleQx}qa`egL#q4ce~9*-6$U%rSo=(r%~ z$z@LF5m|?Jzs$Wq4J#%MyC@5V=-a7wuz4Fn2l9i55Wj{n`~}qom_~&)20p{T2WtBH zUs-YiAg5364odx|DR3psb0Z;fr47b30LWIGNsyhdi&GEiDDfrK{{M9BqLE9h>qm7s zF#{j_Xzb#nH$4`+NW%d@^lEmyzQWcGkFTAd3VQ(qeC^O$mXaj#axbu;=A$y5p1=*S zhMA^QTe_CJ9#16{E^x~jz?ZM6u~P2Brb#-#LDKm|6u~@G2$?QtTiBPK0Er)nApv=j z>}qhRL%SPvfn`AFo3^S?+pAAOVKE0n{}k$AtClof__409knjoVo?ydIGpU<34;`Uw zQAa8{1I64l96q_;$a+|;qND?y6YIeA5?00sO^0>b0`5!Vv9xralirc|Ng#2_0HM73 z0P^CJHgN*{>$6wlY^QClx4+x3Wh;fz+2rmj1db8oX)O4~PEc1I!^GjOR9JXKO9Yl7 zUl%HK(wVYPZ!d@sg`_Ggs~WTm!A8l`Bv+EJbLJ;!6%5EOOgxDGb(myAbQ?1qJbRvyGSw2C|{7;35Ueio9Hd%sX;QRbR53L*NH7w=Zx4 z6DD=<%HNwIf8*8AbIXaDOrkW6l%PzVP3zK-T4UdSkg(+W7EPH>BiS zq}M*An(B6nVQ8wc)-1BQTrqG6`y1a#*_;}QM}qx|5!LdT9t04DC|-0Ro*yTfT581& zLEPwYC{3rH#yX9w>uV5L8MBb8dSbO2n?~S>T>K0|KV^Kdc*^%*6)=;KPwZn@-)3mK8rJO|x#!oax6rgPfF13K0WOV}VcdHiSO4n-&jrR zYYf>axHF0aRMG3^!9}e4lJtaxDk%FBRfQ2CgEv#H@9AZx8x$Y6-?lqgZYowP&lv=~ za`X8T61yTvMMLzO-t5{6Mt;|;uR$!GDYeWWM5jv>S`wRNm!{1;<3O(kBoUSuI+1P` zq9!h{rU-kQF?C{Tt(ESEUnz^B;EmuW2u-f*U|DKl>vRj$tW{|dvK@(zR5F=M%B;WRSdq7K-5qYhg*znS;HjYy%Rk$o@H57N<+)cARj z;Y5L{xz2Bx*Kmp}6kTQ~4H9Flj%gmn8o6_I3Mp8$OlFg5}PoLw<8=bLls4 ziz9fXK1Ow^K|n;{eQVZsdmXt)%~o-{yTet{YuXdj8Wr-R0@4!@Bm{7dUk)VL2cvsN zRB~J|)U#;1C~Gn!lQQD$Q#d+Tym+dC}l+lTgBF3?DV&G2|`oev; z+%DgUivmrGBHYTT94^`f0fZp)0U)J|`P2U{<$c`zw07he{MzI8)8n2F{_Eiz5Czn8 z2ONS>JqK^wd^cSm5BvfNSf2P4PqhEGE0F0pQt^$$}37^B2+kWxklJ1J45;F;SV%fbcEP`H4)2JoDy z&>6d3yGF1>J1qtvrNxxKpo}Po+zYqU@4(_VaKY1p!2L|_GFUjV&tOqfe;$58g%a4# z=Fm+;s|~(rKREf_i<9HC)3cM)=O@F_$=T`2{kP-M$(8d6mIcYPA%RiAguEURKNh4E zZaahgQzsT=`Q{dU=#naMXzZVO;KUak0t5q@4b37eyeT73Fo{$K(h^_zDU_}Lioil( zhWZ)E{s9gm!r-U@U9o<7G2Osbn03PB1s=rKl25?r!-<2rCv9D_uxwd)+Gs;=JB^3T z(8E6MF2x{UpmCz(#9cy-r5NGyG*y$Y1|HHHaUI+_&z{~VN}lDp9tTOq2*c)d+^=Hv zE{DkJH8OHt!@RVIj&)0u6-rVP3rz7fZF|a*M{Q2d0O4YW9|r5w<5~WwP705t2}tfv ztN}_FF?cX)U!g<{RD=8K*jqXmD=>p4TI z^+DjMA--CR4p7eeIQjYSAExjBvizVEeM*u-X`K-kWuj^;)!_og-Rf#LxqzfNxxv5V z%%H-aWxLPK;)dY(r)+fi=6~9r1e^{NlG~H)!k+u6LFw_k9b*<&1Q&l;c^$M?n9#-#;`}DQF#`Mz3%iq`LYJ1haJGp z3P#Us4?e~oQ(B)hy2k=ZSgMGpiBG(fzi>+NLSb*Ye()Vf!(=z}x+D15y7CAco-iEk z3FtO*6f*d1w}F|CBz$IeTWa#vrF0I?F2};Grx&0yuX4luKHE%3yvE$aqI&xxWVJk+dWG1QF-oLjoOwOy+DH1USVr$g$5YF%5GF=3^RkUVKqcZ$3D#FTmh$0 zTB*LFdJ*}LoWrT|wywK08k0(&;ln6gFF0m!PuNH-Hf_ITzw)2m)e|G&0}**#Vp z2^pzC@Wprr#k61{5=bpwo#t=CcAG(=rla`6#)1ndHFfG1fM_*fxv(N8?sg`9Elp#v z#~>@h%e5)BhP6eG_+Y#F4iHwqsNFLglirqVtVD{WBCQFtBvFFkWUt@+{BZwizrFt- zpW&1A?#+AT9C&+=h|lDnRF5jVLrW0qxbOknK79O%p`y1xNo|4fJu7}9w_nqQN@Kwe z+j?_)O;#JXzH6(aOP^-os6$A_!seyf`0Te~0B0p$H0xEe8PeK;3!(}Y_Kb7be@5W@ zD64&6d3uW{gx-icNhIky>kIUHb~w=MSu7ADqAOR5q+Pisj^bNFU1qGclUbuorO;&j z?*IkDC^OkrVw=lUdqmgDwMbXZGhy$1$)zbdpfGiWH~lEZ421r2=uQs#TF-Fh9`}jL z0RBCz;~u@Scw>Y!IZH^Q_g<}hKy?)B{rT&2PJVTFuSY`+=GAL~qZAUAv%(k^x! zPFk8l9GX-b1(T^ZrguO(RDc2;9jpas5*N(*miG@V!1#YtG6Kral964|({B8zVD#us zUzLjrJR1y3)uhFfOkyiO29hFE9{EumHHAY$*`>vcWsNcq7TE~bi58ueMAotBjJ_}zB;;s`k2CKidB@JrT!|0;h|WGm&;R^~#!OHCPt5c`^`SA-VP~ep{ptVin*OIgG-i7G ze`2QpsSk~rA^`3GWA5Fb+c>f`QT-{nI}sC9w>_5tNj;{wy#eAu!U72h07=QeAY_Sd zD_RdPMY%P*J@dEk_kHJ_d{h-EsqMad9o-@-Gpi~q^W=Fy8gM!Q=J}0q`nx_fX8Pct zG1FZStxoR2_93D*o4)f+=lOv-&pQ`QV+9oTRf3GVOQ;b|_in+Py} z*MTU^qgvlok`qtzRam=GpSndKi02_Pu}iO;!iVeZatbHF>2iDh>E-n=+uNHLzx?w0 z-CyEfH_+TQQjb#f66~$Zo7eAeUf=!)gxqG65!r%2^3Y;(p%p3*>tBuFqt)mH=?U50 zpdLknvecxJ`N?wHhgUFTmWxN1&3=ck6Rex~ww@w^jg7zyRY$4RSCe)B zLb21eX4F-oygf8^G_Ao?KdI{cS`&g)BOik=Q{{3fM06wuKi@bOr>2BjP@0-iRY_w02B*lx*>_pOo?U+hYYmskd=ZB56Er|()tp6 z7H;qRVuZ>DeO-DlcrfSGUE^E!=z+#nG7AV&LUm)V)TtYi6>s&7aVPP7*MKy8b<6IZ zo?OBvLt_wm{cpd6>O^*+w&{_l2U8u5P#V;nC-(ns|Kjuso59^qP2mBJAwLlA<1=`< zLAM-YieuBdQ*)D$;UUakLMX1Zl)@qz+K?%lJ5^SEDLeghL10X%u6)KE;$5oi7$8WS zV;3xcbH&l}E=41vAKfqlmMse!$@D1&n)mqZvL$~~j{ZnumxGADxa`(PB|MDmT`tR! z3cwbHHMUbK_2Ce{_{-j&|Hd?7`CY=Na=C;DqGfd)ogsJzo(hn$l3!|oPsa$oKEW;h zc$%TwI(o^$2UbxUv1 zqMf+$>klt}d~?0}_-^_BZ`U{D_kVi_BddoUBUHDe-w=T<5HZ~6gV=qcnQ1=vHQm3lV zU+9iwap1>{KSFMleB4uuK0Bg5*Gu;~>)}&{U_&wOF8t{-w#cIF3s4Edl+{P0rh0U=?>7_fV(FweJS zu;P<-z^O*aUP;~+iz;J?|4v{6yAP95^)q-Rg{VI-S@+0te+AHrnRlSYCqW2xz8*>w^2_!kHeWVy`-~*f&!+9q4`PZ91IW~3>1$?j9!s- z*`y3|cu#tpg>KUoZ%)ClAdiv*Q-?lY*j;XCP}S;!XGV@s`wu=ggtxPbAE@LykIKFi zw;Vs{KrP1)+T0Y&EO;KZY>hDrFgydbl;pu@xJ$^` zC_-l+CQuY$-Ao`~z_%Ri*aqU&#RLH?I-VnH9Oy23ien3d@OX&&A`ORu{feWNA|*K! zh_do)#n5&`d9w?nbFxtUdNxOW@m32)VW$R-G}b*^S00{@UZLm6aDtfMuo9}W1%rT9 zyxo!b65$BTA{rs_uSkNC`B!GdApcr_b~5XB`cMcCnkAAQjb~Y4UpuSdcDw=vsgxUn zePYOj(JGuG@F=G=th;|2fejVC%a5k6+iQJ`*%5PsJFJisKctW%8=b-yTv)stXw2NW z7{5VJi-(45A6oSwm8`{MSC`OIRnIJY^uRB)h?CsgMp@B4m;atjB~qcj?+T5?~qAV~W4_W`N_V zx-dHD1#89im}@}EVrR({leX+3P>zE6geGXWYijoZb8Awp1}b+VBRLYbg(tztTSOqa zV^LIVDuy*(sXrJi0RP$YNb+9FcX6Z%0?><&E|MBbF^N(+TyuNWQES*}Zg0>)Kf;n_`Xefe~ zQ(GED5s~iO^f)b{P_K;+y;N&tHEJT{U%A*ViHJV^>c#8Z#k=X77k{~cSLB<`>$lhM zKi--ajl%YE*3`Q)oRZSmyP9t)w18M_ZsM2Oz{qBWbVSf_gU)OdoITs1>dzfg{E%0@ zeD&(}`@z|J1Z=#&8NGP(=EoN=|0-1%dZFm*?8g~_vL}Vje|Y_uch|3a3Yu5cR~96B zd9>T}@yHHt_=kBkv|T#WX`GXyg#h^gj>tEA3( zkTxs?b>Q&jsmnT+0g0?9!3cY7Rdj44pey<6xF@KHO7A}9(c@!3h* zo!|+5(5)2+z^XSerLZXq7;nRqGs00_DH+pxZUqL|!UlMq<2<;E9Vuvi=L=(1?(+@z zgtz7gk5fHD{)wbZ2~)T=XYA_aD58bZrA8zX2jMJKoU&^9n#lr4L}=V>6U9=LZTD)X zpgi;GiduFz%^@s}dmApmSW!5Q#uvNwr(=K~rlWiXKeELY$vh-hrC}ReY-qbfI7Px| zS)G=9!O{^2{1=g{n*$x?x+yPOW++VYqYurE;6gArTO7m8DxMF9}kFu1D{vI>1uT0adg0bUCV1!gUVNx=J5v8oe%y z&0u6KT?ru!Cq!{O7$7@a^YVp4+tO|odI>F2(W{x5XS0*sVP9~0V$>&Vu>I(dvv%Ng$v@)|>TIJgEjl*e6R~(%72rXSf&5%Xd zQ(zde>mMZYR@4zrB(7-Fm$@?Z_~dMK!E}xj+N+@d?=aq>(2yIUm1nUqI75asgEQpu z8N4TlPvJ@ddlFLKBk)yHP`e#?&eO5t_%g>9yw0yscWSct;?=90Z+?C82K)c(``54T z!z+F7!|lz-m$$u5HL~}I`x?Q&yy-qt@caq~b=-%$Wga1Tv>?m(hLG6}dZlikS#zr# z?rPBDIcOV?DW0E6ha`EDZ0k&3W`14?E0v4AA5_6O%S4@91^09^(^+?_Rul|Cd4%E&2dmyocOD5_Jm`;P0B~i3dZB zA6Cf{M}0QaQ^zgN&j-uekEk|m2x_|-lMd626chNn6quC_29hqf$bhv=aPdy9Y{0Ow zN-*af@K=K2x>>Jq(%VUKYj70F?fw1l;0t54!bgZ;JdV5Bez2qca7X*mj`qhp+WY&v zI$&1-&`=#iXNuYRl%?vQGgwpSfV3K^R^}+9{l>EJ2jF>9eso$s3k2uFdvbo@+^|QN zp%SXFw##@@u@%f{-Pf@*STpU6iGSulBiwSd^8ga@HhRh6Az@V#Eh_afHO7Z<9-y`u z}zI0(B) zi?8h-qsN+2e1M?ztlKpw)v`xJm!r{e1^*D}Lq2|BdG=S=KN(_ac8sroO7v6NVIfVg zk>~@S-dgJ__JY8ZDl{I?>a1~PhagKw(A`Y!c)^j#DRSMXIg5MnY<$jF>>t|q)m<80 zu=#ZAD|}TlgYV2z=I?`hg4jWp3aGgZvEPpn`++_kOt_&>fs5;U99-b-;d=}n8lL0{ z$rYC_Q5jhMOx!VKX;f|FK_h}o^&>_(0!7JUtSq=l!fJH*Xlp#j@yDMaqisiTU+uko z`wEQf9{=|4|M}0xeK0SYtA3#|w|ig)!~K`52`CL+?f<ERr z4IZiKwjd6hf<5yX1jg*G_n}j+LF^XF2Pt`{%*{u<}r$4 znp9ry(P*%im}{%gOTCo$7o5(yg_xx(h^=ltwv>i>O(3En#K+b4gnrEwi-4?sWx;*3ucW!4fKsUNK8qFAd)(aoH ziYH#VZO<{c`3#!)DSj2A=Oef7%!Q+=414k68qu3pf{@otl!R;HXJ^@Wa_bS9X&$BA z%?KCZYd+SPp;VJ%X?_=L9S{!FLHwzA`}UWc>%Ty8k&}E%@zrJGOE=wRtt+MW1sDYs zZA8I4BD&6=beP0gK#awBKa>ii69bE+z)R>-z^=gkU~{qd4CdU$IJ6^V9z$BTtK;qY z)v$-^D~?MHS>l=f{Wc@jJ*GOQ4m_SMQLr^giLz7Pm!bf=(G>Wlj7ELf;p$7BY4?rh zDPlAZ|H2}I3Z0OFu>09S8Q5UGxu|U`#5ZiT$JP2#6w_HPwKy=bVueC z2rbhv(h8??D=?Z-KuBYRsNe~#V_J~G!6T$s!I2P=%og>wjLO$Zn^`WAu5SY#aTU#8vhn7(HC!AYVdP-s5kPRD_6`=D!g^W(xh@U7eb?I3Q(1H~VjK%?e@JGAw#b zXB$XANJlz2daxb7eEIS1$2Tu-uSJ(yop0aV-lMg|o~h)frU+o8QrAR$i{Wsq#lvju zLB%gzFM;!Mynfy|9YzPeOPiebzFBh}nmnq#8_6bG(fE3ZQaqS?Z9PKeNAM#(1z9RN zs%4aAg0l!4#Z7P(B@K07d7RM9K$o?axUmf-N~R7_`qKg6^nAH`+W64;Ec&42F`BH9 znw6huCXTAQY?Pw~Rs#D8L?nt`c$!1wQJk~vFa41KhJ@zf8 zJB*eIz#TCc40UNZ2>{e1QNzc6I{Th5OD&R@kD_mw-HDzkUy zRZ3SLdsfM;)Sf*4E}n7ug2++ilCC1$V$`)Q4jtc);JBnk_(!BI%V*in2|u}0+`9X& zyX38mGC2Ej$>tJYV28|&LFnSoz5i-u-9+#%l$>WnIO2irhAU$u8rhZL;hv?Oq*yZ{ z--aVvFHfecJ7h9f+5w>MaE@vY61-*ClB2@SWP6nG4n-!~fgpK07*Z3EAf1T{n`-7p zr{2?b_UIsbM0$*%g(}y0dGb>3Cjqkg3cG&BFLbuWIN6@lPz>a4X3wfgBlVnEd&d;% zGLNu_BSR>G+7jXG&Wu!i8;b_r&Eu$O>&blhyvpZL_h?yGpJ*+(HpMoJtuXC~zmn@* ziYi&>*P+fg0&Sl5S&Iv;2{}nyilp21R?W7=K?lqAsFHMBoz+&NJT0_+VyGJIl=W1D zRm*J+33vDeGMRZc6m6PICB~b23Zjk`KmuDO0?U=fIx=~+qit7!#^QRXUQS_$M(Nds zCCN7dB(P_xh1`cpmy7~I*Zd>krZ+qT<8E52L%bfsFa&C_)68{-=c7yzc8H3ppz1|* zBF-~b&uou7@|Ab?C(1it4U;&}_Y{Jg^r-zoOOrbE*?@mrA2%zQYM$Ox?aayQ*%VLQ z;!iddl#L0hQMKs+Y2glS&x42N!l$0<$?jt3Ny%)DZ>gqMn>?auB!?p$t$0C2*2xAXm+#W zLrjE^tATXDiQ_KXL)&9?yUvPC1ASzO(^XlZrvK4UKKMlXU|;58KlHkBuzpTbcnM8&=^ zGEAC716y-=*v_Hz?mtC1Ds0m|+~Zb$iRfr|;cY{iuK$+3cTE0!JUPWHH1 zcD1Fa1{^Y|Oe+UT-;)_CEHnJCfxdQbiTQ}e5N*lm{S6-dSsiP8pDOH<=5Y5GkQMpUIqdQJoa) ziz!U#Cw7T5e)r?tRbTM4)%)7yqqrf8_0BKUFk|7Bmgeut%MOlpna(0I%nfFMOjH<(~ zNe-UVJOHQ3`%g=)aKqUOumPLb$!Y=HG}fdi?HVdm9t@sw2D8a%`(Xd*=rL&HKzNXm zmMFk#!I!SRpwMMFD-u@nQMEGGgI$N?&0=(_fFSHSNila(Y{MK_9K_G<1?CF%sbZ8F#A>k@zbeNv67w%5TZ%%BT?XFfHUm{eK zovc7`+CfHJ#Pb>Y!kLCJ>K8oW2LVE~=_{cbr`&V6LZh+wsYl;Ia*Q(=5!&>c@rh(9 z=W)y>>*g47pDxvq3yHAOlGY;h>0h zQcgDbr%*<0nC#-X;F(?B2J_%?k&$mK%d!D{*%BWBox|enj0GQQ*=0W6RtUx5z(Obr z4%r#`)nqdRi{N<(z}v`*r`&Sm$??Sr^fY`AzR`FZ;`6%K;lYy)fK6hW)6oo~&FM+f zkp?H_?V5TfM21B~PJ|cNNq+@tgJQmp90ZRQ3L!vX+nmA7%L6r^oD4_LdkG0PRCV38 zd+hua>O2p@rRsv#N&Q`1WIJVN+(bRn7J(uQ{2@o1b!m;>qpS#wffSh&1QoEt4J(qu z!UVV5kaG@r*K7i;&u=BQPkHyuwN2i}^Cz|xDd7vmPXRe(vWsKbIBU&E)ukyW4j!yO z0aV0O^q|1GUM#81TVD0*NxCV_>W%l-eYQ5CEO*@;Z84sH*Jnb;Or+2?*GO}Ed4cWc zK6kWhohLZ+acT;t%YG>n=I_R_rH(<7Ums zo-q2A6@6sFJXyfT*i?DN9+V@r`niL77gF4ppF9Wd9fPU|STGMHlsFiT-Ov5H&Dbm{ zPNzTEEq+7Yqrp(P1Ds2xdVv$0UH2;QW@d2(MFs(RvMGF)4w~*Y&2f6KP8x9VlKfiy zMUS0BaD*x=(XAD1^|@?7EzpR5vwfEia)VB8Pz?|!QS0z^gI7X0I_M521`YuuH|Pry13GIyDu%^3cr*uBV(0VYdd|TvAab<44?*yWpuo5 zFnrod$#T%Ps)v{;wfmuP;o?cj+#(teum6`9Uz9E4g};jvY;|*4AL5sG$kMO zCRf(ztN?+oZwJXA!Cwxf1T)yot+iO7pqu9Hd)_&~_nllY*O_AE z;vDI%6Gcj%-|2O3IHa%CNZG?f4h;=L5L3szxye&*~b z^T1`b-{oYqL5(vCF@i3-n8q_a?BHw(JlpGP6qtVa`Tfmp4@&=gusg%o7SgJ@UiXb3 zcOfK{Mm$^Tj!3b~ty#*RII4Q?PGm$HVyqr5_SM=M7pJ0)>RjjhAjStxIGUF$v~)$jYPTVxHXNi$g8nrE-WKD}5-C04rqI)S&FqP&==nk%+=-np5gN z4bK!2oh2Xfk9dHZM%_I??Sg87@4V?Q|IgUz@J~KHR*tT8&Km6kC?0%RjY5#d zw!lcs6F@^O!ktE^Z6#Um$_otD{n?qvP1|pKyenT>Z>?==a(fSY^dOT&QVHXRhb5(y z)Ti+-N~R!a%9Kve=pjM3l{sPLKW?uP=b;`&kLeIWOq!xN4;)`y;-<>hHb2%8{bklH zSEc-e;3CA1sy%5H;C+m=W&a8vp8ql}18bZwS5x?fQ46LuVtU5@7PR%8 zwWN{ANDD;+prvli9biggBcqxP-G)4xeLFcp0B~JQG8VB>+s5}b-H0lbm5SsY!HT)X zxU%@_@C_(6C3%eY8^fW)g-1JMw3bg!H^+O!)k*&w{4?M`NHDYq8d27yW!Y)RIW;H|)CoNciVojng{)yG(toffYag8y$kCae2 zC(*@pC14l9_EaFAL_Dt4ADp$5`3_}gW)PfZWzk`1B5i|IrWG{2h^~d0r?i+gM0AZX zct{plgpTZ}zJ(3|+6wX4g$m6$2Z&zuZ5i@x;dvCS^i55@WS{x!i=I$SvOQqJ6mOU* z(PppG#(AUGtf}#n#RZF6xl!gGSed0YbT)ZcN8(pfjIA*(J$Z3-o3NGAJ#vkHUm@K-R}i+ z=(p?v1c;LSp8NN|>CN)+Z*XG#DMU-4!i^RPlOYe1QM()iIl;H#da5a?>EE zJ9?!IQNchc&qmUOq$>jjU>lhQ!uzFUN(taqr)|SA{Ff{j_+~50!@30P(`7DFzzaP- zs7AOVyC$Ax1dEJDg^>esC+gJQ+^1GlsfV0~k+{{5s8jUm#6l=DlgE6H3_Rh|5z91AN_@ed2I@uB^;2R%w2E+`!PZXmNfq0gis`#)1$eX=d*}~q~ z_OK4H7xq_+o79#gR4;CjP#!See zT>e4`+LuuZocQ?$G<3B0>3&Z!=6)dnmj|eq&48OT*uU8l9OQ9CE$itTjTh7SLk~16s*auqbpT>@nco-;b_ig2sjx_r2V;3Mhu7%T4P?+KV17oU z19vvE$^z@F7FW$QlK3(WNb2q zVGO1U!aZ^ns0FE=VUn0kE+0PbrO^-#hTG#U91uT$Tge`rUQHP=YE~>jB?z!L33hE~ zDN;y-QE~;1E^VX`k*CjamvefYCq+KQr<7&p(B4VCe$}k^exlhKmFpcl`l*aoy{mu( z5WJR_z1lnBzbeU>VMI=hzX04i@o=qPjC%Q}<|6F}R$#o#lUY5QQ)pU?Rpd6C>96T) z(+ok_N61!HWHN~9d@*{W6wdJKv#;h1MZ&NNDtJ42s#!PMh$K)$7Bn6)3c?b+QWA=9 zdk9!CX$zAD8f(QXH9GZuz+4E{K`rsca&HZ&T&x&IvX_2`oHZrWr8xQU{nPco0oqL4WMDnLtw}llD18S79w!BRE)oP_v+2H8!Yb8-DX>t zFS4eDV1>BEP}8gw8a=D=WiFFME#_?Jtc0>R@m=XQw-1|nnEWh2;}j}oOlhLL3|q$2 zK+OSjYCAUwWgWVWjulKJwQd3(GR-vi zN2%4g)YO9&i@-Fb1sS1kM7>ix2I&>4514^EuNl%#&5$F{AXr9DOY1r<5UNwdUdFgQ zj2$DS%9b5*`;qQ=50UEOlcKDN#omMj24=h%yPHU8D0Rgams>*w2J{ z0-b+?QCoE~*vm^q09ui;Fba}0Gu4$RO~#o1-u*vywWF*_XZyj9_CvJy{FrqjR~g6p}Ki5L}OAji2CBq~LR$VD)oL_XK5gpmtmG-*m2R;Uu7HX$aK-5-d! zhOLAt8l$w?WoObxz;E-SR7aFr8SCRKaMZYhN>baCN+S(h!&!tMv{W z4sKzWW?M-$^Ev!25RnryP2VR(nP#(krhId-WT2PS7?KF7*_EiWjE@9{ z(dlWBWGr*+^C|t6v2Qxxf#GcaD*T$>iY{R@+4Fu5c_rrvD4EA?u#aeybpr{3BUWjd|>>eN;zU)I+@Fr+d zp46d9B|;|YNh3V%rC5;Wd|yC>TyCP?)!qx zyE~J+573QJ;P75!hR%)I+Y`%2MGmT-_5M3t39JFuChBXv7wv~s5<^o)-Q1;!xaD_a zRYL?-p3T6v083@mK7a%L`r!K0ttp-vRMih31PTsX~;9#s&15{KY1w^gvmb#>a~oq@QSZuwOhSf-qh-u zMu#gV-0E!A6r;x@t|HQ~3Le=pCcy#rl2L0(nS=#{1ZXCZ%yJ@b%FWoh4Nd7Q!;gvf ztTf@WQS;?dVQR-ZT~2P*q_$h0UQou{^mI`-WbMf5zEX>xD>R#}GXvugsk`q`_|PR= zdB7A`l9z|Dw|NGwkKJv_BiFF80`Gg~-Di}l}C`Q!0q=u=Tu z*E-Sy07wwx-^3u+YP*6}!dX@Q)B>{n)JXt5!!K4x~-@+cecp8l26)qlYv zl)I@Ve#&TP&%V5S%o(DuFU~$YjKyC+J1CWjO?GH%vT(v+JvIHL!u5dJQP6n|&r>UG z5I7!X0E?b)zni`LaQoujOW4WrZG}4z9tsyxC2iTifB%2TY7OMbw6(M8K91+Vm!rS@ zq0oE&{tu0r9{w|C`nx_fW(rTK#+vq#knuOJ>F@f`nCa0!W2V3BLu00JDr>AMmHWSO zO@G&i#!MglGiJK$p+pbqGtSMqOXiHNq(&l9_>poX<8W z>*lP&yA&&sj}N^Sk1SQ9cq*uS;j)LOu9HBiT_Z2luyCv?<{zR9RiGw<7l&ms> zPM;clatbHvPb)9AMwd}yaHil+An?2K0kS02Oi&WY^!NZ8PO#ri!)#Y}xQ>VfNJM2s z0_>?;)MmaV7aK*2lk?!d)~FDaVhWuF3{U4%FErEcR7UHRII&qj9Ih;x(1eZ`K0aPY0E&$ z+N_#p#j;0pNlz)YS2#Z&lZ-LuG3i>st?LGl|9bJu3YB)enMT{!ALwo89ru*<2!hM% z@}gJ#)_QWi&HrR@V%kkPqYO^e%PBI>g!X^EzE4|;_8KfJvy87!_kl*r7Umt_TFR3y z_(S?e0${&y0BCR%(&g4Ik}0p%W3x9`fzkDrN>xzxYb`70*?k@db+~@C>Pt=3G*=JH z#<*2FMz_=JuvkT-^!e`p+j6ifJznJBvi4l#O!DC>vMQ9mmo)-d@Bwr?MGSs|zu?y0 z@Tu*fFMsu=PyrwW0sbd+?tDmB1ecxZ= zQiT#}luV;&I3w_*y(pa~@tYV9ABcQWp*_)+9+zf;Y?UY5OL!?jeNdV^Bbrp1EW3kA z!|Aq+$m&06qygO@YteZiY3M3Iuz=5w-WmW?Vpvt3LMA&vps;R{?g7Q!+fDjdHGA&B zx|pMU>F#lN9p0y)0EFu09DW;Iw&n37Enn4vMgT=N;u#p_*qn|Y5n5o&(dcmIQM>fC zDeUp`L}k7l--jw95ouwNEN+BU2JX+NXhviR1^AC_h zms>Di0T#so;k^bXMjq&ryK499CNAp~Ob%A@?8OIoZ*SMv|MMgAPQ8BdX1npwK)Uys zYfy7!H3U<)%udj~0gSq0o3+afB%Yl0E0t;gar*F+b2>A?O#^?Q!mHu3TL;x1rVo-6 zi!>k5m{_LTgGUC37QkG+)(Q_eW|)mfv@)+Ims{|?!bVDuQZ0B`D-w>-HbiT6ZY!tR zOw4N{77yPsSl>iSEwDTQSk|{!T^bw@WNHsGOzQ~(u+wa-R?Sv`(PZB$#dr4zUu}|x z$APL7aMz@x)sMY4R}VNdMPlSq`xpdIIja4G8?FS^5Y458t$jl?95_sffyf4zS7P4C5<*MC8_(mf~^NF7_0?&$NB z?ucvPk#9?+9!4@neKLuYRGBK+wk^Ayd)$nVpUV;Rhe=9Wj;OTMD7)nMW27Sbo-Ttj zLgdQ~W0?_Iu{0rB+FUa;cY5qhZde@(`HO;T$~d7g`C%Qzqh_CStR7cJW&(1rxySY- z1V4!(1wz$^A5hq|tLv8DmhP1wsb0ml295 zXG=Oz!1Mt2Q5<9!`|zmAJusZxmOeC~({-ubgv3~0W?kpE-y!sge*e60{fTi<(=|by z0O@8cxZE_2aJk378EEbRw&%T<_j@mU|MD-rd5Q1cd`~&LcsT-PC<=HN?U8BDN7ef?np+t9<@+k*AG}9mTYHrD+?DWt<>F zpqSqm%4PS9X>{eYWwvr8bkIp65;J4@^dsan;Mw^cauqGZ$5N!%O@?f&gpZ_3F#+x1 zH|=rYS7c6}oR6MkdWLW5laSi3*23sC@f+g9i9O)2#u^5r&={oeqO=6=o;5vj-PNN;tAy5av$*ib1LWoKtk`>0F)?+HB`!j7$=L}?yV@gjyH~5k`}nRu0x0ui zL)!uI3z^=!fuJ6v`8Ozu<-Th)A{R5p8d(-|GjI;wF9Z+d0#aeYyg!CH8=ZPH%0FkdF+%blDbFp5g14PpU|J?>-0cm zGTO`znaD_*^n9riSuSx6Rw0^Xe#)|J)C`HzZlpk1J3k)s{E&|>q!=N@)R$+UC>Pj6 zLo1f$e%CChz$8&%`vPI}Pk?A%s-;&3u=LTgzCt|!2MhDk|XIW2~*|CCP5xB}2U?h)s z@|O#D@Lrw~A;V{pr!!v)I7BTWUJ&}Zw8voch`}l zvh4Ivv)vg_Ml;06024613EgP}0&xbCHqp15@MqzabcyW9B*1%=MN!i*F6hxMu0y5SGMZuq0G8~*s~hWGcsa(w?Q$A9I< z_P=sx`(L@W{jc2H{#R~p|0{R5|CQU@|H}OxeC7V4^5j>Ytif0A@8B!$F?=wA7i?bA>8EH>3){_j5F{W1Z5Hr5=zi(q@xGXU{d-Bq~vcUcuS%c zwPs*NoCV2IUE&kiqi($^_-U!PN$yYaOJuW35X4qKuVA-07%HVC3xL;p^}hGNdv&;y zc}FSVAh?Y`^+MZ>_aalLG3}nZw&viWV@~%nI7m9`FS+Zk(naXy;--v%Qn>tg>Y3o#-bbL9RXAaAa1;u%;x#Gg*X0GY0}OCcsO*@MZ# z;4F>Rl3g|WLuH3+CTk0ban^s=C;?7%x&g|h?UGUM9H3kI1(+H1MWe&9eL%j{{DWPF zUsFog?31dx^f)o8!zt>UF7ad&xYMO4^DaaXBz~o8TjiCY>O2B8 z$ZnGzzq3?taNo7y0CU@cxnsIyWM1YeX9k^{Vj7mLpBMlWw+v$NQ9z7(x1ibRDRJMx zEv^IV?SvCOH&)+uzUfk6K;#7Nq-u9Rk^xipO9XRC`2$5R!ke%LIdDepbew~}6l9^Z zCKi$wK7*YBSeg2dqGA3}!LbZ&HN&s0RC&(d@6EY${oRVNZP(o6&!*@?upK1Ip} zPc~()M<|hfh$RlY+BtkaTIa9o%)lNJ8T`0vF;mc7^xC9hMBtJ@siOTW%?0W763$A& zJ?%Yw)_@w3hd%%@dcwYo=LZmaRm2+qnX>pc2GH3Q$#)@>%lbyOTZD|en&O+ zH_C{jJ7mS{Yg0>?`t1R?bOedKH%O_f#-ZV5yEsOdwh z=i_XEfFr0ygJ@U&l8DwB?Z`-~F0Bp&mN+%Ig>KFeO>3;SAr#U9uY?I~rIMtwOElV? zGiF$j!Fr^62bFTQ9w30z7D$J-s%(Iml5f{2UP5g7ACBA9t2TRuKR2hNw*&R>&EYVo zumnN(aJMKgfvq1oErluJ_P+UgnQ^aDp}9h;?-f8M7P8UA5~9Sw5j_7ii=(J8m%6Y@ zl|2F#Q7?D4^N^3Y(k=rcPjP+{`x``54Tn+ebiTHWk@t55u|32+M}>1`azEbOUMKtR|4 z&xoWM;6(^IEHkX`zIA-ZfPMl^z_qR4G4 zHe$j&5kxqKySYw4C1a)iwwx|q9rqAxvYtId@?(Rd9xOeN_8-shp^h}t4O=B#aTwk} zI|~A4kSb!a@|Play_F2Cyx`P|nsivhn_uSBdN*+Sa+ z{c$~S?%)_TEFJdnB*C{UDH%a$Z$MO8?mKgBi<1jLh~(R3HLj2l4%v5%7e+Znu^r9E z$YlyJLYhX{>bXCLVCYgMT*h=vs8j`&M#U2~`n2u*W}Y6zVy>=VUcdhJdh>pUytu~c zSb$Tf>qd0xDYi&_KH#D>#{VMwbOP3ALX$qAb;RjZ+1xFv#^AbBI4_=s*Dl zhgsx4)uNE)LuMVRPlDw`Y#spHee9tzKxP}xgbFj%mhipv)F-WczL#Q?6cB~f-tz&o2=_muPAooIbwy-8CM3}zg#dRVEo+Pyx1 zCw9||b1N-C%`;SdDr~i_TJ7w(VB%rkaixs{ZbD`(Bqp+BGQR#v=`NYgl}E)E1X3Zm z2mqa*zegr<4alTWWbRgMHF^@*k@KVUu9BCWg!Gs#hPE1|57*v+5xW{w0g!Xz64kK5 zV1c$IaACM3iZd0Uc+|qvB_w(r2qFShNdvIy-q3)eBL_rtk{uV%agZ*+fE(8_!UJ7E zppiz^e8&q3)4Z}%r@mN{a2a-dWXi>=N&C3no?jw^8?(pK__RjN55aP(iv7UQMb1mY zNQMX1rcm`+X8Gbqd7Iurj`JKjpp^13B?XMnPrYE%I!Bl%D?{qLf|j5UvkrZDV4q4m zqIxa1u}ZW-R#OJTg?nGdg=VYM)2s)^16FiIMh`Tbc#9PT+<-ev3u9IOSaDoS>EPNx zl8r(71ii-3+7|kU@*0)2j8em|k~zOBLB8tAk75ueA~9k2dC>OpDm!(HF*+!ml9|JjF`I(S&9uHHi>;N#n1q- z%uC)eN=&tDLs^a?67fsAQiFhlWMO^A!-m)}@xrbitU9!k@iKy9m#eNgmm#0esMJJE z$bs-BG#n0cN^o6d_{{ruSWQE~Qg&)8MXH-vlq!jh`z!0i&S2%Jfi-;^yX@0k(kV2) z6nqo`Q>qZ$lGKgnMNW$@8LD^^sZvVuBkq(RN7niZNF{FPN5enDBwk}y%koNQa!=)z z3Jd(C;T6e;k+G2O4W#Xe$~U~sIm4#*k7=*1Fl7imTV%c{GF-UG2bE}<0Fm@=A7$40*9O*9s zjO*j6>=jgK;J4nl-Cm*!H~zPUdu9=g+21M}Q!n3-VBL1VUQY%>rp#xH^IWyq(PX1j zH#8vJ(Q*cPlf^{<&D|s-ZQ@E(kHgtW!D&eWtBk?{5>*#)KM!ACcxk15Yt}&M zo2+<%MDfV@Ak#JUAKhDhdWNbM>(~G5I?01D1S1-%^i&8*(RwsTs$hx&tY|Y!Q;pQ& z%q{o+T%8y#S|XibFJYn8(Gx18HKWj2O@e>RY#cfOP5y+{*o%(fPtcqyRno45Xfesg zgQEwi5GR?~d2*ihgvBFu zZ)c@g?m}y8}tji|y)FJ6ZQ>?@{3g1%A?jpv=dYzP1aj04R zr@V;G3YL7Cj3~}FV$X^`EprM5#tx5=_s|0`P`JZGhoKZv;WRKhT**K7k{g$-)$P#h zqmNlN7NYO+3DR9HX@9E;ZR|*UoF5a)(;3tfZkpF?*;fDho5ek!-WN^c3y` z64@-7*PQ<<6IP>dZ1$&-y4p_EH=9nZUNV*~*G$j5p@-%?zz)olF4kP17 zjk>D=-ep!2hqKdQ=e@HuU>R&S3|#(ZeghWdAIa4Rt_aFff|mk+DDxdQmb%fY#f}{f zM&=YD>2u&j<&AeQyIo`S0DK6y5L=G~Z}?zwgB*7O{|>#x0hv zYlObALfJ6+6(-k``dU7cLWyQ_7`JoZHb*erWPMVK`#Ogg;agIGhXf~8f)m-gPxG|x zP4?98-7mWRq$*OuhEZkYw7r4bV=MOHs^eBDaa5@mjQL|@InR0nS zdrXU8_dY_eTQi2FMU)nS>r4GaSAVfN)qyn0q3Li_d$7?fsndhaI5JEE`5ZiBgk1<( z>l3pO+7GrhH-Y!t*SA_$zCLKbdkKK;kS?;-!CF84q&uRrYc=2BdQ@^2u+Wr`H?zkd zikPG@KkfHD?jppjlhqLQOW@e%-_UFpyJg?n#MKqJ8?RXs%o619QXC&9#qrNCe!bo@ z(J%l1;IOKr0sw2URMqowZjfNAa-zp)8=MPHRK~mmovDo&>UGcF4hQkhf`u`wpDC3p?n|*vH{0Xa+*OcF?8YMnY(mE zEH>ThPL^=ftKh2N9sr>tbBfeBt{3Am9PiT$Llf!kdK(wT+&#%;o5D_~tZbYu(zD%> zKZL*9H?mnKGO{b%K2?}6b!mfYv3cNzHA+@O(}mf>6X#LbAhQI#1xEvvh#S3s_tWb# z5wta+2b{rr3daUOi)H9RIS>{D2_Fz*eO0ZPnCS9Pu38~Kp5MD_#cz9PR0C)fnD}iE zjqr`%^`SA-Mu7>;^!Kk?@!K96Gi?-@_-zl3HT_*58Z&Jan7~Yb|Ed+g?V&N#MuCan z_Rv_*gS?_ zp1`U0BP9Gm<-x+@DTVjJprP+3qsk-cCSM+I*PIQMwH#(CxNalu5qKzjAv47hNT9lb zaMNuLX+9lA>{KsDFvO?n}@D7*u? zD;pbMbZ8)qD2S9}Ko5)aRpCB=MC1S}J^&i!k}r_aCM*}L4Gfw5+TKjx9;9>f$Q$2ADrP4t~|U1Y`)4$Ll@br*~a9_Oj+spBo3msa)%*uNh*yXEN=*JC&z3EPyK}WAF)*{%DP?O0Tzwt0={!wwKN{H*b zu03n_$|s=+o-M6{wHbl?Zz73T6Ij2Y)ZSH00HDV2ZH~*O1dzYb@E&m5VvHFZY?;=c zw{o^P!=>}EuVj{H0TyB^YU$tj4BpFMI1~bz5sE!sq3jz8p3|YCU0;@oa2yc$`!sa0 ze7SpPLY6KQQQ0L!N}y!GYgyw@M3JWwcoN!Zf0ny%6x-6(Z3ocd)d>ReGY=FN4TTzO zHYvC3W3;+iF?3MT`c|iIk>UbVUV^_sbOEX51yu3c84D-To~|YnxE^E5-L+S8RL=wZ z1ep{DU^R3A=}eVy}8H_wKEn&`6>DNLWdX;NM-7he% z)L+`BRcFNfP25_o7L5x)2!j<;=g#0vTJsz`2Ia{%91A^gt*_L5>1KB*OjealCYwF= z%%la8C-bgp6(ck!xaqFOh|RPrB@TvVlL4&xgSOOL*!Z$1NP#J`B{wjxFUUcoSyKmf zphvR)pZ41~yzHwNP)^4&+!#qgLUKsL@ha2IgR5@jdQN~fJd9p;SX%*Mw}MWC=LGKBLyZXWqqk7DdF|d?j-j{rUE+x}z3dFROk(U}6)b_xjUtFyP5t-B5$;bZZ6Ul%-*Zn`UY#HL=BXnNQg z9$1aQ2g7Drskm70_R$4&T*78qu3LFAj@&X3jnfXGgf^VZ(hlfSJJ6A|ZiI9#!r*qW zsDsUwKU|sIKk5ZCO)Yv};CxDIcc?f^`eqv_@7M9gaPG10E+UQ<&fji#NN9&t9*|U7 zvqA~_(;t+xvx89rD1$nYsRFgs2?Vf0WTHVpujSJDwLVT9IUJ>Eq;=J_H~AqvIlq9T z^Nj9W&nBab4ZU)he}V><^WoW~_unoy({B$3^T~h9(h^Xi*cCOgQw!VNb-`!{NjAQdGZB@ z^wLvC=?a?UQ=mtjWx1gl1-QZKN21cng#+fUUWZ~lmU+MJ!AhK5VvleIbaDsp5iDej znRlwLs17RolaKCTv+}}L#6N_EGOcBBF5T_-L{;U+iLjX`3xPxW{-HQN*5 zxpyY@Ui0)F4z9RIUZozz7xZ-{z(g(1;ScXK4UYXvb>AUZGtd2@< zRnOs3huQ^$kaGt$e(xwJ(Ko)k`NV&<2f>a@P`H1eMS+`R+Ha-I@vMoq;DRrAe_{g*QPjQ~qX`5kd>ASX=T7r3MLuBw4OGj-~Os_!$iX zcF=D5*Z^8uil4gAL63CLvfdkgtNBSDhaDpf8=0@N*9!Ct#{|hWP_qqPw6vb)k->F= z`jRWx=1;2*!%2t>#z6e5W5%}>N6eO|9-&X<*#Zv$^h|H#%2%nua!~V3nxWvz^t`Jf z0_dRcYBuOAg)Ykc39Uu%8lidV<=LCS6A9#o)kCb0_<7j;MofY4(c>L$!ivxWQkRX` zD35~&m_p4X{7QOddQ;_a!yy%I&CNWv>=Jd7Q?g1`$uT1m%V=~eaHWsXqTs>E^Ru{2 zgq3_2RGB zAAivbr!Ek*va>Y8D9h1-Ts+(?V=W27Nbl&ziUSPAT%vWkNh1p-vF;Bou~-1OZe@3o z9#k0S5mGeTdIvGrLFjWMC6ha z1Y$mljBYQN`@LO#v&Fv0sbF5q6FPrp7bUy)GvJOCUiW(S3_s}9hd^==sl$e?CQ4tY zVOmjPqEgA^nAL^(R<~{vUJLaN=ThL}y3dA_KV3uPb!7!yz?pN6^=vxm9Iwn@!WvYO z*;;&i%$W_YP)bQqysLnEdP;e03ORnIG+{auq|!nJKc>-x9B=G5R&|U*W_#W0(OgVwjCu)NR_Zf_?7HEn(+RN7wVm!eMqaVyH~D z#6+G724$C47{vxq3lnJpr=$Q|BquF72^2VJJfU1^)7(btslp#OMQda+92Ft=?~#?j zs*R9rqm^Q&?$g}3NnSN@b1FoauJWq5l62rTh0~=*#CZY(hmt%f%3HD@eWMP>eke6r z?wy=HD0?4>FnKK@@O#ZfW~5VPucn_+U{U7560gZye&5B3-NW>hB!!-}#ZYqxJDZ%z zp_?v1xCI{FJR{ob5lnf=&)Vgh>BTS6XKNjH_~~Mf?1V6nHlsF@DZUt?Tj{me`y|k8v50Ws zaKTvy4hqY*xU>cuM{v2AZ-z{uHay3_xl|s5o~6i4bx4)82h>bNk(O8vfr1ZFLNh}_ zMGY%@7Ea(9Lc3h)uaLg99H2GeM**w=1Ar}?rTCGO5vzpaCSGy2xez@Kgo@gcQ1Z?bA9~rC&r&%zx(k1W;=TOYVYOSSG1z?Z}0w} z|7;RGlVft?VB6vCYIj~DT{;NL=KAd~b~`5i@5QJvq_>ATLy~1;=(pP?yx3@`-m>tm z!d2fc%d~AcuPbS&aP~&j{>{!AhHPA5cOT>*~s?WsVz7Ap(KEJOzhUrOPPgZgI)x(GYGLgy$?3%5%e-G&#~&m1?AP zBV1>sG$CFO;)B;WjFw4+4<90C#A0guLCUq@BA-#M)G46NZ8+HL%0a);rQtD!a4$#B z7=`N>+ZF`?}(M zje{1kxblzT!qddLSrdkvSghHrX>qx6#!ir_%Upe3Rd`6^m^#G?(GfU|f$Y^bBb<{) znkD>nN;28()4RmMXU6<-bw{hST5>tboc}OiFHYA_0Mjl-lAcAYpr^2>fwuuImNpot z*~Fg%2W~rQmaQL>9XTGo-$8see+Z>%*@AUOlMSjp?-Fiwa;CeQL-Z|Llcx}m)=wXI z9vJJ1F7TlN-DlagW$r&ukpE9@WI zN@1NqEb_J)!+r|w55$`5+tHi%FaMe{4>;5Ay{_y{=?5aW_~;Bo2E=O!rv#s)GjXBP zDh4#Cxx$VW(_Dpzo0MsFd2(k<3;PrKj8vaI7YisyGz>FeTcKQWU-=M%Ut>}8|LkSn zq{~$niR+%!&a$#llABs%1CTI3kuwFE6A6fmEkgB@A7EDpqVPhPMkNyA)Pm>m|7(Rkt2rOc@^MpD(HM&=dIyfK<36$y^3gWgEmCVs*Y5nENQa`Qi>T z^*L{2=^2=H@J9`YA>s(8rIU00>Fnebk4QC8*l7p^vWhWoz-9bsGZ>N!;AGHp951=B>c~V z;SR%z3VTjRPvFE-oM5G8dr!9iV^3YU6>@JiS{E#|szD)<(OBqdKx6m8;-x?Xz$Z~V3*=ba)8+#;Z2QnJFJ7IEdt1M&mb8A!PHo#>`BYI zUXSE7HbU4^C^fSk%*m5g!SDQ3@TGgGd2x?BNxBRGL~oXAZ5)5gXB1vaOlmc(?t{ z#sJsqPN4HhSsYBNS{?f>l8ko(i~OHUgTL-Rv~V}+ykD& zNOs-kQsEjVxXA(h3qaXN&p}#|(Yf~kDowNbk!@8aG5DTL)~7H#Bkk6FUa~JH1<{FP zx;ZV)D&VQw&hwRJMIOEKc_&{&Immo`c_)7X2t4WZz?n7$}K+!5dwAyr))r`SXh#;}eH)$;PYj$DBj*wU`fMIGFgu znCafX{7Vmu=-xw3*P+?@nfngG<^Zx?ITpBB+;N@OZ998{`@%DSmmSF6`s;3cdDQcK;(W2yn+O{b0Nq)n1RcSuE32lg z6;%Oh`1a$=Q{v`|MFM+cY66witfQH#utir+kgsYeCy4au4L)2&DOA4@)K!o>s0;{= zF6|DHAp?Fds*$->gYrsa`s>AXa|MSTdY^((wsnR34xhfeyG-Wn%Zx2dC)VQ<>>Tk3 zdxLTD&Mmty#_7eeLhhY8f9M+Gz>$qn`hYAbK-^1?AP|s~CSJl2wLaNB5c@X0TCB!x ztOukA69R%Qk-S`=VDX8oD@c0&ab|<&)@K#*`;YIC4Aluk)(tN%m~yXV&O z?PSoK!}O`K49Nud1$Cz<8sl4ifvS55V}aC8dFfz4*$JAT54SfTU*7gM-inGF=(zvw zcfZC#P@L8Y5#2|nVBU^bsTyAm#xJPSaDQvMh^ zW6K$ZpQaN1qm{$Zpv4rCznk74dIyNBfeV%jW%!-hwfYYzKjC^MS|J~!5*f~h{mduJ ztWz${D|{$)p@+DVp8rS3E%lRo+~Xmb5|5VZ~8%U8cnkx+1eAp@u1n)M{+d znu&UnHsixiH=UphJ0@zR7+MB!9j~k~bAhL=1WtqM}UjsDvI2*x>CcU9jl3SV?1R)LG{7SE- z;lxnwjv&9TZX9M3bT3tdXz?u!br4U-z)RkN?50I~-g7L3?fGby79|{ymT+U$r0dn1 z!`~;3wFP8TJyPY@j#)*7?HyorT8t0`5q7EqkRxfM>n6Pb6(1+fKOm#tjj~5?Ne$5K z!XhFFCruzlV8Y9Ak$Ls%_4~ou`**Kz-`~jkY+2>Hx^*6tCmxE+yY5)_yHo0@bG2`U z8WVZ4>{##D7jOP#(Z~3OkAhzq802TC3jbR4(zrj||5rW&ITHT0_g{N>U^dwSlQ{N0 z-NQq^!PTtm&ilRp=g-Ipo^RX(jTCCBtkV^<-O;Tz1PzeJ5rrmlo_azj!nJYancG(Y zkuS5&%jt7*V3N_xy7UIU**yzarw3tD^%l4^0JRSkY&x7FfJNmr<*8-cPhml`L22%C zHhzf>OF4{t&G_900MXV~M)PWV#FFm13tUu!GJ{q`>4cs z#a^`f4DV8~U}^+IU@A9Y$4EK`mISe=vu302#(qbP(0)5cXrCE&AT#vg_$j-o1fpU} ztv*8|3rkGnxj5xNtW%u5rVwS~E`_-bO z5-h*%A3YIPP<3YJiyJd%T=_tm!tg3_AL{i-&d0}dgbv9s=NYx~|Mu|l!v~KK`Ui)P z9t;lpM-Q+62+Ps@UL3>`{DHC1W4McMvum);B!uoAWA#c>o8{$r4h%JiYYQ(iF9bCs z9^mq!EoxqMo?JF-q<9PN+efz>kh-^^tEq#Uza_;Mg@jo&~t%4 zGKq$KED~KN7`CJ)6q(V5gGWg@{E1{Ij2N`CL+|8aIx}w}(CdB_?K~KuYG5Yi8bC3G zudq@uJGjg40k+ud zcfNQCD>MvInRSJ|2QUMX+*F`SuhtK#i22s&8gfXlMN6+nd;_P2rFp*X$^T6_)_(!V zQd|$pNX1{Im#*Zx{ty&|`{6+^gY!EgV%TZm6crQT zQ*r$Khsg>>2S|5PM9#(fq^_i(urAz{2{}T@5SBB$G`<&0FFX>;piY%z?$j)FL+!~3 z$*{9kC|hR_gy0z36HS+s3S|<`kztUQnu$GnpQI+|m9GGRdWNFzc;ejT@0d{`&j6+| z@o2a0ztsoeqfPW-edY?B+|i4BxY5%I01=-xn*RVpBacj~WZ?7k2@!aSuEaDj?T8ol zV|6}gqGl&2r~#hU>SZ20Q)!kr;N^iUxavSkASG4Qdqx9p|ak0v9Hu6kB^P-HEE zH8?-bUR|sN0%y9%h}tKLjfEgCvYk>jAfh|?Hy}EM*&S;sqVCg{V+RYf__kL_;S&6w zO;@9W%>#e7Ws|_o^fyE$5$*+iCd6XyGeF?afoV*vbkt1{vv$2+m>dubE+FCgLPbul zMqL_A9+qx;!`0l6qeXb3@Q)Gs)+#o7hzE|`rHy8RCidEAW-eea-*rq?P~-{{OR=Gr z@OkrL9T;2ca6 zNRZ@$0bnDGRCFU$Wf8g;GGAYb)h~txGSNfgbcBPV3MT&!6OI54nXh9fRvhU>?_us@7J zD3yma01flxmyN@<&}}QkEh*<9qcl<~G9VTz1n7OIzDaj^xmnN z8PJ*z0I!&CrQ$E6HlW!UfMo94n0BW&Ce+c4Hz|G6xF2O-T1msQ)zBLEg0Px%;BfTx z0#OV-x_GZQX9t7n;ipf~N3OAPFcZo{5mbQb0nF?$McJ1ff?l)BHo$dzM-5ogaZY`j zx$(YbqQL@Y$@P|9_V7aS1M*|krj#zK{tP|YB)DG%CumY-r*26g>!!k{Lb7V+EX1Q& z7!{HX?DxpB+71Wad1Z@5Rgn4bdt+;hjqv0ShMZW0+h`=@q|v>j@8SP zqS=0G**i{YZ;ung5nCXJc5%*RA#EY)zoYDW?nnIe^6$mvYFu415}@opUaam@J%nS= zwSbu!m1qDZP@mBRZ9!xnU=9>FUnp z+5y^D;XW;hEgIqvT@+dD)(dF z1`A=Z*~u;bY`BD5_hR)NO#bi;%nywW*8A;u=vkdDO}6qotZ9os@_>d(pfQ-`*1E@n zS@^q;=KXkbdJIA?5J%);MEC!cPY+Ksy_ivatjU|`bQS%+7ZA4w4VJDTW*xmidXm;3 zb<5LS-m*(`b0nkvB6UtK51VHf@QsIEPhEs&7yrZ(k4~BMC*5TNwNmEL&ec>-w7T_$ z>Fj}KP|ZJEFQ7ebs#kW6(j)A_SlMQg0%X^b_77=xCaWvN$%Kn|SBDs+A}Z+2EDn)n zg~+$+)vHV5Ik1(mEaVO{J3RU=QB=`cayU%_EkbDwj{J@S=EFVD!NK1ct?599JKo8{ z%4@kzgw9Ds-esLBcmvg&Pxrc0FQ-n27dQ*3MfeJ2aJn3$au*yM{y`#W_qRx(zBtra zRd}z%_Jf_cNub~8He3VA4Jm-1Zr2Faf#`kmXb-*dxf{hI}xx80Ew6 ze*^u5jlAFcwwFep4WZ4*&+HoghaL+2LfHuF4{8k+=Mk=Y|F5+gd5|ukf8g;6{C*`l z-yeVEZd;ZJm^h@7R}@bF-wyZtgU62!9~>SG4j=U&_OHJ^JetDb>TqDFAaAN=W3h+@(+j(MZuvATds_C^|TeC)f2fU zD4EFZLV>> zN}`=fJ`>+n>XN!k3!~FmE0Em_v(YH5kN||5KROH344YIoas-K1jh9#+A#|!CIO>b> z1-KN21sCfPtxVRCc}pSlgBSEBB`J0f8L}gxs-7rl;Y%7jNE| zbu-IOW7}Levh^Zye#r`PQuKl^ebx-`sJis_m~xdXGq`Js+C_Nna{JTA57)0CN~G{V zKl(ccRj&xITT?eB+*~&cId{7x11Wq_2_@l}@LtX;gky+6;F+3AMc1^jOS3&j?ts6J zuWzqk-p;Sz{pI#&>dC>RQKwRb)9{iA$sM?cNW}@u)!_QmtxJ{enfsuOR!t7pf;ZDT zV7AJ&f|r92X8cat66pl4kdrNk6-%+dQkzyPn;96DEA+3fL#m5Op~jK+feJEP4U!_@mPTv<}e&%p_9GW=5wBOxUCb#@D*! z!01}h>Rf~dIVEhBN_dYHe#d3Ky|OXwvzT|LoC?{O+;TcL&ZeP&-}9vj)6PY8kI?41 zfQMkO&TN3fn^h-XM=Z;r@A>g~4v;D@HB+2ykGNlq`Zd4U=+YFp;5>8RgLB*DRK0fT zOYXl&MM3!r%p{rP~kad!<&MdSAx0AE6`3mwRMw4-RBEC z>;3v31ul?wulMr(yAQXTN+W=-|CIWn$qLk@Hg%P(Y*TZkoGiiO>R@JT2}~_`eXr4q zA|7lu{Af}HgD2&5w0eYt-f_Iq44`&LgDcj9fq{X(27V~bckHMql!;?%zGFuwyhSR; zvJ4?`zr0zOi>7I@?9t+BI&Qr%`;)b}^+HYdG1=zxumX9FFFWnI&ov*Y3U69+YC%ckCn6{15$%AzYNVB3>DSN~M$41n$ks!(g4H65(nnF^+Z2Sg1* zLP@2blBIc4zGkn!&G`4zyZlqQDD45lQH%tzJP@9TmoC+L`}vKw``oJ`qJb7C)7c!5 z>q59yJnHChm;-@Wj6;mIi-apoC3bKUhpNzDq%M78;IZJG@D~*^r_)5&njLxtamxyM zQm8oN@)y@`Xn=KwX;}xbdmWCB#t$Y4AFFH-%adix1cCJIEh}JAG6ZG6i0mN19l!W+ zz5PGzy$6_OMfL8zr<*tgVaWNAXF!@hsRK!RI!rfoqQe9MdrtQ`Jq%1@0yBUl0ZAet zA}FGRfC!3$2&jmdFaZJzq5^^e6%#0;V*K8B)muBA)5!mR-urxkex8}%sa>^GRqd)( zt5&UI)9%Bxdq!AwM;=0G*9Wt{#2*)iret*r>T&Zz^njrsBkiw94Z81koK*m&E*Ua$ zBjAya*$ZH8I)=%Mgv{0gt9%Yohu8I^g|k)%)9#wik0PunBKZqu9wsPwGs;AarL}J{ zn&Kbgmzp|;LpF;E)lKIy=IA4%io-7ob!VjJG<3KM+?qGpb}Gj)|CPvbgprx9A@fU3 zpuUUpmyZNp!Bm4GH{i}-F$C&ReE2;(Wy}HZ)iCgSt?#gAe4;%Y>TRrcrHDf=QIwZ( ziW+alQn`xQSYh!qu(^fgNYRy77-=WCOyTF|)sj@7b+z?Ukt_MD+AI&wrkQ?f>pWe+ zR1%?YdAM6k%y(cf4$e+Of*5M=YU}C6GON^)u;IW%&+h56Qg%NrCbDFLb9~NWn_xB{ zBJeOa?&`sd^taKmQkL_$EKKZU4i)rF{4=Grkxs0_C`>OoW7Zl`epNt?D8CkhxSajmO(lX*l5>MLQ?I z>4O1m3ZWIC4HyigS*x%%IkAwGg0xjMWH%lG4FtUZ_$QE*R~>Ip;Cm&mZ|iJp?}oY+ zn^~h$SDWt2!B2HUyO4doVUs3@lTp|zw@YJ!TO`3X)t2CJ*p_~Djbhb@ZR)q6y{~Pg z9sBGhRt?hMQ*|19Bz9Tos_Y*Qpa79isC%Xfp>Y+xD`VHSUObG=EX!uf%(dLJT4$fO z6HP?fo!GyGrZ#?fXED4n4A7ib9X~X$8x7{dWuonFnP}|O@fS!W zv4@Kp);rI1xO059bUwPi_nv?`TKZ2&RtSHGR3f{Fvvp`2LM_4q6v%*`Xmwz^h^-6{ z%t>f6M7;MPO>H@+X|*S z$QHca0GplmA%E1qD3jmaezP&7Xzf5N!)Vv`Kuko_unhJ*ne+j>Qq6A@eQ?d;6_1F^v+({Zm?cQ%$1BvZvrM6pJ21^L_RAnVA-0+aY0^)eW%cj^L+c2wCsP4(Loy z1#(|0tRg`B?W{Qmu^$4ouKXa}dZ$k8_7>kayeYm-Q&S}3)5e8`=OtSSwy~mAyyX#F zKCbQ@>KrryL%%J1E%z3$qQ89P3ucg(mB&x*ga1VvBq*z-w@xN-eT@0lb2C~ns^KML zpSSfgsT5I-Pl$e13c5tBofHaBL-VnEA(EvmXfFeqn4>$Z>9H}09F>R83=%TF4M4*v zyHV7kx1?Su9%D&yJEZC9H`kUf5IME9OJh`tbsIdUKFxH!Nql>XclIF3U1!^}oBXQmv9!#t-qoX*&r?NgqE_l;s zy-Xa7vX}KL2dGaVNU5kbd60|?lSdo8!WV!kg2EkNAe~ahpjoMQ%Vf1Q9f={LDgbb zV>R$@bpy7WO$ywu^^YR0I?(!yH5R)OMYY)~x!152TzeV@?VIL@0vVJG{2JHg=)Mbo zqrJ8~)%Hu9+lh6+(KSnB-Nvon(_AX?s}ML>9p66f_6u~tyxOCN@f1pqfQUAAL#l*F+5Vo4p9b&LIBHq zJK)$CgU({$roZ5}JXD>fkKhd7BC$E4j2+*>Byq^TS?naiN@Dv-#PtEzdd1?bPH|Ue zT)wMgbg&n@rDhxZ)OgS>#4IPkTV6u_-Ufg|SVMBzC>mgXU$ zE{-J^9d^}{BYAag9c^=aU$gI10(<0`>loXgVwf-BOvLFp#tnN5Dcwyb8ZD!~U_L9U z+A*sR*>jlRCi8rlXh*ZNDKLlg8?YX!o@P(R+S4-Eqjm00Rmd?0A=OEOh_97N#M^1;DI*WZQ6T;b7{kZK z$JqNI#xCMUTa<_NJ)Y5N~|nY9YHPyA{qjU_D&)(_;9w(%n;O zWtj$JmAJiF`Z(oKE4OI+sm5G-JkoN`8nL+lfa=Z*4^<;Ucr(A%otpxj=@wUF)>8X3 zw9`l- z*gjF|Hj2%!{mx80Zk;ur%z2cs>chi!hghYrnoYnWCW>!X&7!5Gc0N{T=>pEe8x>39 zoR+kqyT%8@(NKIjRS))M>VhMXrqLnRQ0`xs zYT09rOs(j|_$8NCnpxZ6_e-^`)vKT`vFwMsvuI^4cXR}~*@{U6JSVy-w+dk@d$TE0 zSlQV6PS|%;k6wI?RSnmMAeZP&&L`GnUNX*-^Ap2ibL#6Xj>d{3G6-DdWH7{XvmR*2 z=Acz7j$pUS;Vvw0Oym_mLh zHvXnfo{hg}+W$6pq+bxrd=fuG@6n9U)G4CXRrU#6mYLu)Qnil@;|@Av(B#789xrb9 zhTh>(YV8I8*;4DE^7E~TSG3b|m|4t*%sJKb+BLZEaRn=1UZE{Qykx^TSG4%BXy<}G zFVJkZjku2wQJGwmgmve{GCq+VYZ=inRL93_S4$>VpG@6kl1+C{D6FKPlFd&d+C3;M z8b?#@SXRU5o0&Ara;p>LX77GB+>1GW1*6i~Ro%UyRj`f9O;U6QNPb&$safdUV7Q&; z=;;Xd9fuP_9a~s`+^&PF%csNY zIj-2VwsofSUxaaw|AoqHi7WyJK>c%ivD1RN{88Fu3iw9y)0tDnxBQ3mvrSMT`#j}5 z8V8QAx&K8XjlG*cy&D4y_?+z>9&E4e#4eG*PE803Ia9JT@1i@ZJCi($(WKeA+H5tgdkbluqvvHztDM zm|fa`6&+mbN#R4zWMe{p%_QNCI@*u6Zvl0KqxfXKW!a??*omx#U42+d3;hPwgJZ*$ zlh;(1tzKMOGB#A1s4T`IDF@TZV)3SyV>=qzc;KhK7H_~@b1nyMbxVBanbD@L8(P=C zV#(_E(vl_PrHPZmCMM=sH{SO8oQOr+>-gh-F$KKuO`VOYM0Nq|(4!Hbq&lhqcxi8A zlbj7RE18VHb;_xC;v3Q+k+{c_hZFq?L3ZqVzxKtb`mbj7qn9#VN9-=^pBCV9n-zH4AnA6;et-U zkRH9J{2IntnOe(?=_GhB;Bsf^(~{ptb-bNsRUvJHOPBny2tTKQ!*1N{j8f2S47X`k zH}nT*w@JiDx6y7;Xiwr+0N4%6?&Su&QjsZO`4^Tl47%76tGcuBoD&Lu_E^H#K8#+r z)4EH9@Dm5n0b=+J54WK^XG|5??P4vWw+iM5;9lE|M27q(tInNgGp;oUcj{&l(Q_%a z{e#?OpbbvLhv#AWTsG#nC|v4DS7(tLI(azxejMn-{s6KBemMa!>%5b}N6C~OK~)?+ z3#SFfJ{v<*s)!Y7r4zM}SpDQyJasKzf_(tS+(e2^o4A${3EZ)GGLzMva9gjc_Ao4f*zEl4ot1aJIBev!X{BA9H2{aQ;j#AKf%c=F#>Mn{SP1OoC?B$% zx95;HHZ7tj<1CweMf9G-F*DRN962yf9!?Z(ce@#^W4vs&*4zx*4WdTaYso@|P+OPn zFp&CMistTxmNl3QL8}R=xeF=?&MD5cxgZ<&=@$g!nkgmz)=bqufQ8B7H6aJbJw9N; z5yjc05K|+8WtUkx;&VxxIl`KENSy$htHJPc8o@aO2p415p*jwgJex;ie)G&B(@wfk zS(V-at#3Rg8mV>mWfMcSYzwZ#y3gu^w@CTZij*swLydW53};nw7Wy1y6R*Jzf~#QB zGFE+e)$z(CK7eT!sTxerttF3{1Y$FR)fz3lwVQ)vlwF!fICO)@JzrvRjfP@e7Q2Uc zlR4Pc!b@;?O}-EE28XOhqcfvNlBx9E)saqPhtIBhfdg9QXmJD1EKXr4nvPPbg_%b0 zj_uuXl@X8%~MF=J&#_Az(9R)ekLlSk}&*oxMGOx!TDg zyXL#K%?Bn^H0O;eZ&m|ZRbky;q8EgTMA*Dw^lq+D`muDXE7rwQo$ID$rcP?b8Md!( zA~;)gy?Lz5!@RF0O85MYwR?UX4j->;7*FmWV9t`|D?ZSEsLMuR^KJPIsST=7nopsh=Y&k7)A-Y}09Mwl`5?9EI1lQ8soZaf9sG0js(u7Kan+W?r9}Ns+;~Hm-)6KwvHzT^+T3Ol)^J z=x@VR* z=60AZ!&f=vbpD`~A=#OJ2^@V}RC`A{BCN1pt=-p0RjEmh$RSgj z#3o2h(vJ;8tK+R)VmUH6fOVskZ`|mIt_$KBmWqZ6C7tDj?k7^dZ`|h?&6B`tKF_C- z{ksswHW0_B5FdzpQ!+Gj@o39C-!?#sh7d6q7VWdSPfc>1 zGDRZ0fYqhYK?Z9KU!1Bgw`z$lgp)_Gsd#d}JGnr`e?K-AZl4cDi%=w(!Yx8VFt9Hy zDH*tr&Sf}%$CQbv>~Tl=%uUHNTGE&aydzHJj8=#xjzr>2A9l~S3$V+f_90x3tK(2_ zYtjKwrjjS3!o)IS^j)mYBvZQV8R@bKs45XK9cAq|Wyq#z$E+rFj+~f7PvNFD zC=QPfXI%M5hp}LM6chBm=XN46WIQZB$_@8B?HFg8EvwYMrxV$maN5)MYUrZF8Q5Mm z1s&~un49Qrn*$eRT|+&Ycz9^2CoCWiEo^8wNJn)E`&?f*i6nMEzJfCw8|Z@}G>&1s z9AC|8wVoSMMD`wu4??ThoIs8q3rh^SHY$1lbZmHQH*0{icwY{!QAKe_>mk)GvWHY> zX+0zg);wq1Ty#PnP^mC`t0TkSek3xKz}hdCt}9IGZ{+QOyFc<1c1J_Ia;{UXq3E%_ zBB|)XSB!ZNoLjrfrDCS4F7{zH`Y-FXs*97){CdMel#eOtPFtg)4C6}Wn5<`p$1(BJ z956`9pt7tXS;kXYnbyi1I;u>#�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%0DM`O+ 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su new file mode 100644 index 0000000..75d1e86 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su @@ -0,0 +1,61 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:357:19:HAL_UART_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:434:19:HAL_HalfDuplex_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:507:19:HAL_LIN_Init 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:588:19:HAL_MultiProcessor_Init 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:665:19:HAL_UART_DeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:710:13:HAL_UART_MspInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:725:13:HAL_UART_MspDeInit 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1136:19:HAL_UART_Transmit 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1224:19:HAL_UART_Receive 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1315:19:HAL_UART_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1360:19:HAL_UART_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1395:19:HAL_UART_Transmit_DMA 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1463:19:HAL_UART_Receive_DMA 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1493:19:HAL_UART_DMAPause 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1530:19:HAL_UART_DMAResume 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1569:19:HAL_UART_DMAStop 72 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1624:19:HAL_UARTEx_ReceiveToIdle 40 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1751:19:HAL_UARTEx_ReceiveToIdle_IT 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1812:19:HAL_UARTEx_ReceiveToIdle_DMA 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1869:19:HAL_UART_Abort 136 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:1958:19:HAL_UART_AbortTransmit 64 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2009:19:HAL_UART_AbortReceive 112 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2070:19:HAL_UART_Abort_IT 144 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2205:19:HAL_UART_AbortTransmit_IT 64 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2282:19:HAL_UART_AbortReceive_IT 112 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2360:6:HAL_UART_IRQHandler 240 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2592:13:HAL_UART_TxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2607:13:HAL_UART_TxHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2622:13:HAL_UART_RxCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2637:13:HAL_UART_RxHalfCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2652:13:HAL_UART_ErrorCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2666:13:HAL_UART_AbortCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2681:13:HAL_UART_AbortTransmitCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2696:13:HAL_UART_AbortReceiveCpltCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2713:13:HAL_UARTEx_RxEventCallback 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2753:19:HAL_LIN_SendBreak 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2780:19:HAL_MultiProcessor_EnterMuteMode 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2807:19:HAL_MultiProcessor_ExitMuteMode 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2834:19:HAL_HalfDuplex_EnableTransmitter 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2869:19:HAL_HalfDuplex_EnableReceiver 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2926:23:HAL_UART_GetState 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2941:10:HAL_UART_GetError 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:2986:13:UART_DMATransmitCplt 72 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3021:13:UART_DMATxHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3040:13:UART_DMAReceiveCplt 120 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3097:13:UART_DMARxHalfCplt 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3132:13:UART_DMAError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3174:26:UART_WaitOnFlagUntilTimeout 72 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3213:19:UART_Start_Receive_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3251:19:UART_Start_Receive_DMA 104 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3304:13:UART_EndTxTransfer 40 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3318:13:UART_EndRxTransfer 88 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3342:13:UART_DMAAbortOnError 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3366:13:UART_DMATxAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3412:13:UART_DMARxAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3458:13:UART_DMATxOnlyAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3486:13:UART_DMARxOnlyAbortCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3512:26:UART_Transmit_IT 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3552:26:UART_EndTransmit_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3577:26:UART_Receive_IT 56 static,ignoring_inline_asm +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c:3675:13:UART_SetConfig 288 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk new file mode 100644 index 0000000..318c689 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk @@ -0,0 +1,72 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +C_SRCS += \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c + +OBJS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +C_DEPS += \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d \ +./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d + + +# Each subdirectory must supply rules for building sources it contributes +Drivers/STM32F4xx_HAL_Driver/Src/%.o Drivers/STM32F4xx_HAL_Driver/Src/%.su Drivers/STM32F4xx_HAL_Driver/Src/%.cyclo: ../Drivers/STM32F4xx_HAL_Driver/Src/%.c Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F411xE -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" + +clean: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + +clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src: + -$(RM) ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su + +.PHONY: clean-Drivers-2f-STM32F4xx_HAL_Driver-2f-Src + diff --git a/access_control_stm32/Debug/access_control_stm32.elf b/access_control_stm32/Debug/access_control_stm32.elf new file mode 100644 index 0000000000000000000000000000000000000000..8058c184fafbd6fe3d44b136232508e215e2a6f0 GIT binary patch literal 845560 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

    @Xo9@yz@w*q$KRt`}_kVD7hD zsG1Y_2#OGRd88AWOHo6%AT1N5ONn$nRh!NGDV$RtpiaRD1(+S?cFLpi2?g9{nI`~W z=o~&J_~XqtA)2x!p3DZ>K=PpN{}S>(AJl%*Z$X>NA>Mxt)IB?B7HP?!i6KKSD$IHV zje3>hvI9S(Le$N#4$z&FH3xD(7b8i*>k)$FxuPfudH28i5m-yLTA)dOrMlyy)TI#Q zSE@5=Q}3hLX;Q43!6OKm`$AgEEb{zsT7lYn3mMl@ZPcAN4bddW*P|i)A8sxs3||4XRe)?u*tRYGCQhT1dU*9CH{Exk|fkm z@BQ&bu4+q-P&CA+NPg8q(GXv{ODNg`p=gM&m+^VYYk_!;tE5ZbkJ^@~Sbg%-XysBB zTfus@gLI0BzLdngr9y`HNd`iLPjSb{T54=U7x5}B1L2GKav5JBcuq^;IX!`AWsK*| zK|dQRqSS8b(A#(eM+|;G)E%umJ#Ao}&2rookZi7yY;2S&#~q=EVUQ%ram%G7^{m%5 z8!b366s3>sx5d$tmOCn1|J&cWY`@Ue@u1|*KaEoD_s66tth3l(yvv8}fG=!%4T_sNznvMt?WM;&ur4ESv67TeM-wxwH~Bi&-; zkz4G<9dkK!J3_torMP6$v2)v{6ih*EHlUXd<1M|aN0~95q**V zEV5W|GDZF+B93nDSy z%Zm|$0hbpeDC}@~F@nM#mlq=_tS?4TSYM2wa2A&rBPg81<;4gJ>x&VjBw-eyBnpaV zbCyC9s5hP_AecHJm-j*M@x2fU17ochV`0*g|_^?9SaV8LR_(r6M z1&v}tB!Y>}QmDqX_fTU2f0vlxwW^oNDTm8ETk;S`NOKeq+FP6}!um=D@s@{2XNq)r zbaa*o%Y&nNA}o)M&gRs)^3doUksjvqN(I#;4~!NFx#e-uxq?O>7M&-;@~G&15tau< z)uK*$Otes>%R{0?A}o)H7K=LN0a1-em&Zd(L|7gUEfryTG_*|ADG!EfMY=o|suN*( zD70MEDUXCM5b63#1+_&U2VE#=%%dVCuE1vFIK7 zrqgqOL$A2PKkXy^Q(O9{BHKSGm3()xIp~VbL04=Jx^i>Sq0K@65c@OKk(uQVT>|1D zy{qq*gs4Ao^#3x7j}Q^ZNAK#pCyR*Zqj&Z3E)$W3eDtn9-esal8guAfefLx=54Fj6 zj4FOgQiyl;UHPuQL+|RlQ>=@T5lVt0c1h1wPWUZIwYs2uUHrr?sMBh?l;!>oRQz-4 z%}Qs8R!4&Db3Ry;Wo<{X*LWtin?7>>I)PRg*P(*f_;3+!S|JL)#>=;W$ZA@iL8oDF za53n~jqCL)v_AB66nR3j90@w!yjoZE1RoS%(Gz^MuIQqgRdAjK7F1D)UKifP{U4;@ zc8I9s8C}OFK2X-NMhLTspDgQGW!(dGHu2L4Hmm7kmi1dS>N1{6ar(&SAJz3-#)rns zav48$3y9FD#a4L4>_HW)^=?G$Ar-67KPOpEo*unFvtJlZyjp{8 zWKwGO1>9QNuCtSIt|TVDant0)w*fPjVaW_y+e2HgW z;%=aN={NDL%l;g)T6KMH1S56sm7j3#CGH8TcRkX!fJ)pGR5M}xyT853CfHw~I(vK; z-gagIO4x_LBzjRm#SiN^XUTM$<%~@yGBIQJM#l@j-dNAL2_yIgq=tRqRB>h!lY0;UM?^_XZEIQTleJ3Jb3XVv8M@5(}b3p;9 zKpLlWEiS@YT%2l&a1KkQGcB7>1&4IZwRG;F=32o>&9xNPb1jASTuWg+*HT!|wG`HK zErs=5OJP0Njs~kR3s4dT1wfpMlaEyScJWpc3YQRQ9WZ)x}Gs9tY=J8 z3_W8~x}Gs9tY=IL>lu^k)H5cf>lu^6dd8$W^^8gBdd8%%o-rw`XH2S7&zO|1XG{v~ z8I$VNGbW|$8I!_##v~d&V^X@FF)6HP%-sm<8I#gCuvGaX@+x#m#wkegKZo6X=7|}z zubMI6oQi$e7i=FgB+a&oL?h1Jyo571k&Poa$`-S#CuUVo%&K1Eb;7A23gW8Z+jv^) zsvu#(EOk|oB95i53R1+g)Kx)>ge-MckRoZ8x++MK*j2%`!~$0ZC(u-&t_l(bv(!~V zia3_KDo7E}+PDbge0+!^Axm8qq)3{jt_o5lD@9!uB;jLM1@{m?TowEo@l#g?iJV#L zsvt!iOI;PDh-ay*f)oi^>Z%|`Vpjz#QCkpK1wX?xMO_sn3TBb}fvbWPaV&LJkRqO? zt_o5lWT~ry6hW=(s^BkBTQVJ52HzCMuOH1tN$qYfCYns~CEoW9jfZB0h;@HDMGF2U zlR9@C5m9|COlMHReMuC_8ugUTDjm!r5EOsBx!~`ZM))`fDkg=I>ONZEp1 zm+rQNo#7OQTi~t|M6>7}T`b;Mh!7R+%zhL(Z8T5O$R!@FRGco#wArI6EW8Tp@ti{F z?JG7(mXo8;!g6+DZg^HCc4X_s!skHAe`AYQyocl*Ay}U?k$j0Q;CZ7LUcdwtycxIJ zn2%obxy%+4Sxs|&^m5Q;b~drHnilxz^`Oh_0Ww4g{S3L(&yY*~Wb$}y>G5R9Wq+acctA(X{^Yn{M#$NM^2u?( zjL_=|B;?RnvU(wC3BtX$Q!0HWlLO>P2dEEz4`D12%f+1h-cDpPSN$3SMVwsvHH6(1 z^j!5@2owpq>bDRml9n4m;SVX8#gf%8A$*EhQNHgh9=I2^XJMBAniB=f!ja84BIsnv z%PW-ZWy#Ac6b>Owmscp9hA>@Tp>Wm!y14G^;^`F2VaL(+72gqVPX>qHry$M$9IZQo zVs;uRXQyN}J3WDn47s)wr0yVw;TjaPP*BW5K`{#jrSx{VR z56VmJ$?8%&jr%?&Udf;Ebm_)4?y(ch%%vOCxW`Trbng!Q%Eed_@m#vTf*TH$6LRVL z3huE}B+aE8(_XoVWVvL)y~!eyKlH(f;XUAi&t%@mQaOE;#y*&;H)r5n@U86q;+ zr5n@Ud=VMKlIg~@S8bI*P|+xFSvs^iC~iy##f|BpxG^0RH>QK)#&l5Lm`UmX#W7^v!A{8#(nD&}QWU5OyroFpGWQI#O zroAm9QsvT(Y44Z)NKNLtbYt4Pw;!Q9&!rpF-u)u7fTfV)4{`<{1lLUZVkw3APWc>P z$#i4dd(fhUKKX&6wA6O##&n=WpvhdizJi|ox zB+aE8(}9SHWVv)>IxtN{a#%9mm=09h$>1aUCUD7f2nNNC>7ckV9TYdFgUhO6l7iyK zbWq%w4vHJoL3v|3nQlx6uD7p3;a*fjGToRCY|J2OdcB5(zT)~y;AaoR?u(8K++Ijw z*>Qn83#h4%OE;zin+qRDPS~Xz(}BCh?dJh5-IxyCBPN-FF5Q?8{G#w_kPUX}#&qCU zf^3LOH>Lyk39_Ls-IxwM(Erb-lZGU zfyWB|6J<_u>Be;6Nf9|!^l#v|1=PP~EQJh=*y2ptf`k`p6_tiVACl1b9A>=R(+AF_HAG2O*dsbAm{`5ltBD3+R6>9N~o z>QtSYNhM=n?0Dt>P;%;zQThCoBe~4`1ak4_+fmA<8!+=zN+=9hL9D;eO%X~#>-kNm zdF(tLg~o1!lzHbt^h3!cIejig^Lg_!SJibW`BYig4DWdq?n+LkzJb@{-2(PUl9P#& z-dLuxv@J6eap%&7E7;JK0EvmyJ>Tt^{^*m0KO`4{gx`lWcrVry;yDlRqbs72B;uEg zj2eESc-C6iiD$K}h0)%WXx+$^AaxuXi_W4+D(@l))*fw736gm8&%jb()1F)|+p~t9 z@G2U_pH0ryP2VC&-`1qhCQp#0D;(O7dOkUmvdG~}`8_C8e?1FtZV1;<^6=nY*hc~8 z-O1yr`_Xcbx?@Xnwq}|74LbQpqRa_`8D6}SWqy=c=GwS28EDU3QKnjy!R;DZW^VGB zcs^&wm1%?+1LMlvtIG^bEHgN+%yP(HiHd_=b9n{ZW*e zfG!p|e-j!>jkcQ}p#wvy8h9H_s>Y#^y&Y+QGC?(vd@4wOST#U&Y}JUe+NoI`)~xCi zSRwhL7^|sD3-L21@mdHX#i~ka;asJKGn5vR!V6_T8uG~&B`Q0TGk}O_5#6E}e8iRc z1V$hejO?Zt)+tV9f|K3!ENv_GpAVQn5ir9|ggU>jVg5wIjDds{iL#LAGu`Y&gps^O z%L6A}HM=^o*&tHQUZI4kSIw>ki_kF0@?=PlneoD0TnpJmw?7#Y=E82ecb)wN^y$ga zX=E?#rY-Aidh_DR(0MdQ?WViei9z*rD4EJa6GYe1sGf-9Ffp><3fVNW?WPCUv1rFW zf?UzUKWoGjI~K_}`PMo#PqlDvVhcf}T3D@GSfg5qB}kN2HUtx_c55&bI~U3HV+cxJ zD-^4;L{=bDtY#=yRf^Tr?mG05W>cG>sz^Q)k|-T|TKGC3^3s&`fFV>qY0?6grnW&uUu9^3H|r zTq?AnA10s=kj$HtunZSkurxGXR#Rc00YkJjbdDSxWp*28%%!0V$gj4Wwym=_L!4!y z36xE`ZeNUQmxbm?a=cT6x@nC45@tzs#j22+RHR;?iF{IgB(DXD>WXUB6$>Ont3ZSX z5|QePTGbURR9DoXD}JO{2{x-W8>w73C^ks`ON`A7#b&BxbH8E(BE@E|Vlz*%p|P8q zis3V!#9_DLk2lXG&}h~e9~!EyZ0{3)7Qn4lYP zN4uG&Hp5W=T9nx&%G{f-bmP}SG4T_?LN^|X7K-Y|c+iT5J*7cR)D0wOfJAlJG2A^6 zss1{ayBD2kpV4d*^#aM4$JiWWJ_nIv)5Cnu(w+efR|S)(d*~xK%iba^XfRzBR8I98 zmNp$AuMB3>dWb&b@yDBcXDG^*L1jc&cvCS_>x0pO97ehNV4hTfdK~FvP>u>ljWJEH zym^+cXH;;qw4y7-bT~R%4@;W{Q8T(1T(1je1gFLq%!(`c6a+e$6y>;9aO{(*BtMum zMHcMlO<2Jm{WTh4rKf^O_K;*}V}n-=ngvN?qBWI*-ORX}25X|3N!saP>5Ui>r^XS@ z)I_Ih;McJ9ufXo4IHFaW=%l!s?gIqjIHKD%Q8-pp@kmUxd`tif6>M2z7Ua!u_fevc z2@ECC?WWtV_U-}0ae?SC{uf4HsgBlrr=f$!>*xw^2y#!+(OOT;a2ivgeXs_(d(4fzs_ z{tKa2-m4J$kAXC)K&M5e?4PZqY|~OsO^_1FU&f^DaoQp&L8headD;^E$cp}l=J$@~ zR}tk$eTn2nAW^7XtEb7vxM>oO2$3m%8}u}}QBRZWF-;17V?cOR^ZT>rSC+sJ$?wGY zbzH4nfX}Z^bOAu7_;p^bT!152D;MAZHu8lU5_ohTj16Gue~0eT^P(-@4-P_#uLH`Ho|hm5l3$4lu|o^-N;e@u zri5tKLcFVmcmqO2`7OkF68t(fzqtwgkUSD3s?kqrevfzK2QtO)1-FSga@p@46dPMWOmjGs=fdF?OULv6gotvWp%@5}(%dyWZQNp}Q?xK_mpj5t?#qds?=>rCEKUStWX8NWM45>KMyb z5GhtYEL%nAjzq&xMUzG6e&zMJ{ek3kkf_c*=F$~p3hmM;O$V;_rh+iX(-UHJuuto&pvcouB+7{7{vc6M zR4FZ=k!Vaoq-30@w0wbDyv>bUy!}?Q%GazC7X(P&pjnBX5ZY%J+i3}lH;^f26^hwZ z#jGrj*}#6PT?HEZMBPL3p%^phlVo;pH{Ao7U`FdgHBDekkoL7{hL7X-bIosx=9joy zL~ySqU3?ftGgLWmILeAD(`#ZJ@#B;-Ww~lu zK38ncXSs9b=6sb{{%5&0YW3#PuRHX1dy!7!Z6%?2v;@2pS}B%*L)-u@0pVxLDd1#8 z#ArOxRcnGoH9_*9QTB&NBZ!oi^e`G(=ni;QyKqMdtniU7+oM~y%dd7NWXpE>=ft;c zmw$15%ii~YuVt%Ik!ab!{Ksfnhrh>`A^CBX{o$5@=!aUi8=C|3qAhz~7=WJ)RDCwj zFV+G$YZHAo&tD~5RxSE$p1)eQ>^ys-sHI+>rq2`SAZPnW$(;cvj^5|{6OP^&`1R4d zN3XD*>sQ_wZUEv#{Vfo=Q6qxQ#n4AkuY#zk-+_iVHw{vv7Wl{w6q_D5dkfIQ z!@lT7=s3}B8;)049QKWqc6&q29T_-SHQv%vCC*t$J`$7a814v&lvKxZN2up2z)JL< z=U1CGI0%SNAdhK5lKtu|A#u1O`8tp&c#h$$fJh1QL(WQn03td(Rkt~@Cy@N5W<_4D znnAjsO@d4?BmY}Dz6ocOiAFX<^GY=6NInnZh-TSM$8=Uerg$C0SxNgN7B7E_b^Sci z^_Lf`uK$xyEpu=lM#Es2FJYNO!=U5@g-W}x$6`yeW#1266Uo@{{Y)R5A2Qt+G|IT^XXPQ^yjEdw+ zh@(3Dn6o#?6tA9VZx&hw_Y8Nu)Vxy-`FQh7y04${MR(BYWrb&aGvbfCpYbh_)_Elh zO@VpFbu(4X5mC)mLzK#__NfhQIeo46&7s%atR^`zulDKbOT6)Li7%51;*EzS)Dm0P z|3U+iIGB-4FUl%iI)*04%<_>3`o;B%pfgR4W?T~_AZ=*NVUUL$r$=98PY4Qz6Pm?V4 zAgJ-~v+C0ULWJz0swMS~I_Qxi)H}0eOXS2|@0=emLcOyxUW8RnrX-dx$*p$Oi(~a- zrd|^hA)S81nqF+BSDmRt#%uO}vc&6C^s-qx{ebl!ZCpvYf}tN77&J3EC%iD2SpPUmUam*cFZkHW&kiQGWZ(mdbeHvSFE&FfVv^@GLMW7z+7iFAwS? zDX$cig+rrV8_U3bgr4e_B?fetMOTMwt?`wG!SLrn@?ttVMJ znFd3FKL$OiRxkXoYl-8ecT79~_cY8GQ`>$$cQ@C$#G*YNvwpPDHKC&w4l^j(NJ8w{*aDff~ zp{Mbbn@~$qjH|4NJPhfH<@cnFePhbl5Ayk>Z56sDhMcx2=#jAKOauzhnI8Fng=&Do zbWw?-sNsrJR2m~Ommx0WN@T!ch2a>Da-QSsbG1>&`{7cZ zqH{w)kE|p;vS{c;rw{VqLs}n{O^;W>xDli#n-n5wM%xOv`TNE*C#J7`v>NIWAaqraaHai;S`?2(zIN4hm&UJn^mHnO zAym6Bfnpu()13rekr4E>9{Qe&NQ;P?d+5^Wu#ymlq9DosOPD)xt0}SnQ>8T%tr5OS znzVB1()@^Y(K8u6y0CC7$OdM`rnR^+OCz9{#;vzhov0P-LEqvgN0_k$+XQRYO;NRG z$ezp9utxPEuP1%TkLg2Stq-vY6J_{)^Mch2BNa77Q60yNdISrVPtpnz)OIVu1j$vl#*hkV=UKE9zFt(l zQ{$%3sFNiz)DE;XHLmKjk=&&3< z(K-uy8a#!u!BeE#01>E*1}F^>5|RBoPEBJw4N7hn)N57~qD2FCHx5fU9{j3vyp zF)b!W#nAzQniFmJkRU%Jn`lm?0B+aD&)3s3!$Q!Lx+h|a7MB*}E}TPA{L-@g-+60s zbN*e*$9?s=cy7e=13dNrdW@j>VCxvWc!NS%D~Y)NukUu?7X3y^B6z4ETOjC9##`8u zeja{(fZn@4Pd#hYbGdrftEc|I<*r2>t1+hkFS;#=gL(9W18T@K6~||?{zs5cY2t&u zUHy@CKcP1lMN%v1st^j}zY|cqk|OtSw`oBmZ z5?CPdAwKlc@u@P(!rh*<8B8Bdhxhu#C;b2NsmuR&PpUQx7+LH>z$0Rd*%Gd4IPwWXY{gcX+ zUqWB_l!KI!t5Ok==eMZ+{M`q%R)Z->$=l0*Nb zAf=C_FMM==YdPs`SAVWWz+(AeE%B!GH2PD&R-=FYhSFQ<3!nIY)ISlVe?Un8zL5U$ zA)=?BETT`1e2CvfqF{Xcj);CwnW*I`Q@ia%N89uCc|$%}yL!^`0)4ce>L;C{=;Iv9 zr_&+&REuxMj;N=O)6pw^==7aF^hN@G=p_pJye1#fC%s)oAB_jSL`WZcQ(R=VbX1H$n9^T1vW7rPJkV z`c%n>xMNSj!75(e?RkQVm#F8KZgKi;2mN~yDvMDWpVC2BOaj~$a{zb66yS;pfV3Ip#7^X>}c?h4cH3d8OSv+fF`?n;wRgCxpASaDHz zqa}VeDw-qgwkxgn!|_Fgp%z8viSHEkEey0P%(E+uvq;Yo-}qS@d}Mg42#4do@kUlO zH$N^tp62^uSz8a^LY<@S5O((eq3gfnd%XTXa5(RA?d!dl)t1_|XH_XmTcbs5mR6~@ zsH)M{tRiFxAxk3DNJNmxK!!vRAwd!(h>)F#5Mo7S2*2m+ozH#W-}`Yt?)-7RuGfBD z_Wu*4y;D#-R4diKOaOz}@uzlpq)^8xPvVzz z?HypNzoV@ns}+>Cf_Zk6t?xwZF-*x(ub1BH*sWD;zFq9i|3&V!3Y=~QZ(CWXTd(j+ zEA~Hd`~T~*FSRN}sO=`JTO})7i2>sOPdNWKwEutSt#@**UHAVU7uzYV$JRHlRWhK} zY3o}M-s*a&UDijz*}JY*fq(6^lvaV(2YsoP)A}S@?@H_OBfD(td$7M%s1>QlM^^C9 z^wk2MjlE~*t^(j!+f-&9V>{4J>7aUF%UC;pi8;Z0dhRdO-&NlD61w>YzAUP0&oS2T zkE+2kaJ(L@00qMhrIVcsBh&GZdJezmYElViM&tq@FRK{#Yj6D0Id5UCS0!*eSh;zS zS96=~N38+pDvgc%$$p|$b3fz1Ue#O{9U0AAEW4{!quOxCFubU_3>;Ml6>XVzQzqh< z+xsiIheTI%Y4i_>5xREV)2^iFq@U!0W}|Y)rvg9taRPqpmeY180}Dzaw@;~6t5xrJ z;BtVeRUfe2*ESM4*9J$`2RzrIEujnFBh*hRatrX|u&P^%_qf#<^wpeaPhtcr-{*$n zBN=Mglej&-Ao5QA0b^;2K*(GN{Is1~6{_sWZLptRQ+DEF`$Oii@WPf6ud`|&?Is-%w?>C;R2B8sM)TBT*x zDqSxw4jfe*mdmtDwC~NZcUR+1auSA1H8%=J)rWn!DR%5IVW(AnxgjHo`7Iq)azCb5 z`%Yl=W7S;dXT%urIZy-3jR91v%>5bl{xEv1Z3Zy!`&_2WSxpjW6a(>Ctb;gT!n*uV zp6Tu~9xqal!CV}vb7{oaUzVc|s9B3|Vmh3csn^*UOUFm&@YO1Zh;{gs zje~zL;+8)pdJ!HYz6E8(&-Xg?!M`3b4i^U#chCwB$1C`#6XOuyM3m|m#CB-j5;b~^t@ zk#x$V^O@JkqgNbVNaTlPGYh|W&p3pjQ(_#7@j*7m;UAf}>p41~5Jd7l@F8>jx>r6O zQ$oq|;vVEBaVnkv8b%hr`!d|es<8VKQEHq4| zb9ehSdX}c`h>WsrC?E1kS?o9MU*b9R@#*vos zJlULv?2U1l^ea*3my*1yg3gQf(0Sxz(p~cr#jqFOaYwYZM5)D7M*Q2!=0<_eixcSh zXf<&!&Lo>1Q^`X3Zqhm#Nt7GCiR-k7Vkoqc?v6-0`hG`TkMBq_;aAeSjUkG0aQl)d z*Itp#@gYQyolKI|kI2{UU1X>CdXgL(N8CPW*o?#AU8FV3o3!dHi7VLe_R+<}&8#4L zC29za!)yEf>61!V=X`*yby-Yy(uUIc3@?)WAc!oy?n6iSFNi+kE3zMdg3e9$IK_X+ z@|HDZGrEqnn(!NX48A2smXmK0x6K-|y!b1k4?5F=khN9Gbe>j576#hi>Q5U;tL=WG zr|U^84IL@of#IaP_5f*R{Yvx>b4l{WFrpN;B}$Jv()!#k(}gF>+D|B|?>)&vggx?x z8j^RNMBI#d#2xXRB0MpWtc`z0UJk9L^A9Hy{f#F{_FPDox85Xrcl^{F-UNH!;w{jX zF2+|P7>6PFZXK@o8foQ*(ox>N~HVSVWJ1x z-;J#9#C7!{tyCVzN zk>tq-M9+(%^ErC5v&E6*$J%3y{)s#e&!%ISbc*Em&vZo}tsu&{OLYEQKf05g279ih^WF^L-hS6$){fq9G+hg8AMe&=lkPJ6lU?$d zBIz-a?Ehu&-z<&9Wxpf(agmPg?DyRAAKAHtxjLTXBRV$V!>1Srzo#qexsT49U(xyC zPw03)ktpSjbY5@os}tW*gkRd*uRNUM{NO#3d5gI)+PnSEuN*@1t2a;#`f@t9sUphk zAL+Q#{zS&Fr)%j~OEJ83A^KbU{f|_WeAYp_mPv_3f0{~^I{XeX#)vTT-p-NEg9nrM zzmaHTob@DYA2!js?hu_%8%$3yIhf9SwWnj!OS0MFPqL7bK^C51GX;7BH}XsGT2rJN=St)TtV4V> zX${Gzd$Qh};{0VXKBVIC(MpQ&<^i&Qwwdf7LaTvIUpoJIBSqNtIoV0UulX_#docM! z#`QfNolzA*FLaP}hvN65@pj>xm#o7<`x~f;C(2<1`O-I0Y`a*}>gZ>W@H2{Pd>%#R zJdfgf>$xPPVE zuM1NEROi1SUxPN2{hM07>7MMPx z_&Wz8sfq<7pm0_pQetvWarPa+c|{;K$TUU$Ch#sO7Ci>Ip?JRq3b_jR^8k5@HK8Eh zROC`8bxYCjXPCaNsGSb=0>$wfsNYqz+yS_!nD;Rx3l*k(U}cKNF1XAJMSVQ1+*cf+ z=kP$$W*kJS6~EJse5_da0+LS@n<$fgs)+a;lFt-bv*F>nVzdZ_7mCy>h`dxRzYD!O zMFjPuuN2qtxdNtMVL1=tYeha8Yfvb#0?RZh&UFK?SA)fZmyf*`wlhT6k958Ome-8reQQo=>=l;rmr%6G1l=|Rk<=P&&HD{Gy zpMl6#Ww#;!i$+(n8iaP8QTAavO-zJFzY_~#dgN_0=+m*>7NYOKt6y{# zQYngYX~1$6GrmB_QKy(SUe$Ve;`BaH(PyB?V|(4}hhy)Ee{lhQHe#m6_U$DeSCWK{M7Z3JbM&SH&0f_IN8g zXW)wb6ls|t9#n+U8xo~h)e%^{V$V)oQKG^gdy>K){Aq+noU#K zuj7J(F2w$X#rD)0S^NuOuC2BK4%?rkd)jFsz8c7Mot_R#_k6m)eg6Cs;SMOH3HhKL zy4Rn0Z31Pa2R1w|xaqm;oHsNepq8wKO)2_<(ejxfP{b}6yQ$~8i(O%{L?l2v${2O2A zVGb)79s(Aj9JmW0Udi~tSc00fpRs@hhXav+LZgxu=44=Pz3eazyut}e4Px+xD7=4di5;mPEWc4tsmOcOZH3N zU~vDa{~njSe1HO!RsG6vOlDW?2S{OqdPDXMo16lW&Kj!$uCUjR!%Qyw*G^ysY&L#i zpUL8S1OU9`df|7!XftH#4~IWbIJu)jjp@G{X4kA8-BNg&kK+X%D4) ziguL#6)C(XK(|P-?<%7ogLqHrPF1fWYkya?6EjsQngNo!yw zSH(Ssl|0q36N+p3u!xUF|o{pLWVK;>@)@t&$f2VjM&fD(XW)kvE5m8fog z0?Be!LmWVbs$GA$y{`(G22iC^JcDGl>LsO(4^@tvAX20Hav>Z&RxMfrtX9>~4*@<^ zeQko|bCv!-IC`PtzlBJhsymf?Ua1`Me3;j&dngDq4XPhgfi_CREZI-3TLooeq| zV7t`AXllM&UHKdIJk^cM;mAwvyA&RL)USVohdt_Vu{)UYQztG2*sH!i55z$AIhtk% zsU54J9-{XB9qRkkbu>pkpw6Np`=EMcFuWg9ds6u?TOMBFEIf zvfEU?9jAUZ3&fLZZEsxBDRmwt1&M0^UQkFnVTD}YHw)$gyHH67m zXHX@sK>f>FxV@|1G6kSe-NO%hMd}htI!e?T$DvoM_A`T5p&oDw3YF?inqyX}lM5m8 zK2)XV+__FS!^@$IF0!+Y>hr|#(ntX{oy zAgsJrkMRd+RQnEul_vH4QQ*B%590|s3uV4R zM#UUrZiWJcGau5hbA+k<1=vyMmt`;($>`q$h+=9e!H8z2Qb9C^NvGR$f=Oqg=?nWt-D`T=vt3sF}y zKL$Z>GwbjSl3Uo9V}NaCFV#YF8(U6kxigzW6Mq+0{t;k1J1QR{Zme@LJh-!de*@da zYEMJblN~~nSueIPRW$an2MfUSWsl8+>Ah?Ky*>VHGo>kk?7Z(`EQoEOuH-sfb`>Hw z*l8GDnVanBH@L7{>>v`!XH##3cZUrxM@V;Bk0^-TV>hgZl_GY2DnyFe0Gbe#vW+yI zEn^dDB&lErQr=d{ep3RGDmJDq?(PG&moG#fvPG1vK4POO2YJj^(d+hv^;UxTj9oSd zAw6ej%WzxAK2kvM73*9Ln+@!3DxNj6;e%o24ZCs+BwN@Zs!+aTs|x`(bAM9(#gY3u z5@0JghN_OoIqw+oqPZ?cgcQrgmEs!WxR=rJcar;$y7W_Ak9m+x;3{b3O5}dK1m0=x z_c72*<|2b(>2_&c-LPc zd4WGd$aUk-fqN>KXinR4Nb!2`x0a4HmZc1-4&USO?w#!S7G#g$k1?tqv1r6oMBn zL{mdQEGUoS`i=-Y_QTjw;SP4bF_D5#9k3|jJz61+7Cdeuz!(7y2R*bRbvCqy#ENz`p$ z5zlhKu8M1BLnKE`qMY`c7(WoiT(LeE#5_^+2##)vFX;~67OgK}<&Nk>Yib4JmDS+g z6Th1eP$=%Cg~AfC(w+>7ql2MPE=Ew#S0TQj>EV5m?*hpxkr{+=tHn)}2tE}5rqs4Z z>_}@>kHvu!h_zz$-@u-Vl{8E|7lWx<{X)Fg4^h{NGm3$|62F!aM1%MP%?=yI`&$8; z#RK&2z7g}2p!ZgssDa2k@#j^*wn%!K5jjc;UjhV3?S2L^P?~=PHiM=&6+yf9QwWGTfCJm;$6fU(;r+Qd=M;CoWntK4oj!LsTXclb+@R#T1h zth9u>%5%~pT6Rm5+$lZ3AoZZ4?S-&b0zD+}OQ&Z-@`2QzdcJDO!xjD>Ne8y$Cf7*w zY2mL$>h}eRPVxm5=@~CsIuFcS?&Jz9KJsfB#69xEw!nPlFN0yzPmcc=>U-tj$sqd6 zAN&P{K>08=t|0mCWH<_zmv;jQk^fx{g?;jG-+;GY{?QL{9*~8nzz)jsDc~KF-G{=ruhm&!LPgOMdYw0?d{hX*n!M9=i(IHF=^8?7H0i1=MfI=JQaAz#aB0rT(8VAG8RZ-DHmo zVB}t!yN_D^CFDo{M5Vkj7rNp6^ZzLQ9J`&$x8t&B;r31X8EVXIT z%wJ`&>CP;no@y6!4_~EYJefKZfEWH34$*rvQ|SHmVak4oqdm-49ZdT&f6?&j$HY^) zWiRtpCW!vbvN>=Rz?2063uJm9f=CeK`YZH;nMP`@AGNS0LQ|OwDy8X@lJ!n8K(CzNTxE+ze0d#nO;t?d5&=rfSqTS(NLJi^mreV7np`K;H5K5 zs0wnCnK}o=OU(1`FqXkwqgq@hvzhvs%gne8fGfloHWZ#Sel(AL!3?6V^d<9z*4FBnK^9=InBMQ8P|rBg==_@bG6UDpz&xki zr;!m?BBUlJp(n6rrjC|?-!L<1KTQjBa~t&DGAr7^!#l=nFVr`)ryl}rVLhUu;K+_# z2}j%5qfbF}VwYToX=ip*8T4G(elK9ml}+ym_3domr{KA<&GcgKU|&^0VJGXe7b5QL zj0f+4LO3*wk9^4zYzx0m50`M|cj0SvMMpBiIq+aJ5HR!&vw`%1)-C zH-SA#_2jGUyeL@7V$DksSvLD>0u*xC?zCiZjqObd!*zCp2Z%S=@o7-VW&d=ALLOW0 z3x%8P@je$i?AiiQ#eL$>dPZdG(H9McmUJdN{j{zFl^|axri5*r3$!6AzCRJ}(J@vgU z>}TU4@|N|Wg84hP^8oNRa~CAUvW4r}6+A~SgbL0M9FI?Cjt`|+veYrGRr}yI$-vQgpt)B-ye~#@4VgOfDhr1NWrKExw#7&{q zv|uibHadoILU$S5fo&cF_FbtD)%P33-~)v~i(SP-yt+#L%{pXd4|Lp_bFKLOqau7K(n>0HQs zn9krv@CY!IyGymA%iO{Z@Nk7w(=}Y>7PW^$7T3!eyligGL-2Aq(`=Z&#&xcQ`gLyT zb$GwQ)zij0*#br{uaGTqd1}vY8{R!X>_a}|11zb4|A$PeO zv<7yM`;fLl7IH7CG*ZNsVA_DP$)=46qJ&%b20@f^zkUZ}WtWUJm%(hM@Ub&^`#)z za_y=1_LTdn7l_Zei6cRL&ehi-h!@=Koe1eASJ4~(>bN!gfxY5lMgY`vL#Y_@n)~uY zC^T^H9iY(2?WGA&6BqCc6q-3Ry~%Gl<2H!Az9m0!jK+s>a^2xD&i3H$7npHI6OcJkNhF1hnv zQ=zwu@0tsd-MnH3OndO7=7HzQOP!$Z#jm&r%$pxQ5pnwP?b0E#hi~&5-hKHmhJxtF zCw>q0z5H7O{yZBCg#g~P5bA-v%SHGL;v=Z69?U-_LuEfye9_4>@2k{v1 zOYJ?9Z@2?2itjoI>c{zx3lVNK-!lvzV)%?9(2M2MR)84CJBLH$1pmqbcj6@9u0J9> z#eYNXJ)UnVgk%E$!~uGVysABjN&H$Wub$=~wgvGF|I;C0seI=j0M7D#XvSnf!1TRxb0qdqX6PUw9ebv-uIf1LW|_Oc1%j5BdU;$`qpHQxGpP&CJ6sq_m>!9#}muS*Z&AU&5!b848FW7v< zXHyHP;pzV^Pz$?Bqx}i9qV!^10n!X6l_=g-svyym-%fujb#j%FZ@d@Pl7oA^*Flr;0kw{Y}^@A3;ITlju1 zP=CvBpswT{&o;yDX5qJ=0k#NUbD_RX*mw%worG7T!o6!Cx(fJV2($-b z1})jT2_FtYWIF_t3B;X35+$?l!he+L?h?*zhOym(GmWqw!WT5Ec?w0}!lsw7mWBy$ zA%hYnA0gceut!Lu49Qo>>48}Mgv~S++A9>KLET>{rAdE)u$Cs9fkGA~@n%x8o z!xS(bB78;u_6aAP0QL);^FTZxd_hyegTfdajD-qgheAC}aQzS1A;EDKc;P}a^|XhD zjZ~|R5MpWP{So|jH$;vKw?$maF<~+7MT!(uD?yAB+P;C_abX`-^P`0mpFtr;c+mh5 zD>zbZKTcQ|36T?mfo@2=aOFpsP7tcn01}1FmEa`_)BOQX3+_~WNfxFY1TRI1qPhPW zVOtM?R3UXgJe(DJro;O=A)m@E=Y_ZQN~H-EG%3Cyg!~3xx)7WVD;I_3bpV%yJ8J3c%1TAeHWF1k4xFs)R6_?mQ7JRlsV6)guwoQ{j9nM4ky{ z)!;oBylISkA?ztd)GvhrWe}+oeANizm5?6?k$Pb^tvS9HhPlI0gRp@{r$%A5BdjzD zmA`}6EWCP@CJxB4f3L;y@khM_Q zCe8~5&q@6DOYodUK@ATsVrLpHT*X+bb8Z)ZphZJBamhf4>=0XMAlfOu`Uj?Wi(4r& z4>80(%7`22mGTh>CBfz%@hb)a`ikE^0Ol`7b%m7xu^)C@F@fS%T5bptS=#lvPi&#L zZoin6424i}>+H^sD9z;1~GZ9%&&_Qp;dCSPpV9@ri6qe~De z5WD2S^j&f4Z1C=hj+sy>6pLwsQzS+efLAOor(CK;?BWb!so3HItW0eA2MXol=aleN zh{5zYs>F!Hz#fRt76Md@k^>w)6r*V+_>nl!4_J-3pXP?O;#{f&J{8Y>1S_w_zbU(D z5M3%^x>5Xm5+Z96!-v7&TQOG&-aE0+Qea!98k)dulRRbvbCR5EA-PNH^*&7RmXc`c z(L;Jp<#DU&8tIz$x;{EiIpPF+y&klsUPX3N}U!Xq_fg7>NU8UX&J5=6^}Lb_XIEl1LeDru6tz*t{(1JRovKnom#q zs`Sqh_{);&(tu@4zIVaPk={}VaZU2O0OECN3RNU-NOv*-a-~mbx|%1AqGbK1R6q^k zmNbnbyCe0YMZ*HA?F?ACD}6=dLy`2RCvIf1)NTwEN~DEUIVqJ+xx;js^cN+wlVtbu&irl@~qavOXYs%Aw-{yyQuA=e=b|8drSeHhX~Wk&EcI`pQ*R2*OWZ>I&js z`L-hz{N+njst=HJX}e3Hyqt!YAo({+YJ%luw4)+K9#9R*eR4k3`+IWIYXhhveal0m9`Z8W;}C>F>ackbUTdJ|YXB!uwHq0oB%y$=5Vc zkCbg+14PM%L!oe7R#Dy)E$`n8e=+jL?_exeey|nyEKdIZEx-xcKsBV3ve!x&J0%}u zfW^y68(}j+p1cZriE>BUUXvtW{1+mp<A{-wiXzBCU2z|`neoTFUkvf zg#hfOykHR&>SRv_*em%nGZgCO@qK~4me~z()F7vP3}cP*o)00}B!8ho@Xc~C&9dIe z3wMIpB7fHxdT-^P#{srzBENwLN6mU#H{GiFN{>wWIceTdQ*+iduYqY7&09*= zT{T7LU~{{seG)|6G?7nWdWXh!6L>o{+j>L6T{DB$0C#C-Qu4K1linX99-4Ox06aB0 z1`xe8K~!1r)>Kgy$4B$(V<_y=TpIx3t2zE2ZnB@IKMhiQH6fHP`)fK<>j==?On}=! zO(eZNL7JavRuHV2LNnnIO$!gneHtHH-ruiT~fxc+GqrK!PTK{t+Qj z({?y`Nt#kxw>YhN@c`<{ntyA3&i<<2E0>V$Bxns7o}>RG28$ z^q^FwOw+~zSh;5APAF7p*3ovQO3mf|2=KlpAP*r`X{x#bJkWHc`b)KD5-n*x)c6-b z?~z8^3!p~h_A|g^&5$1<@e$=5wmzJkz*P`R%#p;tYTnn!!4Nml}5t z;nr!!hCuz5=K2W`>otzF$^Erv8cos~G?BC+qfxV9Er?B;WrIc%QP@}&T$v{Qb@HN zy{7&C7r4Eyof-ql8`^cW;GL^IN(Gxd?FCwdys5qI4ZU01;PLQqTl-}^hy~i*&*0&% z_M1fT?rF!32C+~pg+Zi9yNllBV(ryrcqq{>?*d|}_B0iw%Cuv;gIKQJSOk9+TBoj% ztkjOBnazEzXJ24d+E)QE{XjeFCn!{FM^VM)q1NR9tUS_=u7+NXb_2b2kG1V+Ui?J+ z=}bu0YPXW!Q|%L4@_D8mvm7GNwR5PSc%hw0qth#G(HIcxwf`K0mDk!hD$z7($E1ST zs4XmqdXx4Z`)(k<(axnU+%4LzXKOUDQ=~a~62pbv?d;2RGfn)HCeRJ?jS# zJ9PoH66&t|n5N^qbk=uJ->u7|N9>_%+6bbjZt!WSd+EXwA?dA~Jpq`HZmJm~dvu#S z!kDivpI+kWQgv4Gq8O+ zu^!ldot}1E9MB!3S=K>a3bmC`U3fbDh3U4@|J@zZx{z%Ek-G2zh(zhW_y8iubq9{ZShVgHW$-b&8#Ms2x^>fGGfo#v zYc?lz$C{vUQn#=W;FRt*ZQY31b#{Szg0B8GK%(vxb+}2oDym1O=;qS1J);{=IeV(k zpWdFcy1MJY&gqV|130f+Pm7*ux<-1^7j$Df154M%(!%XU-RT2xbV=uW8X!aWIu{-? zbt{X(yR0i50dPgPl2V7Oy3|i#EK4_U5ET@0jqeS~8@jo# z0CIIkYLvHh$EzT6TbC3MkgwZ96UIBbsokMopu1;;e?cJ3!=t zZo~m#)w(vBu=!B;TR6Nw(#h1#)ab@tM%0gW4dcOkqO0BoVy(`NCg)Fe6|@)RneMp= z-gDhcDrmgWbvg*|FLh~O!%CgbGZ1cH>HemdyhS4%hgYE?lyN$X>KCsfH z`;JydnspJ>)4tKIp@K$>&hLGIx4KhQpMR(Gp`LcL{>?#PTl8~j(}<(K@iSms^-HPN zyiH&85b92PMNhbO)+do^7yY6+5OLL;c0ggfer+d6y6N}61-3&!We2Wrr~UwCGw%BS zIndjse-sUo-TJ#SfQNoPwPH{GBu|KV=_Sgxz4d$-sQc(gC&R-Y{V*y|`RW5{H;|vc zgjO;3>gQ5t<*)a91YVH-y`GQ^)?4T~gy<)n1h!AVoEBa7>wo+fk_Yr(&Hy;5Kl2eB zh3ezJ00`5&Hbdc%eko0N!u4}$S>UjKZWg>p=p`y=9?>tRUjL~6n>pYe)BouOVx-=S zDtl4--f;lO^~Y)dOSJwoBW%X#ooOl?tIyvJ5T{>6^RW~9t|K6MQop4=OrO%{(!UMG z>(idYbb|iZKoAr4NpvYm`d?{R&uP6t#*+18XF)whzkyog8GX!fTv4jNyd2nBJx8tM zoPIkEnCJD!|AtxPd^3X4Sm8ZsOReMj>HYg z(?1#x-c5bsVt`xvO-sSMtsg)mP`=(t!qwiC0$VUZ@YC z9rZ=}=X-$_>)TWJTcRI8{~2AXKTN$wg?>DRTdCh_0=Ta~<^p1s{&Ip6Ev|fkLfbF$1wY)rZo*Nj%egb_e!c-|-E+ zztDHlK<}k~S21o#o&H<^z$?8r48(f<@^eslt^e~MU=4bS%36(j4P9-MzI_W!H|zgh z36VGYZ>Y0s(ZARS-dnwSA9(NdH6K7>v*GC%@VCV|VJz*` z+ikc^!9>s9$Iyf3YI_WEv~u8UpkFp*{0t#9>)C6N zsify`$ZrRQ0E6xi5CaY4JHc3x;SYN5!3LeZK4I{u(&Iiu7wXyf8wQFHIbb+Vdn67T zZhV8_Lk&Dly}}InlxH0>Jf`K!aKkt25a3}$DJ_#7H7wf*@5c<+mII44G?zmm%J3Jh z*&H{Fr%or@@R+V4#^6RtMyw(C8T`c=meMGC!eG7(;z>jP6~uDN@D-)!@rJUmU@XC~ zmG%iF8orzWVv?Z~Eg+mWw4tg)vSBV2mQoBehXFfdu+;%eHJqk_@2sJbTKGA`$Fw?d z-XKvWG0osgkK=-&gw~eQ4W-m$UNn5XAH++B(w;D#VVF7)#7u+54SJUiM=}xF6~ot0 zp>Wj@7mpya4AvS)g7#@2; zz1nbuN>C3Cott3#kzwy(#8P8;Fdx`s!~4{#o*1&;LZQ~+N&lf&Z`k7m?6sk-H`E&p zzfsk_(eQ%`R+-S33o;I&>T9s^Fy(_G#$B{{vd?&da;g1BGu28C7#(Ou?4a?? zY=BT>coQVUjAv*|z#-!psv3nGn<$ezY@9?Do(N+e)z6L?v0D&L#`xwE6pk5N=*@~W zwx_akl<{v5V8@M}8-Ya|4^{)j7<l;gG(}o*Mee5eXvVP1wALTqcbmR+0nx*hMFWwisi6SsUM8QPLG(5S(54C> z(_GpVy2n%!4B%_>@CNWR&7-ZQ`%L2oL2tjw=^Pv#FiBMBJ7{vH9onI$W7O=!Oxe_5 zA2NBbhh(@(lMmB}O$R8Ijxb47!arha?*(wwRKEft9Wzx@8X9S;prJ0xG?V73$4wpwl$yR+0Z?XAWCN6&dOnBg3X_2vdZnrD97x_b&7mNwO#LqdJTQGe0-)Ly?Fq?; zre`^b^O5Nutz_4j9?%l#W785^P{kUYjcaLM#oYaeHC2(e#Y^!6wt!v_YWRWSIuu8&lHzz* zJ!#9zJJU3(QExWm)5vHt=124s0gmQ2BVlu^c>s-u+sqy^fRlM1^##smVLC7ua{~qM zY96rzrnj40y26T^dH5jkc9=)k1MD=fq++VOd1(XmcA10UA*9{rXS6TY!#s@2?Ve_n z9~^m^XZu0K+x%i5M10Jh=pR4!m|bZA^EEqt1frk0dKg6Zno|=&^fxE8h4!NyHQzV^-Z66kjd79Ytu*b7GHX7EmE-1F zXAwlS`3UXMh%uj;3@q0CJ#8M3Gk^9suoLEr;ZQ$m9zF^ooifMRU^CvF@d>a5^X6vQ zOf>u60+wWce>Qlh%{TABL$Y}~b;c=XM>p`!n4h%;G1c6d3hb=;3KjIvnGc1-!v(V< z1Cr_H1yty{Xm+JNJeSPOc(~0lryK#6Y3@l0!DaI*T6w)g<^|cnZka2npSW%Q`vyS1 z`J=ty-7z~-&R1YAyae^T=Jq}y-ZOXh1hLQ@x*8se%)@=bD>na4yNgQ9C6uX_nzJfl zrOYf+URQ1wAK;2A%!4{YveFzxY3O}({wKhy%!|GU_P|_6Lr=B2fFAKfb44hw=#klr z_9)eun<>D@W_Q|c{={q<2&~q8=Uc?`)O>~R=QH!^J;0uu7dXPv3-kD2p#I8SIviNN z`G_y{UYj4)LbAc^8xLZm`7i2|o6IA>MG(#ARl%_N#{7bE%oekH7_hhI-Lx6woq2By zLfUNka4vXTETx}8-O+M43L;xAXWBu1n?-yA5f{q`G>3JyO#K4bcFX%T{<&G&(PU(Y z<$pS3)w_QZNVV zA(pvc0_?L)ptiE#Qv3|yfTfWBiRPds;tNQITE3y|Da`WA_aGj!Je-6e!Y%6i0EaEL zb6_*V(oDtTBNkI3h(|3?gMb~ggwn3LNQ)m2VwC0bI1rCpM$LnjXv-1{crlj4w5d1N za`Y#FILqI;@OQ%EKMNu!EwjD^cFLmP0uS+)rrEHPVCgpzRuV01X-y-^vfwGO(-wIl zE;`w=kqVe8mKi6ZcgAuy30SJ-pOH{MYbm0){G8>hMR0rGl5GS?vozBj{emTy2KIDI z*G2?!(XxyZ-Ak5!!(ckYQdI#*nHDcvPrYo}o(p4FEDQgDv8$H6&A_rObq-L^wxm$X zm}BWg$=)?fB_$x&Et_Z=;)W%I);Du4F*L2tv(&``yJ;D54!m0yFG_}PTO1<6E3i1U z0k~^9PCHERS>8Vj$wJG&Hb@p(9#Rdr*m9GS{1VG*N|Z`1n`ynH%<@43c;%J?8eS?a zeX00YX&Fxe-nZ;*fQKqeAZ^ckU^x*CUbSU?9l%4&)E1~evUpJnS7Z5_RvaE%_EL`W z#4?JScCBU8XR!IyBD{j+GfVg7u=(7g8U@K0mMPaD`O*?i9a)_vb1WoZSw>OQuD2-Y zb$f03J`7lcW*tlQ5GQNgTL5RPE(_`|R(~GA)!H)%R(4po(yz1a zv~HrJw!2jv482{}3M!HAwtklgqK7pr5Wv&gM4L&ytY5YR=56(-Ox(vhxF;0$SbKkt zAbhQNR>6^Zj>yMTApdOaVK$E@GcZplb%I}6mKteKRMAGaE4i(#}ijAleJ*62wPiM1};29Y?c zidNE2Sc@oUIB9ix2i_@bZ+h$Et)ANz>=-iR3S*Q zmW_b-Ggh94@>J`<&!KnLdiF4|bJjuBpPjc(m=BO)uOAl6#{ zqkr;#YOOf|E6=R^hJg3nx_>3~URY<+GTBRO2O62{toTl^?szP9gH z;}-bY!l*ynYfJtdM1R|L+AtGfEBOq(K->BR5QA*a??ErvrlCdh5Zmy9!1mcfsvxr8 z_OA=B?|?1rG9(Y$#yS9m+CHFyaG34f5X5=N7D^W#Zj-AK(qY@G$5M%p|hPqgrhFU5y# zKTQf#ZA+-Uc;5DmlFKw3LklYxY_2r%OSk1l!O=xq2byqPvUT%-UWP5M2Z)(A%ML_+ z*;Y!O&J|lfntENeeK#4zESp0FjAh%#bOkZT7DeybHQUPq*t~8FdRKDfz6$gw!5|?LxA10b#@1@(3YDHg(BN$RPijf z{XZOCcU+g%_qSi#HY+PWd+)tJSXSE7w6e@n89Z3}wnt zlp#YvK}1AQL6$7p`}aQIzs~E7_c`}@KF@RSx#!#m<~`33;RcFibJ`r<8$^V52d*0c9S(IGkWL5R2$*y^ zWKzTap+gf@;kq5>z6H|baA_Zey$(8Ruk|@3(uV>44!`~f?vcata*zQB51Kd!9e$#T zddT5Q9s&(J9LobY;;^2DagI7Xx(YJpu>Tu48+SPS2w^82j#2ez(&0}jd`>x-={(W2 z!$Zm{XB790F#JEDYkKz3Z$bQC1AaDm58;&8YE8{&DEDtjL{h)JW^t=ey z?hG$lxjYz2bWZ0GLr;5cPsYh-A@pK|QpV!V(BFoo448O8sABrwWp3QA-|b3jfrd_P0+owDGc@s z_)KM}4ncU9(dr3ujxfpIb zkI}sifcuQ=Er7Q$o?HT5E5ncj?g8W9cR|`1M#{6=8P?xm*}+Il0O@25oPn;3F>QeE zAtR8Expp(wU&Y{i7*EqO(aZ3no7Kmtr%h8oWUMJe*eS*aay`xXVj6%M##uVP?ZkXY3%fIO zj|;ec%!S(kaA96~fOz|v2{gqXV1_*ez?JEK5S9m-%V?ExVo z5Ww8_AtD4a-6>BFVoFv5ca+I}3tTYs)pD4GFwe>X2xYcV`g4rAgEE#d=E5Vq;+fl9VUoa{&IT@#8BcfqG&70LXPsfL{u=R;m{$6;0?EwfbX!xHY)Xw% znUMqF&N6$bbbO9!O8_p78N3$4bY?Tv?lYKw(5#Wk40#e>vY5GPh?mWLpBmHWnap;? z%VApR)y`!$l>(l}Tu&8=d}a>)Di@f=wBBB1@=HMqn1xhry2KpvhRJ2-lYTHMWG%*Zal?=Ua#g0P7>m;_-n^YmJ9cbP70m~ML)Xb{{0m{bnC&0K%R}aL2`syr z-wa_$JQ@0U&gATe~WUs2%JT*(*A`mlJz!a=~1lVm!OMgeMs|C3~QWz_Yx)zv7BKAP<=3o6-?!uWY**E;8Ixs&~u&2 z+SZT3pJiRo2jCn_JqxZgSQj|(lF9mz9_TFA@~2^$&Dx*=?mX+A!{BmQGwWcP%c^e% zJdgFX2wXm^l~R=ptd2-<7g;Om97_Sq^ECi2u{vm1ewlTUR*OPb;Lp$%v5qz(LNV(y zIV)j36$1DbR-OQsrL2J2(3P=j>F;ZmvmAUOtY9%Fz+Gjvzkmy?WZl7^37=EN%BLK& zn&ln^?i%Zd=P~%}tdvE7*Ra0z1Xs&iO5Y9MVC|HE)UkGJpu5R(*aAR3tB;D)w^&;! zBWqy2@HzmuSs8Rfqmd=2;`ANXzm#U*WhL?v=pIW=S>Aot{FTtPuzcviS}W@)Wn>Rn zPt$bR#`2&?xSi!hjhqfvSS`3tRu#RCT`c=EaQ2WDLFKS+mgQXp>R|=_36oyd4VtL? zSP6l+A^oi7xgd{N9rTB&2Uv%O5q6OE`hJihR`ct?4YNFgz>Tm5tnfL?3S0*-W2_I8 zp&MtZPJm3XdTt@?Bum$UcvCDUZSkjB7wD|R3~SSKfIG1hJ%Dp&%Rhr|AKQ2jIv4f@ zIvBE_EqV#M1MKgI;l-8hOXs={vfVPkxv_)jPyf2JFVfrS!H%}U*&()s77b5!eK2rd zY!e+p@MiO`0^q~`fKDI-I1UqEb|t+Qe(ZOs`Q^`cqy23FTks1^0@>Q% zL4w#1sQq-5{XQiGq3rG7!{;%!l8yv~vGaYvg|pwG66tX^|5ZefV0YERGLr2{WuGW^ zDCM8g>{=0oG3+whew<(@-vfzdN9bU3k{!DQB#!+{7vQJZ^Qkiu&+e3gB(UQuAWUR$ zJO}PHJD%DzXV|~f5sM`D{vhCz*)6}qB!&I;rx2#H517E6Wj~?D0MD_%r(J6rdx9#+ z>Fkw{Ak1KYS%x8HvWuvBnZtsbag+$0^n9 zFV6sXjs5Dk&|PP55rNdO!#{_vmi_P-kQ?kz({MlQ*jK4Jdz0Nu#g%&Y6VxQX#TGve zu7Pc$7yUN7V?AI(HciBs5R=mgl;Cqn!?5;f+U<*5* zno6zge(JqEV4uDScpLla7;x?E^$VcuU?=?uu9K~y$*PMTxed67?AZ5U+0D+RG`olW zWHU^9*^T!xh(2~%0WP|qt*5#C5j%%IZ5m*IPV>?rJB#Ms5%$SMn2fUfuRu4(mV5@> zI6ITdFca(^KL{t;qjO<7#Xhkd+%)^zI*=K*+heeF=FCxn+sC;|?HL!2=n*XUb1LaE zJ-}(=!HX-0b05P!$jSW}gK*<~FdxL7^P~-y9-Or;fFI(lrL&Ws90g6PUL39g#GA91 zDs4WTa_SEFaxM#D;>XEO1sA~CLiN@_PICuLf;dka5dA1;K6we|jBW)ygtJNlT`1=u z6)lc&me4yE#+gb37tU!J0y)kZq~$Y$)93_TBwafHuA&YzcnJIz^0`|vZI-p8R! z;_RUJHko6k2`Pp15^eZXIq5uH$~n$^)c;H46iz{y&e^pZCRv<7YHVh6zNCEqJST>B zgE<_hC9urp^wIt=k8^DmbQd`_C*Y-kqo+OWCC)aQ`HDCn?}D(HGk*o5mvDNYhVTl< zhpN4$97!84rHm7H8C*H1E(5v>j-eZazsmWV1J{+Dj5p!Bit|l0NHvE^Db6)c!7y~! zIRzhp)NtaB5Y}?Oq(aCIPVo;A)^WPGLU@z&DLw44N+?SjXA)dQ|GQb3G%bS3o;o5(PFo}Dd-j!tTvLoP9xK~~S zN#(ZCR`x9S5j7stxutKxX9jm`4}_WA+w@kQ=bHOKa=6pYAi3OEDD%kUj*S4G&n@G^ z@&b1t1*DX_l%BydZd?nva&D+A?n?!Crx3WS+;zL+gb9XF&vuoV@ z^t@c>Mw|gx!)?t3spZ}_0Dgn}!cB~&A2D#1sfZn4< zu9{jDcermFA#CF2g#&Pp`^6gQ?sE@O!?%Tdmj$1#+>!$r`~z-&D@@wB|CPdLJ2!eR z;2qp3ItbRued=Y9F79`0VDgZg&jqfVJFp*?J=|EzX?wXZ(PpcU`x#wkKQ|-~mXEkH zD!dGExBUTUgWRt52s^};(BY3^?xJjv5pHq}bfa7o)#S#wAJQq4ac;yya1-1mEznJJ zdGw1-ao16&ewyn)2f`Wd0yji(;{CN8@tk=P)F|G^Q_|b$!Yi@>?#gRj1Asd(nid8R zUVJ40hj<}LAfCM7&oOu}Uff!kc=HD7=!p-{kqY{Uc~8-ar6at@?!lQa?;7or{dgb! z2NQo@D{aREcvoq{4dnetHGv@BJRJscl((Ci$Eoy~$V;Wo$Y~z`C+L!R#eD!I^FA?w zr0^QXV3Nuk^aMG}`|v0%&++b4cP@?h!b1SkdDU`^ERz>R>2elt6`fnl=5=Pl{&7(#LaZf@ME1MhfzX*K-)U0ba#F$tee z{J3CTiZlOPDjx0QpQhKsg}=5L@cn!y<$MSDN?KQ3`9Aalx$##~71f>ZvK~4Q{-Zy@ z9pVqP!KWvGhCYw<;xDDC%bPzx9MS#w*J)1n=i5#L9>Di_9b*aPA2Ndk@xP(%TrmHq zt=7F@Gf&UP}3Q9)n34 z{|L=C<$PT-gcba+=uG!j{+vtDRq})B4{}uV_gqATYy9VEVZYAz{Skl~{+E;x)bhv1 zz}@5@&O?NH{`N}{-r`q(1Iq^ft_%$6Hvie*pljq`3jn#pUrf(n6F-4ABlq|nX$W+m zA52a17XB&f5V!KX$H6_|N94gvJAXqgOgi{~()!TJZ=qu;5BXu^5O(tusd?GMze?Sm zUViij0Q&fm?jZeqEhUfx{7U-a2KhH;K!*4czXLGLUw8o~BYcAZCZqiKDNi2f<4?Ze z5$6A3g0o4!{!Nf6e$zRSY5rqWS9BI^zKrPm1nIsYE`o^>2=@yLJ#o8$c2T^I{-8E!aZy=NW-ZEl84J z%Si~61<%kVmm)Y#b5E+kSq<*2;Q0tdI43wl(^{HfF8yDSbiu(s3@}4b`!{}$Ou_Cr za9M(vC|S=I)U<${7wn`_=L$-1fXfqXoQ7q-Kuo*V0zoAGMwbMS*>NW>3+B^2Unm&s zgs@0(Fa@|`fo(lV32p(RUlBM`gi^t|YM7J>x*mX(3u>-_R0#fD4%b%&zj(v4QebL= zvnqj>rjlyGb8o`SHNmX~;I0c!)xo4jAm0aEtzdvsqZ@)iYB$#je%k`en}U;6^Qae0 zR>I3If#U#fPlMoZ${B78$|%uo64cUi-7FY!g~?sP7k2=7AQ;;Wu1)aw4*;|aDxZR| zL(t*_VW;35ntr*=DsZE|%$OjVzN8x$yh$(6gn(%RnG|$A zf^JF>V1?zh;9n|$%?R?TOyMMai>4=MVG7mx_6fIBrsE>aZGz=~VZI6`2ZTirp>q}1 zO@ccpOr^Spn{ccVLU-Y&GZ1K)!pMAt%Sz$;u+UDsx+6j#ntpwS zBQ&4+3Hk1T`wPS9#8QAzD+d=S+-U+lNGLM{a8$Uw86;SEV+Mc_VgCtmp~98UFgYeX zCxI|b`0nfQ87}mq62@`ip=xjuLjKbjOQf)15L}dS4^=gzg+F#e7$e-f72FBoKMOIk zSfNP=+)3eyVvsmtEFE7vCA>sMgm~elzd#a%vp)weQJA<813WFfI|`FC!aD*8lZ3Y@ zSx6ObprTru&}@UxbfK*TxD4U!FmRc|8?=MY5^AYmoGsj64)}TD5hsi+M|gv_xw*ng zx`TPbcOQc;Ul{)cbQgp_#=-SP;YKfz0^#IwM7Shuq-^`L&|t)H3x%T&&=mjKzy&VsPTj_~x6Kbh|(k@KMg|I`|MD^WH;kP9ib(gRr z3*@2DPTSRP;g9{`dW0@i)9DpHei67nVIfrI{Pyr;2`5%V^12So8y!gm#&dIv)~C|WWLI5$xx2SRtzJ7Pre5Lu{m zen?~*hl!`?Hwic|(GM*cgtut@et7W_^&f)nu*mQlbVo${3?ROuL=BwziF7+*=`XtI zg0KN1ZZ3p@qEYIg28mi|YjRXHM)lTU(Kl4H3K89+MqH>!_a!WkiHtN+hlwioKo~Bn zrOwZB(P$vTMu^@X#DztQ9^-&SiN?!7qD8X<;Vec}L{HC2QSlCpB~H{tmFH8UBeaCX zi`KmilLS!*^@|fl-%X!AeNWr;$cf-YNhfGSw$MN4*I@HwKI=P~$P z(SKB!$P@iZkAA+WtsQ_1q6eXXUlgtX6S@MClQ+mE5&Kh+%c4j+4O1w3mHv=Gk?3EV z)`~^9cVV1mqGze@T`t;i9wrr{ZdyC8iAMi}$#s!S8c2=k$~{D=72RHd=r=?nI&DxV zxlpaiqw(JI(5^beicv>V_0^E#f^C6fx ziEkc2SZDG3AA#E^_J0kWi+G_FquwvxLSI@R5FgtLxT}~~2>3yCQy9!9rz3qFU~;NqvCaR^f_4k?&|=Ah~K3nW1-^i6A*@rH%$R> zT-P}Gh+p%7A7$^4Y zfypWHdq06Bh&y)ymne?@7V%Dtzo9nS8S&Tc5GIKmw}YgJ-=Y>ws#r?N^I0*M+N$To znLog1nz$wcT)OyEx)WLA8&;5P@yVB9d0wo13c4KesyA@8x#D+3(B+A@zYUTvKJf-j zE{OZ-F!x3AFil7W;tHC6FNtj?xV|i27YtmX*pV9jMdH7W02GV0bkQZ^AUdFPMf@}M zK1;>RGaxJzXV7N3T>S2Jgsl*VO5pRVIOquoE5#>h?x_+tP@S(@y!~;IYvRefFu5*% zfik%o@ny==YsJa*mtt;+H_(l|DbA$lvtHal2TE>>FK>ddQ5->~z&ql=U0CK-Vwcr385-{^ccj85HxAakGZR+vpSI zVe#Rc;6}u2{sDYc{CE+bbxL zND64j9w@ONfk}{LCH;O!C9g+87c7aUqG522Qi47lA~;pddYVb@0R2SJtz&5 zN$UIFmh{nvzfm%A62d!@@?0kh-ICqAVA3OTrHW^-lHIiW4oHsB#4;#(^DB&ONU}-*GAv0fMxYVNGRojbB~?SP9Fsi!5V&zk zBQ0PP5-UwJlal*XaGR1iP;xRYd3ig8Gm_PbAWqT^^h7#K4=Hea_DNgAfpd|1(>V7_ z+s`1-0cjm=CS9dl7D0GWy7CinZc@EJ!n#Wn&f=myq#aZ@JtSSY7;sPNPix`ROZt2V zbl%dhW1#bqX3~mxSQ<$GrsRmUq!+Gzr4Ap##80}BZn?koXIF3m(wKaZKe>k}!P3x7cnOhC9YKUp=`1?D^7>PDro3hd{B?PkrI@r1V}tyu?XApGEn=#!C-V zVJSgseF3f$rOPQHI4%8zN-bxkK`#N2Bz=q0`c&!OS7DMS4L$^6y7bPE;4-A^%m8Fc zcQ<1!S<*LXzRs3zpn~vu=_<|)BJf!8cVyZ%hJfZuq>2@8$gPr6Euw$OSjQFRwDh93cFXN&a_1=l?ES1gfeOA zZy@E;YO38=NSl2S;i@!hJ4`C2tPyZkQXwr9)zTB+0e(%|Ek(TR()X!xR3j~+=1Hye zL&_CzNPndUbDcCl6Xd2;5dvMkw1yJ8ThhB8APv%cRBgH~4W)u`qttf?$Q|kG)zCFb zkI+V}S^9sJ_uQ3kP~(d3NjJuTyDvSw4!Ra;S1g2W(vMyNpk4ZZo8hcO8bUk1PH903 z!gfi&dKNw(N`GfS*em7IU*hPKW}k+aeyN!9$U&*}A#_919Gd5crQg$Ta72103O8$1 z>ihz@G3oFQ04Aj(+FMLX%m3GLkd`(AFe6>L7lUw;MHj)+S?04I!hJFg{aGs)S(iI> z`(>Vdzz@jObeXQQFV@4$L7C)DjM`0RqRiM`wwz7^dC0hr!}5^qGfHYaWl@vx=_QMy za)YhWp2yB1nIE&LiUOu zNTlq^w}6Y1<-Lq+h?eb)03b&8#SAP@$X3&%5i4^_2mGY$E(d@(*1+u3LK`zOnC|kQMV+Vm0%KGyVy+|fF2SBmRNbhZl>`TfVugGeQ zFe#O}(dMU2c9Nd!a@hwzV=NW2H6KEERmP<(s8SX~Z(NmZ$O)F!vLEQ2+%;L}T3B9} z{XvgSjm(MG=~|hbGNc=_YHtYZWOLhLc~hpQN@=|;j0N2-S$_|74YD`>w;susQN5>8 zrg|ABcVsCvAvMW%Q6r#P)=U+;yRz_o@N!R$pp;G7B36d>~tW z2Y@!&3~d0~W&AA|S%+-ZYWVDwb<%}($?A4O_fWQiica0K6aVY+$$q31pjTE;$!wo& zCH*b#epzc5xJRgd?9p``_tauT^?ft=OO>49GsVY?w{bi<)bTbnLhF=`cZx5D~Cb+~i&csl~c$VGF(osj$f2QF5g{tU=T`C1Q<|fi79TX)^#R@}1PwO_hI4 zcj>HrRWZmpdFUW4)8yPRI7^o|zJov+a&ZW_O!+H+!z4>SL$5`)e3+i=^YXu_8Jr`( zPwkmpxsdk#dGdwNL6|S+(q8m}d~*u8i}FXbkuH!IQRY!7cc;c*k-Uq_-^KDA+Vzyk z!*)P-MeY*`*QN5yw8txx-#q}6a{1fznLveHPKT?n$`4Y`S1Dh13MN%@^D7Wm%ZopS z$u;@SUIe->kD}dmjeKz!eAdcm(b986{y9ajlfOjM+D-X8`RC4ncge3mkDueAeEBhO-E#d_0D9z=n_$u_Kd>3s-X|Y5K-Vw#q{`4E`5&}1 z9gsi!HB1KO%cx#3B>#t2-(mS+5x5cg)}1gJmA|zCV;Pg@jAJb0^7pF2O~^M>)o4=Q zLdo-t{QS@0oD}nB1MaMFrY^=lg=`^QyC{CFg|q#Nd3$lu2NbDYu*B&JDjOVBgs*|n zO|dosoVy~QZkC54nF%k46ra&&5S|KN2H;+bNviL9D-O|g@1r<-3BtpQs*NB=6!DZc z`6{|;t@2Y0e+SNAQMd&pK+#U8rveo(Qkos4sG@q-QAHN5=)sEf^t^;9&dtG)LKQ8a zf*eys8!-4Vh3psxAFlXJ0&-j-pzJV0v6LR#NX0XAA&gSorZ!--VqO#i#V9@=LG%-f zz%T@gRmj>wPAb0s0lGNF8|A>AQt01?FkaCf4rd99ZIsq0D*P!ENK#yT54u!^?^;-% zRYbQS!a0S;0+Td_N(_^9MOGVh8Hyddq03Z!@DxavV#7~}kgdpU#8}QN)|J3Zo?-#z zFZqh>)ev4#Jop&gMa3Ib>MT(FL+7tADVEU9wy{JS+v^ zmg3iEAZ$>0(w~64qbPR(ph=O|h)Zc!?4$b2eMQ0ZuxwEz1c7T+G?34Bh11IzONXN2 zCkQ(g_sD0rLQOATk7Cwa5cVo!$mb(P1KsNZMIHlWP!U2tM-;_Wb{$phrB7xY$J{R@*L%KFbhe3jb&^(~YsLDa|zQnu1Tun^^)*Fi#+ z5?a-cDLV?m9apaV2G<^;{ACw>Mk+h0kQJk3{tEaBrP>WXW0j**uso&QO-W+B(oA*Q z1ZCtJ2+t^=KLnEulv}AFd`DU830#vhmnsX*%1)Zr?kQa|fxEAKhq8ngWgV>+ ztxEYc0zFW^Mqh-tE88fW=}Em46Py^&{oWRLB}ou9AZrRCZGfZAh7_gtK9#&kN9vC|7&~z^L-(C2(WP zPv`|2S0?VqeVI@`Nz3P?@?+|@%qV}_jj&Ft;QxcpStYm!+)OO8*#0fGVgNxavwWoJFZt(*7t~)p8dkMio?vcqdhHw9$-H zm1RSCN_BHQt70lB$CPpUJ9Mrl3nv{Y>Yc zQdO&|UwlsW3H3YDRAme}OIKA;-84g0F&kW_O5=x-WvRG-!dbSe@D<>4R8yzH<*GhP z1ujpugT7nJS1qRo&;?aT1#lNtrS#2DfojJWaCS*`dK-k7Ra;x(tWfpdKH!Q}@&@RN zRqwwHU8%}k3SpTlq!cFQsvWd5tyKBe!=y^}@okW5mEZ`-HPzR2nb%eSeg{&c`r;Yj zYE^z+z}--Z=%e^L)z(1>Z>m1~1H-LX1?Pafr4k=OpazwY^19oqD<6StRQ)uLOSz+3 zM%%|G)n5-mnpFvE0Pd>h(o=p1o@=$eb4oJ5uEe)gYQ5E;VORwq-)xr8y3mV|8UlmR- z*CW+Ddb|fzch|#YP*q5umk+6OJb)WkNvL`^qPm?8ZdCP02;gI?w`pA&S8cQaFroVD zF9;`90aVVMQoTv#{b`kKBfQM09Lj-nQr~`rQ9G;G(-X2!y`GAHF6wV6$K0e$9jG9}*#SQ_npQ;;v>OuOA0@VBZfeTa@QoSHp{nH3W7NSnL z2A`qo3r}J2$JA@-ykeL-a|z(#>N)QLa9o{CCBz8zFx{m{b z>T`kcazd@3R&A{M3mGg=sx_Vv#;KhmK~AaL(_tB}?#Tw1px!HnWup2lS)Nv}hz2>M zUM9vklhm*7L-b_zu3QLH)Eqi4kg9&37OAu9-9IAiIkk~mT50Mj5lFiF;j?g-p$?`m z7c$imLPW??t8Rc~tBLEG_RHXiaO6tYx1*Yirc*>k+6{eP{r}8|pa9 z{Oi=Sn!w#u>*>U9y}E=Ruv_Z(2k_FMewPW{ZS{`^gl$v@9!G>b>d)vho7A6C2fSGw zPPyA%b@CX-a!)N^0&-vN|0YO_T73n8R<*kZ+yk}V1zeljpYBAv`l*lMxZ8U1~GEn-A5ITflXzmry3&qaL+@^r~wp{pnM)ze4nW^|@K_`AGdSl}HEF9Z$mN zpgNqEi6Qmtbn0VReT>f2j;K#0LpQ2^D+t_}+F*iiTs^c2(I?bD(gQZBeuCb=DfL(> z0!^#cFM!Ob#fcC)Y5o{P1ZU05wA$~}h$10$(JXC)v;7)TKXeB)hJ$eCs#!{F@j=bk zG6>x?%^$$TT@y|(7aXy;Yk4CGfs23 z1Hx09SN@k0YrbPbn4sZPcQsM-6xBG-Xj*9ho}}r^fG}ATMmc+m=JWRp9Mro1f8atpX@jVTB~4=pgqJmYsbf^Axq1S+BF%qO zz!hs=eFCIJ)1n5sqPbiJlTyt?+Lo1R-gygQuWCx>fK+N~KLx4MET_$RwPxu$c)6yj zqip-S<_SmWYBZH=Fu+<(;4>gMG;usQtJ8co50`RNv+xWCQLkxP4{}RmZ2_P`(?Ge~ zZHQ{#y*LO>>l< z-FD3;nglvDRafA%Q#0fPT$e`k5eE2Bv&INvx2E_>nDl5W=)g>`M&<)}pGIE`%YMz% zw2D5`)Y+gL&^-Po;tgsZe;2wT&DlfXhBbED+>L1J<1oNcjh5={W13_CKsc_+yNrvT z&}1kfoYbtQCu<5{>EK3AYuNPK&uE;-fZL~CuosptT2Fdf_iK;S3v^Js_)~as)6V}7 zI(O|}I?v##?ec`sOIw-)6K`$MXW))#%dZ0Gt9^74KK-Xp-RpDOCaQI%X~+GbOV?)EAk5G{I~Nf$wf#TfqO-K;DUrz0deU+6Tx}9H z)bg|^X>!ch-hBnGFKGR?fLzqN&<3YKdm;iRm$Y3$2y|I{oc4I-+J9*AuF(ERrHHHA z1)~5|YR}X5u}bSm^X@fm87)iKwZk+~*Ju}9gGrs%(hJ>9t@%Ib>a}L7d*9Md(}LNc z?ae}<+uA#uplj6bZ$`X3+VAO4t~P03{}o)bc6kb%-PNwp!OJ~uJ#7^pXn(N-*QTwe zqG-GJmKry!L;DvU>F?AImVoQh{!PzrpEfKFCjHu(B;X!tyQmvKp#76dvV+%1fw(g9sv0&uRnN;>jz zP`8yP2sfRLmU4I9J!)@z>YO&hiS>(20UTsMafM?~m` zjL=2uEEyoNx~5!=?4-^>b4Z-7i;qC3bcc_F#OprE2T9OPQRzQf_X!njQgr{VMub$| zcT|i!t1Ec{x^ud(Hi4w+KFb5i)@`CupVvL9h3g#M!yE{6buau3T%PVG)o}B5DQ6L{ zK=&Rc3zu|rTjBb$PIe!H3Emg#co zuj`cSod1Ng3SBI1ey-`(e2I}=*Nsy?QKP#_%Wkc1{v8N!=<3bD)#)n#_ekkh1RzkO z?*2lMJ3661yfo=rTwv0yi?joGSGVqKkO#VFK8CJMxAi1QyKe1EaMqy<-3ijEyH*a; zrAwnGL7&bi6@Y%-GwZ-T()}0>-GI*d9L6%JTe=mlhjdHnVHnjl(JpdKcPjv7T-Qc< z`GjsAtrnBIf9VLqly2rOgwwi}RBN8mUHTfFlYSZfZ3<`oWGKAs(?9nPbT0b))IxL9 zr&EE!U7s=moriuQ?eq`n6Q&^a)JIdg<)#1C3gWAeqb`P@{zIx<`s){qKmzn1(-Rq} z|Co-l2I&{LA>J|lqT|qo>Hi2rpm6DNu<8@76QfU8)!%;^&e8j zB~HJc#&Sx3B?-8A{UVyk67&M9S)I{;?Fy2l=e`7Cvc7W;hLoazj0G-LFI)^~XZ7E< z1Abm#wFq2}e#3dV&edO}%6gvu-g@}V*IR#w@PfXalFN(woD%>P=sQE<`jURzW^kAF zxmRIXsDG3LFGYIuR*+)7z8IuLKStMZMSpJ@EX(xUYH`cU^)*y(uh47$h0m+{*;HAt z)Q{87v|6uu3MSX|OXxf3>-zhv;H6f7AQP51^n3Kc)#PjMN1sd?e3L$%R_11X9wnuB^(`*Y-P6m?fV;1sPxD!eKIJCJ1O4P9_-xak zr4mNFzTOF3hkgUC2%Y+u-v+KrzkufJZvE*!;Cl3dW?1&>7iWR%(>qd0p=#Elz!A<{YiiL9MLOgV-TbImtKQzOkYA7;JChux-AoWN9x>7 z>dzO`^Qm9D5tliw-*_Fm8U6Ry!8sX@6(Eqa!LJb9KEvwY;mpP0Sqx9A z>x3@e@YDzZ35Mn;K@tr?^iC%k?7Lu@Y{(!$is2o)^Qnf>`M{ku?7R=*Im0Vtl4eMu zJUQL4#}0Ug;YF&`W*Tl-5k1SWe=$h5;l&D&^9E@PkFJy>pkd73=iLj&nt#b zoDiQ=YKXW2QfBC&pRwGqh>qA-7>@ieH#Kago>ambC__TZnMOaIOftIzxOrxSNJg*1)9Ru$YeI+%kMZ)z=2YH?*0&WB57~ z!Y0FPnhu){(?ODO}0}!)E#!+YCFCfNM8= zp9QYN5Kh&KPD5EbxGsZ?CYFbW7%EeA8~#`iT#un47+kO6m=|z;hJ&u)`VB4-&^(B1}At?@@8(kg@SO5KrSgT0*>x&wGP-8y9;)=ws}ot|eqa+PnqA~GXn4C6xjzM_F_`?T)CmH{uqG7V}6?a5WHKzX#?yS*= zPE4FL{zT{2(v8jZ9%UFCJ_N}$)-QrE%ea$@=-I|5dLna-duWZzHBM%Ov#tXDvy=Z)w_M4ZCfmArVY;>S=0)@tRs4P-soLz zK{#m~n+7*!G`V09)5d^);AV_EE^y8!{~?flrf%APxR{20V0pmgPTgu((>|)6A2iKS zQtD=sy@AVgH(jNVb`F_N9Ru++E$G2myi94&fq0t=>EMfxNk|LdVN*OEC-XH8QuW8r zRQE1~{-$Uu#s!$75^(K-CVn4W2bp$Jt`TgiSqXTE=`VVnLQRuYbvSOSH-U>V)n0}! z(iB>RYlt$%tOg+3bd#po6DIx{kXV!bZwODCs=kC}oXL$osX1k`&~zAYa#{pjf@uvs zFQ-jy?I34NtEhXGWGXm~ktLf#1t2M=wuOjy)>K7rz&X=(DO{(ShL^xgx~aDg!VJ@y zl?aq+`neKZmZ?kzT#jj!Ccs?NpR{?+Gi4P(mv1^kEuRafE0>_VXxftl*99gW7u+S2 z;!XIxY~oQWR%qJt697dfzgHnFHbqj)yu>6Ph2<4fD}8BQYTCaVx-!%Elme8S?kOOw zFug&)^i@;s3g{|L(ly|!OdI;(v)Xi-{wVe})8UP{*Vj$IQvayNB%g)h)|%X?s&d1$ zJ_nX{rV2_OZkqbs0H`;;v+Dxu*f@?Pw(YLZ)rZfI9 zd1z`|20*tdncj{*Q!X{C`b~__K^~d*=L0una_m8bVbiw{ARIBZECe@hni*W1@liYfE1W7P~v&X{HYwSFPq19LRe__ zQUX_Go;(XuY*zgYQevJ>Tc|7M)k1hFHw!m_RG7=6Fo>&W*7wj=n>W)nTr+Q?4EMVE zX@9t`F_+UH7^*e@b`^uDGjsk|tuUYZ1A*$zBKoOrnJ;_+XAS0`=`Fr(encIkMzir1 z!0(vLY2)5xj+4Tq*$F7u8Oa1YIg4dA-XKQ+Ll$J}xXUV6>% z(^;H8^Q?!6*Ke+)rr;xU1O45Y0rMOx=ntANc7q!-i|M@0u=#2Q0*#nwQKe?o{K9#d zjG4RXmXDify$v#9UP|-lq}g*Bu4u|^ehYwUb2{a_Gv+`S2%Rh@YHc`MHg*88&l0SK ziHqg-B9Q$SC6%fVSSG1V;c6MD3CZ2EVl9Y=x4J4_nGh zz#Xyt^b8{ST81c7^|NG8U@U=_omAHkvM}a=9JO@QQTbp?#*45Fv1n*D47FVO5P)Nr zacV||S(2AS7;Z_TO3iW0h0EX~EKOg7L|Q(eL^sN!DgcSL%%+DS#)9{J)|?X-hiV98 zEz1KTJZUMM4-#j|FhO_9@+`fL@sobT*jnZS^WF;(VA~wN!b7 zR9ec?y<-w%d@}m+XyJqp80l98b-h{Bmvg8&>t;O&sqTjG={0)FQOVFF(Zdzt* z5xw5BL5V;OmOp7xylu(uK%hp;)De(77WOs(nk+5V0Nk~dRKxO~e5ilaZh4a`r5%=)Z^ES0GLQ+N+fYEH9Qp*lTe=4zACV z_AyAm<@;rD_Q>)aJ%a<5|0um1v?NfAaLD4$!mS&&tht4ejaZhw2KcC@dkrkdEK6x` zKW-_UgKKx7OUgVDC#&fRm^fS8Oz^qSI$Z;ti&abY z$o*Dk6}SV|33{Ylt3d0T6!!s=uF zjWWl>)?{kn9kIUS456>pS_{t4>P#lhv|X?@g-k-M zne;G3SzmU9>uBrfT?k{Wu5?c4gtg{%3_jL+mw07=#}TOdrfo}qK9Dc0wDV3}$i+6moRYt}~S(yYDoZl+sv zUPkl`>wDB?%eEf)5?;<*H`@_C$2ve;;9To^st@K_H_rpfw>rKDpBJnilm%V1GFQT+ zz*@?JmrGXn7hqCo{fY}=ku`~Olw#{L87xbzUX+|%u{!BsS!#{>9D&NLZYq!p>o8rz zRjV}%fJ*BRDd4KCOa%bd*2m-~- zt`7k3vp)ADEc>l5`~}NL)?X;`9I$4D05E7RCoe$G znAIU4fC=lyX22({`=5ty%KAYdbko*ZM-gGh>P7pNeYU&w9=X`o><8IzbD^*74%l9$ zQxUE|{-7|oD*tSsWaLAUK0nXEQje`hYws)yb?QN4#vhHI$ zOXbtUwy2fR9kGp`#P#{w_A_AOXZwg|Fn`+@)X5I8ou&sf(Dng+s}N)hcm>>1o696j zf^9ES10lq=_Y{PowoQHj9J95gV=Q5|rw#xRZtG7#yyLbHso@l9D;tMNj7{<~04Hph zD5s6J?H42ZNm~e&=HhHcbhhb~ZR!J%c-zQnL`bkL;6s;aD|;5MPup5AfSj?#oPo0> zTcZMAGHmlp;U&}dR`)S13v9RR;pLL;#Tt0IZ2M;)bcMFXxv(sLs`mZ#!s$88CFaSJAFk5d(3$~K=$3e&bks?5&VuF@jxY+tklfPMCLv!HXa z+wVhoz&`s;2wm+f{{T5?U$h4i-0aRzBD%Z%1hr#5?HN=X^|E(xq4Tz%^G7@%`$u%P z;;?<`5OhcE5j02o+RYQAuUhe}W(_6({hh1w6Z zaVL)1BXl5P_8R&f!tEPAf$q5dpA+yBVgG{?vq-zA4|GxXXM3TGwjZZk5Mw|3Gp^x; zeb0I5V(qiy061wE(>5Z`K2HsjU=R0)F46v1C4PX@c1L<;&e*-;5HHE@wGCXd{U({D z*axX?m1;jorRuZx%ncyt>{pr*FU{^iw@nN%LT({Qy0!Rd%N`kZSvG z517>07jz&(tvy13A>FXQm*bO20zve;5_9eJ5H^<+f0o>hjpafw(98a}?9CExR zf~BXUw=3XYj$7$b^mg2`9+p0i-*!QF*l{cnx+9K)01U#{aezuDeva=@8tU)3oKm;| z$F+3`8|c_e{|!FK(T%oVM;&*B!Ar0sb1wpgINqTeXQ*TAD28;*aiSZ5Fvq(G;Vj&7 zM-EJmI~JYGj-glhyCaMhd zFhr_mM?)8-`luPYXw^;nj_q01t!$8Uswk?gpI03?2ZIZ$5t>>rs$!@~cS$vEF34ro zFnz>VRP{8J#HjYH1|(M1I0Yn5wZ8YfkRS51L^_&0vtN8tI2H zN7YVS?pzhe4d(f(<0)``LlyZ5+)Wib9_9tA52zhms5~2GT)n7Dw>asPfI`_h^MYX;g!uzTQ zGuXANCVT;1hw37ohwfCZxd7b*)hDY!9;!l@!r3EL92G(ytFnIwd7?7hgG3&=BS`!GO))Lxy?1*?NR5Ft$crV#PM)e-qfB0{}}T78k~a%$#BslTSB zO0>G4c5Y|Y2bfO}xNmY-21Yw$b z6BUor)%H<9UR57{1zm2yWq0a-@ZVgY_*35UUJl*(;72Zo%S&d z^3*%0gS)O4_QA^ybr7xKZ>pF63A+MyeKHIR)#G_U7O7WeKv=Anc>`IZ{`M%4rD|0W z0+p$ywEZtvf7u3Ih5EbK5LT*JQq!zT-7^h#)#|-eEWV|Fb{{@#)Ew$b)vC|90aB-y zBtuuP-kJceLCxF-gWKxu)O2Z7Pumafj(RfHU+${!SwnbFeen&LH>nvbz%{Es`riQ- zwHMX$?yH%15TR9lJ_tVB)Y{p|tX+NK3%Kr3@28=wQ=RuGbPv?tG@3qCzeii{N9trM zwLDfA?*ZhAdW;IYU21n7gx%^0>V7;`AE0NcNBujE<-O{!p216>`W@N;JX6n!M4;#D zpFN>_q288>T>91PXhIy$_uhd+cDTmePZU8c(9%zB^ zwc70xe2%I+H$XS0<^@7Gu6{(Ljg#ik5`=ZuOs0~hi$+fiELTnJFW}rX#+%^WHM2fL z)*hNxdLIsH_AUo^SabS!=sY!jG@5#8G;iYCy)_A?5c+6@RS4^=aVS7$ewr(MK#pj% zjtF#AGu;P5f6cHrxDy)t-;u;g&FSYbIHk$aB0_*>EA1%*HMx7>?6fB8HO$Xws%du} zq?zUmU9cwA6XqeBsDHtQYFOXk`oc7OCE&s}%WuJ1gr;RRxJXSC9Yl%JOrWJ$v}Wnw zAZIln(zjC1Y2KtJ-FeMaDzskEyreT`7d4-hf?U!ppsMs`jky`f70q?35X5M@Y3hm9 z{KtoRoQ6SX$m2DaKZikrCTkfIOw_Cn05VB)gQme`%?cW`QZ!XX;8HbzQOPS!Q{@a{ zx+aE7Y*#h2X-$-&$utAGrfH+XOQvS-c0jT;W^VAAt!dVS%h9}J1A|=6-+>@`n#gn@ zuWP37LiBu1DV1w)XlBvadQo6 z3SrAMzY1|FW<`6a1#x-wI10?a?P7e%hU-@aeCeJp*BnY4=Tmv*X&m z5_mbG?QKDzliDw?LwHKNKM@82+Q#3&1!^76A;M|xb}Igz(JpueFG1SZEzkvPH&7KP zOv|JfHe8!M1D|b#_BE|oqP1$O8lBaCM(gBrT30#%ctQK=Gep0rT|q|$FKIJVuyj;-DIt$%Jo%?R+F6nGSV0T%!>QA`7qTAF4NQ^Fh3zCS{txke4PWNsCknuXl zqd+FAJF2h;UV>J_u(Sy5qE)zox?;1#f`v zo3|m%(&f-woUQwk4oBqZENJtZtJ}O5dFJUBQ4jjMZbBM_`MLwmK;F<*3Sf6r*GtXB z0^Pe0KniuqG+Y$v+{;0Vb(gq_<@rAFO1y@1@&{YcfVySlXp zfV`($ZwXhz1nqOQ+2CDH<4bvhq{00S$d?) zVj;p~9lsrrCps4O=DTz`beFny&+Gwts(VV!uO8h+YOnR`cGH@uPnUEP41 zSyn*4(7mGBqF?v#ZIA(72~|g4>I$h9J*XR`!D>kN>}_~?r8`NzrD5HoQrL~?a(@ST zty^dY;i&G&3Pc~%O`&4dxUQfd#7TeaID9(m6MewB=pAUu;i}hCeb-I@5tU5b^|5cl zi-&$>8sZ(&_lw}gOaF8TKE3tdQ32CO-@XqJU;PK8@ZzTz(o=UtpJWU3WBLiy?>MeM z^BlSp`qyKKcT&HdPK%t<+dl*{Kwqte&p`cNHwaJbCr}aSjDF=k2!r(fAHhqoemNcE z4bhvV2pgvVvjon<^}87`h|ur;1j0zY8_kAM`X6Y07OiK|7;;ws!UfzpeWE$cFX-jp zz}ZFpxE~BI>HETAa9O|qF_2gEYqx{M=wBUxFjjxP86-~sJP^Wo{Xi=067=t{1ed6f zb%V1c{S+5?N!F{nz@_MqL;#Yi*Ea)_rthJ3R=WOoy5(2(4+n5X8T#Ko0(VW{)`;XY z^;y<1$kJC*UoBhD&4HI3eIK<>bM;+R+s@Y)QGxx2-fRTAoBAdi3kvnNyWpirUq+>f zVtt_ru1oZT)P*Y5zo1)Jrr+TLNVz`vGOoQsA3~MVO1)PVxGMd19!RymJR1hL^y{bs zQlmfdCG6_-Av8GF>s{A@YtX-S5ahPrg8^itegW+!?&^QbK!W%5DknbYSzC; z6IhErkE%wkdI>H0+w_x~fNa;_S%_=s(C1G;*iL=!*U0RFe!LyrL;dRKfIQOM(!%Vq z{%?$j>?isv`W(9Sor@5!ThEMv?y0_%I@vw?s09%A>d$=+(x(ri`|?b`&0fsVKGn_Fj-VfJ7hO6{o1{-R(01{%DL8nhc4f}4xS(u@A1t8&u zzg8mo2*Yy^#EUdMs0Ad-AZvw}Xaj#ebY~4SSP-5wtaXRMdBd$O;4T=ZQ*rE~;rUbu zFB$f^0(sd`PS5-m!`GECk1>2rgLtf=Z9C${8GOkg-e60aB^c6w1tihXcnx+*hEHfP zPB#3v6}l9|&^!oJ4ckqyOEdJ^!!F&hpSD+54Ze2}J;Tt%hA_(zKn1C6gYy7{IfjT- zKynQwZ-e9+uGk>Lb;EB@K=KW>RPDWCs5lJWO~cQBB3^-E5xpIShEKkSd68l9hakm< zy=;UnG3=wQP^rP0?tGbHbuG-x4X1yGd4&N>6uc`2FS^Vs!{BpxsW$X9L3hhgz6^FX z2Ac$MwT35D_^dN5&jVL)sJ{oU!Ju0RgWHCBC9a{-(4QXDDI; z*<{$M0BJV3Ujn4XFoAa0_YGatsA@I**8#50FrDfe?S>C%pnhQ3O`EibhW}_u{K)VJ zZJ{0;UW7vT#4zVS*mW6NX=&SSsGt?ZQ^Wo`81xu?so&UZNIZkg`V8q*AbMt4PmQ?e zhBI{Z>xE${72o>}dGlZ}V5t5Hu3s9`{@21b%%TdxkYPQIb*~JYQ(-r3$fWZjBZf&A zVDQ?&S&itUhL`mAj~PC^3&^;^IvqME<2N*&IU65Lg-;jbPTFj_8i(k|xZI3$H^Q~M zvA+?Vhw;SkKzbR!{|Q2G<62rZ`xr0356;*4?;4o<8K>+<*dxZecVKYT7*91hf8&3& ze?Mj%O@`|e#(k}be$uEKg!w7s_AvMiF#bzbxIkk*o%K6y97uuP8DsKNcnLD@rMgY9 zu`Cr_h*2~Zx=>>ReY+&gxQp&YxY2|9+7U+QSeQo}IW%;gHR{emc+S{HcmASrDjlY| zWXz_n&}CzYJ?vtQ?`DCEGsb0ui#MK}3ogmnNt=UYV+fHH<0zFyQjH(eIG<+xaRf=E z8!yuqIMcX>UW+WFegx*(MlY%!>Bq}hRgFrFOSy1eYJ7hXNt78^Y=yAgcxEQJ3gaEx z?N%BKJYZgBEq)Rw|!9GTPC5^w_ATY3YfP^BWAhj17C?y4(1C1EN1Q^5~b@ zdW^HIV9;w^NA;{eW5gBco*6g(Z|*QY$%5{Mal>@z`i=TgI2$nf{eiGAjgRQtfP==B zNw~ftqZ=*uUK!t@I@qxB^*Y#%7(a1G*w@D8yC57j-oFpmV@9`Q5RMy#RWNrly%7Uv z&ZcZFI2Thn3!JOTJQwC}rUnbRK4j{rQqo~lS|A{vre0e>yi9%ca(SB;ehg5^Kkr%31^;;Z`1SX=P00Z*m1`X-hs1I zjzv=u?~J2Q6iA3;I{j#7q+>l*)6P5E219ts(P}P`F^*F|MA&%8{Tsn0IX2SzEY&fR zp6fKndxMCV?r6#echxa=Hv(llCQ@rZ$I<09ka>=^PeHCbTGIDy@*Ur&H|~bxTXgv9 zrsLEaa0QMXKfKOmf2h_lL>p5IBGCUN}-DL#* zj!SJ~MA2rmg(0Gezm*Y3d!0@O+ZV_l#t-x1Y><)jF$|oT-xP!MWd6Dq2FI97Z%_FD zU?Ou`hQ6hu9~FFioQi}~4*dklJD=P~fT`}zNLYQE79twE_4r%+NjBs<4pn>fQ}*I- z!$g`MjRIeR_^Kry9=={>fOcsv9lQVLA9@$RUE2o9GA^x8mY<*o z+jm~{L41F559BK>yntM}gC4|HKW@Okf4KDp{=ItaDE_@B)(QV!+r9w!AM*;}|EGQQ z{Qq1+&CT^a)1cij>J6X2v_6D(V{i~8oBn(N{N^_LoPLd=hx1>LJ&?FF7SDjO2jdF; z{_`P*w?9H0X5>}z5o8j^0EFM+$uCX4e!DX_( zOoo>%mY7z)*{ok_!<57NcoPhASz8Z6m&Z!;gzM|9YgF>dXZ;?6csE#YI)J;$Dr0~Y zu&ik)EM&cZ9qAUazUF`wv*LEayoA+T2vW+D{sLhcYwU9%%UP4Th*!ZnXM*cW*6Ph5 zRjk+asZ_J(W&?7I)kr6!Ygpe?KdP3c%Y%6x>lg>o>sfAU2pd@Wt6*@O)z}SWBWtBS zeBNPsQZw`}tF;M`d#rRCjG9>M=viuJ{YG`C78WZEy8Eo}Z-Z-Pou+nj8|xPJ>DpOo zPe3|YJFF0|lXahJiVs*_>mYo{T5uK49l3Q&_OQP7M}%IMl|8sV*2G0{_KY=YIif#jJ)*MJ3zlvTg#D~iYEBNY-pa!@ykt#S z1TTZEOg@A|tUuC$e8uvo-q6(l zdjUN?KI|>$pz~!*=;iWbNACvY2s@9wgt2#yA&IN_-FW1gfiG18d5v8*3N900hypT; zZHxybo9%D}203ioYCv+?pDLltW2X-xLO$E)d*pJ1eS|iyH`z|~)D^JTtb&(9cBcut zBDSyx2F2`8KZ8LDx*gCpn+qlb*<$|W4M6Uj@0<(LYQE!bkT&y)UqRPyo5UNkjYzivoIHPFnnE1mu*(CnL{H z3(JS#vMkJbfMi=#u7EJd;%_Q_7h2poh?I&fo;JW)v4yV&x)O^{ss@%?IGut)xdme! zq{3oiF?01#9cPu_{f$*M1lPdx>S#)HAG+Rtl0McT?>4SNz z#qveq+APc$z@Woo8F8H!Y~mhTcvDIFk%f5}xF;4DzJ;@Hi}iG-@~K6@4{+9Faq1R? zE|&b`5C&RS(=mzDmaEUg;Ed%(sxm^6gwWi?%GMp5a-`zZM|EIm49kvx0l8+`Pj6$EW&A4WvMsOML6~E?b{T}Z zmXlpU@+^JUL6~pZcpcGiSX%BtyqlKcbX1_gvf=$Yvm={}GP=Y0v-)w`Djs)G~$IrahKFg@Ws~9GC_2%yP^LKA&5@ zkb&#BoMa1w0ZZ!{K#o~%Y{!L-TSmWz&WZEl6p+pwX)khd;mjHXaplC9A$d1W_SYcp zoJwCHJveh{Q+tT>Za5%^IR^zGM>&64!lyrHB^}T_&XIl($O%qZ47gLAk^zJb;4GpG zi{rfLg)p9D^8}DY&hQAhB+d{0@RH1_8Ujh-w7rBdm9v1kz4abM-2(_F$Tzr~!oKHF+tmpXBTy>js$Q{T= z&fLS$-QjGU1>{}Mmi6#?j}v_nNi=cpCBdMX(@OQR7EWt04DNH@Dnh(gP7IA2ZJeK| zh}_Pxy9+NJoQt$B=;UnN5AFeH-aME;mZLg^CKYiw^~vJ$T6!h8X(SC zE!m9-K~^79?IqZ1IhATdtd7%>hA^wcaj*-w`ZfiSNUL3~Fpsi|q)k|~)wz$6#96Cp zG=ZJBiuePN3s(D8fLyc+q0ZGMt3GP;U9nnDA4jYen+si>)lFKvW>}%rijUE19n}M} ztk%(y+H9-8KgG2dSk0vfl~ymuVOM1}jk=)KRy9u{yk+IR7^KE(ax;XrR(*8q>a66E zh+c2Cix$BRR#$f*rQ24++kkAdDyLh}Zgq1v-@9heR7xz&-) zK)$eglfL)SZ#6IpxeQoUyoTMN)%#yVH)ORj3&>Yib++&_Y<0&R!V#;FsK)TxYR`9Y zHfr_N9N3Ln9eN)rjazw5htA3R!zb|KY(4WnbS~CAZJ=|tj%$O?&3ZL8SlzAtsRZg_ z{l#iD(|RVSDqvHrmW$fMRXskrBFT|oy_j#>My zfbO{Uh5sE-vtFEwJVUJKY=SP-n)5GoVb&|?pjWu{ykY1ft*6qqD#}_Sgf7~eOCMaT z^@BfQFlgOC2|973k|1>Eme4JC;mY2Exhq#eC%E0XiPQ#j=f=?T$CLZd5RhKnZB#Dt z=02kCjSu(oG7vv5<1%zdxZWY){JCF-!|oV2BMm-JaTn5K8o<3zpHU$9O?re+bLCF} z3F6vLLA+q@rmNsWxLwp=2<6t(zAu~`A_0luZW@BmNN%1bAW>ZZE*PBUPRhZ3Ima!U z1ah8h@WKaofxCMevQFeO_Cc7$Eoy}@nOl7s1}WT8>N2Hr>j$Aro-Aojr+6{B%3=x%Y$6*;w~8EaUIp*s<}nSfxN|Cv<*qraK9G9buBk;Ik-Bm1?@=d zxjTdTc2?c+rag6E^7H${&0txFc{>zQ&nMzD{+A9SKNb1Aj90O zG$2Q~Z@&ZNYp$Ck5*+1bQ)$@O#$h3Jel}-IpgUsIOWWL|HgeiP``dU@?fRHa7_Ehm z+n6SToUmCL1G|$pN7S%8Ws`plVFPTY(T*?B#*B6$r)|VcAkWw=aD|s38@o@S3$`)Z zfD5%bvJmEBHmTG#54V|93iAjX2l{ojNSpFQNFvH6gO>HtHruJtc+O_u1R&4btfD>1 z1)JtOAQx>isXlhursx)QS8SG1SvAHcjP};CHbzF74wIY;MztnP{`L z7sw==rg+d0(QK4Tkt6b3=I7ruu< zuTH+Az)QWYtu-JGwiOA8 zaNAZo1g_EcT{?wu$2OOyv%9wPb<}+VCyAcyIb6o-Z%tUj*{wg$x3Dgr|KA2_EICf&ua8Etmq~FE}gB=QbV zfi8ny!ewulU{EONm1U@@?%bh?T@K)0Kxre-(2hcs@r6(eZ$GjUf7(d|^de}@;ZiJ$!eq4z}bc5prulkUKo@5CTl?D6nZE#O(uceZj7gcDtAC#_qxHie2;vFo?DDr{^=?ZVy#Y6YYZNuv)TR@IH`KyGkKQ zhTV)=h*xh{<%KJ1vst@ z3!We^?N&2DhV16h8LL-zJtlC&c8+eyY{YJK00yt^3V#4MYS%-L)R^75Tp-8oLbpKY zWY6{oakigIi&+=@09whp+W&bILLYkzIXGW?w-%ESSDEr_#*u~nvKZdYz_U=dE?5cfQ7IYc*Q{2E^v)@Wn@=g0rT0|At zGpVsqXwP&6DY9>;*|6At2NUKc_Dj=nUrOz#j)Iig7swE{+j*z1oXY_I)Qn&bNH+eI*cW-lv&&*%14I{8e{@{0J9#mJ?Y|09h=CH%K~K}z{m0nnB4TS!>WulyCHg1?Gh zgi3yXI^tFFlS1ILn!hdv=C}CUa&gf${0m2LdusXb(}JLm|4Rsj_52s_f;8~Qr-0n% zKRyV9M*h3Bd%45+et|%D`6*lB^B%vDepk7PKf4>kX8y0EAT9iPG@;z*PudIfR{pG$ zK(_Her>|qQ^PQ-@)WPp{2I=Id(vJNB|G5m1hx{2-?R~_bLI+eH^XKe?vnTvdlL6`C zFMR~Ao8LqQ%%}X}H^KGrtNo$t<-hWPvp)Xx!?1hC_sM~m=X@jW8(;8q-v;UDFa89` z0e*!9+)IAtY(NJ2tp6Y!;zw&?_lmC!g6m=aXAa;-_c&Ttk=N6MX;NOHCMq0waCRyaFN;bj;;jKTdR3AgF6vOmOWcAmM_-yMROpG<5JIQtH9_Y!7-R~f*1;f4aGkQw7JNAm!W==;2H52aetrRiJi!-#L3dqXq`^O5 zU`3n48v^rjc)2Nf=mf4nU`CaNLczx$LRchtp#fJcnD_wBN(4t}m0l`X{}If~1PS!5 z*>b`6k8zn5g3P~QUMcvMM$9U~S8ae)3(nJu^OoSRtANx9n6=Q=3fia)Qztlb2f}*6 zQY9iZ2<|omd0Vg}4Wv=vO$F~ef)@;syMp46AiO7-MCJA-!Q{obqGmzsGYDG*S+n5m zzMw`1u2pcER-KZNKt2|% z%LVsD@VW~rbqU^R1nCyYV-WADz=i6`Jp#>oAbSPpXzb||h%4dcnZVoycFzUrnb5ru zOs8^Kzo4=V!U4fQS0H>TuzV9?2LQ6 z};9ukRy?8^W~)nBNp8QzNxN z=xPs0p^!`EsUl(A{~C?LA-Y*5!qNE_F;;e?A3i5C+nU?6y#lgez(kZl@{a zj?j_Tk#~g|mqG3c=ga}5N%$GfW6i=5Dx0?mFS)?rzEBp2BwB@GXP|2nPU-~LE_~Y$ z1|7l^^i7sd;X@iK9|$GXN_i+WxPUwo{+A6ekA{d6;sEAOj_lQ3k#`$=_InH z9+9(X#WM(9M1^#E&sCIu3dBwHh8z%g(VOoB;vp*f1I`YK<}bs2IV>8XZHuR<<5xuY z64kASfw$-@+9~>o_B8XbpAc4y8tCJ=CDLsJsS#b=ip*+7%V~#FCz?Y;SG}lb3zBFMWzaKt zTaZ_H7Z3(i-!=Xi5cyt)e{o zhC!QXHVvHZqR$**-XY2vhOko<5DJ3_A`5DIJ{0{)&-EkG<%d8%7Jc+J$P>|`9}%HT zR6#q%Zc$MPZrxMS1^T}&dPG~P2G}c_a}K&b(RsSp&qNEB0PDvD%gyP zG}N0P7n%BD;3T%c4$fITUIIH8@q#`GUB%1e;L}Z9){3wv#J^Fw@1*$aBKSNdorus*aeE$&?5h|xStk0LE_sU2ox-y)dVg?{L7ahq2fz=cnK44bO#qM-cbuKLLA)( zpONBe)QF1`57xq2w78pw%Cq8xdC;8`3u)hRUd((9gA3w;h2SoVg`P0DBzC_C?y@*` z7`iLsm{=qcBkubKBv!n59n9m!GoQj|f>`DQk|^#@gD^?__&-3B#dg=>B}M#g7f7nu zc`Jlz;?pk?JzYGy66C6QGW9Jo#8!L+x+YGi?SH0tK`Xc{ao{p=+2Ruc@R=iCI2|Nc zy!SFlo_Gp9Zr8>8&cI8)xQZs58{!@s{BMf8spMQB_L4$aD4t1$i6Zf}4x*JN~zfF9dKph?N}NjHTBsKPH3iOYiGQM^Z;iMt z3#3-O^*(fU;v3E|uNS}d21tW=U>qOLZSe+LZZ(Q?sakkPEVu>aUGc|T5cZz<~Zh1F}=>>jUHi@f%6d zJrv7#0{KXs_Y-_R7W1C~6$5fAQzL9e*362d<5 zh9F$#Gw~Rm6@D(xqqfxxF_&&@zgRU7fd<6dOpupiU)r?}inF;u4vEDy#J&<&KSXB3 z;$%9pIwJmRF?6rRAGks|DxO6h%`x$zXmI1=8LPlKNoFU)&RH_@96ntnKkMMrRdTxk z#7%OTs%h?$fgKCNDLB#Wfb`AWt< z0_P`LLmluV5|%X}MVlKhJh zUY0aF!QhJIYy`Z-NX)2e6f1d62Xx{j2KpvhyrjY(kOawxR3S)|jK7V{k|YQIci2Q? z{wZ`RlHX`XPn8%v0ZEfo(55$CvXBm{UzK#^!5~Az{NMgaQav44lqvaa1SCsxE)d9U z$)GQC$&vg=i^N>X##L~ZCkfvU^XroONC4kRr+VR7NY7%v}#;iR2tD zCrc&mui>mrGWP;>fwiS}uhrv}!&fh~4Rg%RHfK*FD>56Viw(tR|kp$3lRx2r_ zCPX167}5!f|K3aB)GM{;EwQo1YoX9|!_l3*IynTI=1wiQCxF7Zf!u0ztT0O^!i#K6k~iEQc#YkIjJ zOL}gCJdv!RiKt7GMm6znNe>U?sl;OtK6@m4d*QQJQbU!!K8Y`#S$Hmak2>HlB#)?x z+%K`E62^d}^DS^MCEwARj6sP^1L2TlD!nqVB*9by9+qsRZqkT^vjJXSOY*1=Jt}c{ z4ak@zG8sO{CBIxiJSXV_3A{KOg*KNl`!y@Hw`nP(h1985GI{LmF{rqIdecFq@x0uM@l!2Ll-60Qk5}U z%BSMWS*b5=#Lh`C(ad~aTCRte3)0O|fLxTCsH%BMIz1HJWvMH@9ap3RI?@p%UEKv_ ztn@Cu#c|T(lMpXnYFdjx3DR%uAWW2wL;{i|P2PqJOP1c=i9jjRB&t!TN^jf)mnLP? zP?;{>MsLSe>9KMMGo)s;ZMi00Kt;7o>C9b#WJw!5;3ZqS>=^>(NG;2dS*~>K6u3O; zG!^1qmsV5FKVQ1z19-V1&7=a+O=(&UTo*{cpyF7ebe$s%ilqA@z!gg`e*}XP>34K0 zyi^()gFt1{)!SiSF8zZFAr;d7)NZbn{`nb@Rnlo+f>cYVQ-S@Kw74Byjr8?ZAZw+< zw_#T&{p$iE)JqjKurx@ceZbw8UR;eN8l@dofZUOGH$rz;8u1Zy_oV4j$fZeo=^`M_ z((Ck}lC(&NXk&X{`kH3LR_SJ{Ah${NFTk}+#jjx3A!WV;(kV56AIN7?hokWMTaz4Cpr8%7szCXg)}CoI8=Xu z2&oPgD(KQ3@)!_iIJBq1?wZ4iy+CF;2)96(?eJkbAUO^V^djUs{P+#HJcoFy>tA=6 zKLRiL4gpkez2TssZSGBn>QisDI!%LaNl3!t0?x0@^ zWQD^zdU`4y8eO2Pa=1iKUA03XbxChI+}QzSjl+sw=xQC-{Rp3R4jfwR*E{51h3f`~ z9mgTO?O;Z;eWQb7H*|L#ejS7GuEUC32z$?=oo1jWhja%7YIZQ}1hU1!{TLwk9X9_4 z(&_NqbRZu&bl!mZV~1M$nXD%c>HCmNm&50e0qJ(gIS=7e2MKM6dmQdiVX4<)KfM9Z z9A46K+~*D-(o*w`r1Kt5ay!}vF{-3F^Bo1(2YB^K7^fS{5IV1kcE}Spyj)J01;4uqfdpQNj1lfu%L`alfGlEN!MbaddEUP&KNUAK03f^flhepIpmo23KEcdF6-vKWf zvY4enUX!t&f@I3x*aKviY$mNPvSl}Dpw5xi3g9JIRyGUfd9roZAlGGVnwj%u@~JSm zA@hxb@TM%C2T~y0PakTbY!{6-MKbUCKo-k3ka?+W3mp+HljXhyDVJ@Z0bzwqBgges z%I<7M5>+xs+T&Hr#2nZS%X(Xo%OUv(^rm{s)odj1B`=_`0rGI#aGa5^{}gs1^0$5i z7cO7*JuWOtKJzC;xFENm1l>jXHo7mDbh-IV=&s8LXepg9 z-x&*CrTpJOa8>d)D#BLF|5kw9lBZI4phg}`&8S-Wn^bA5lOLdZa=rXM9lvOh7ySnwpkuY%byl`f&s|;^3$}aX_W`O zL}qRBcA8;3Mr;R=_@5Jo7@p9UAD_~9@}wBn;bAv~v;eFS0S6y76n7O$|Sb5;q81AoJ3 zqN1!8T#~}3706`8^}|4>D8>>XOjSHOgDc8WgwpmSS7A=CeV(H9EOe!chn>)sDUK!M z`pOj_%VA!jSoaTvRSI+34%|}ArRsT&;!SEbG%G%*si#GeWd$$y6>RGJwkpi2R@ts# z&jjgETsRA4zv5?0a4!`XXq7Oih@e`@kRp;A0k0Hc`vDnIbS5MD*NWu#ARJZfp-#-0 zA|@EbNy)Rr2jHxf&@=C%JTn^xuFBGWgmqK;(?Zu>IYP@&52ZhSRqC+vurnZ@%Hvir z@KRo13W&Gz`W3kLQGO5xov-qw6_9?)jsb8-l$TZj;;)R{3&=6$l|bZqT)E<32u~<| zq=1}M-u?-~Q_62#!38MK9)&JYnIZ-`qx^CPNRaZ=e3*wQm+F8FRTj74qR%P$V=y?c zOrl?7xTw@#L)c5o8d^(TQO+SQRvDR$ONmpiqY7lavhps33Cb;W(TPe4otjHh`mg{= zR2gS%GVO;9x0<}`TAJ- z8+|xWl*xABx|H1;0O?l#^*w|~Cv7!Yfa1^8J-u-IuIw)Up0<}wAj1+Ox z81tGy(ix|za($IiOz&X^W5qO(YYcZfV3*0Tp;s=8!6A~(FuRBdISg~!*5xuL5SPa& zo(1#kj4ShyXFfwuK5sC7q+zj?Q9R6?VE&NNMJJQpn9pdbCHSr#E1Dk^@Dtw7pc_d$84r|^a%4W>TDimHWKI0JVefp zF+W7%+dPa}i-n|lE%R(OdxE(K>opw)@Mb+gCE47cH9*`c)}%K03}UUxW`M;Xbv7MF z(SA%-V7)KhCWBWA{x-Rug#5dO3WQnRObe>bhM)28T^2OA?=7T`++jv`DCNu8O53|M z#>QMEbDiPp$pi#{1TC~tA7inHU^vcdr0u?wnPwP5SF^!N2#=as_k;MG$wjzEXNwXV zkzFj_p`N9`#b&Cd9kb||3=&~+cLXHTVyyxs%7XDTNVLT&s#jOalEc8&%YJ!yqQ+Xg>skw0I86-P-(1E-ro&UCGVgyqgvk4kIZh#o6R9?md{%Su0<}T zw%>hu6OmSV$tED%5$K)qn(}d&nAI;AWwY>@=$)M5_XT|t#p&0$-i3&$dG*B z8l*HX=S>F0L!o{Sov)()2k871lUG4_MDgoBL^!ILNPDGV#h2yaLKJnjK!z%Qq4NY` ziUTYdL?~uN!XQ%N_a$^uii9{IqZMa9g)l~8ehjxKR*~{KNSxwxI>DNtc;yF@sEC*i zFPN#Q@tvu-c?pm#g-8aHqu62%^IXN2Y(RRIk+xG4OP0j6-(n_@KkZ2A6$>(HqB`x3jEj-%~VC7K{u*!8im1_V$Y}G z#uYJCU~^V}`48f`C}k&rbX7JbK853NTawrD|(aOK}f}B6KA>uOs*)9tl+u*uQy>hVIrt+;;>=juW+u%HO^27m z@2?pHGV=Y3Ht24Dkj912)(_TGnbq%O*I)=oKQ0^sWb9)JmFc|ZY%&MuJ?GZPfcVVW zCIsZzoC6!-EO5@PX~^^RoVokJ1d z5txt9*=2`oaGsmv1Mb2nPb_H+!Jn<>GZFH)Id!ny_Ajj%e=q67zqcn)Npsh7`X1?S zck1ZuSu+l;6T|mUa>Q7<4nbTP25O9YF-{WNo6$$}t}o*NO%o>>_OydL#Tc~(7s@bD z*&&Q!M$dFO<3u*N3k)&Mtrr=;tc90Lj5aFKU1o$(^E!zUBLFg)Q8)(InG8W4bXkm5 zwA{{S?4|{84&!^e`NfRZM353jKGpt98C$*tq>M3ZKkVumFAu`5fzgu=-EBt4cDQb2 zbpC-nTN&I8Aln#A-bF6$4992)I~bepB5Wt4gl_Ny#sMmQJ!HI22KR`eNComSLv#Rk z&lq=U!hFv7?+^@LFlzf@-p{zV4Uhqbbw6~Yi~;KSjxiK&Fdt_;xDVpQoJ22yGjlH8 zPZwq=y``?qqx7h`F?%VjJJU8E<{r$mwD>;6Y&s1uhndkdfO|3>OyInjr+)|M%`BJ+ z10SZ32tr@xmJS&BF>}@-r6bH)wAMVz{526mf99=32#+ymctCiZIpYQLJi)B{1>8yI zGB4;(G4t6V0nEkJ+zn*1sfvD@dD#H&4AbieBpAfB{1zmb*+Lzz5azy#fP^wTec|OC za|-Qg&NELrAzmEw16otXGlTG);k(Q6@z5nQb7WPa2_nz-)*F@*#8SO$Z+`i|GXCW9C$PG@dZc z?;=naGjB7(IdnmHh}YE^-!DbBy0ZXa2?F53Ii9#dhs#rF0<-)!RHm0{u0b% zSlM;Z#j@tos1V0G@dLPc)=nEBGg-4I1}mSvEGV> zK|ZVD4G3?rIMnXE$@+^n_XVt$D)=m9ZMq7sh&3`5q?UDvzM*lKCAf`r+gJ_sm_B9| zOa=Yt+nwe-{?Pc~>BRFrfPpMtz zV>XQnc7bMtR2x5ScH$|7XUu;79bAyvvPQZSW+&Uhg_v~>!#vc?KN4KH*=5?LMVM{f z4@jih{h1(9W@9$cMVl?rAnUVcYx5E4oY}ucAcKM-t6V(h~UHS_JM&f`_v-%^keg1fCR9gxkDJp zw(|z$G`p(@!ZYkgF}Q{xb~mm3g4x3+=t9{4QB^IB9sC5Y!`aeYa1rdl4j?1hA#}

    ?OYdS;O9I0c0(Evp0lw?0%Z*>)E1A=o;9!Xp?@MEgt}BWKa4UkO%Dd8lZc~-a?JF zN9+~fBkW_grUdCeVe9C-BVFvR)RKP6KJy;J_ONIE4M;D$mA1Qm?22%3&)C=^;+bG4 z&;vcrwtIoFPUg>lfY8}Ih<3y-<^fsIxtedE2F}eqgVq`D=F_MYb;w*pZJNX8n}r~r z=9g)E=4GBZ9T0Exx+xI)n4ez?&euHPFK}nfE#qJpWPX~;*}>*9RR0b!=a(UDsQHEf zAj8ZTk}ljlkPco%nCp6wZj`x4A0W}@JL$Jh{*S%)0F0_i`^Izcoil0l4x$WA141&B zgrX*a$z+mDGLsB569{D;LkJj60;V9YWsxFwuoqP9qSzZnQ5Gxqf{KcLZCH10*w+8= zIp^Lxx6GjK_rBkMcRyWr?!D(Z=Q-^;Pro}}eiU4~E9;@V z(9zvlbLvs^-mI%WLc5Jwiz)wiQ`Vy+aoLc;p^OEc{&%x!g?E9ZqFhcz6e^wBSSoh{S zw4DCa4BXH7$NT87{@55=&-{86?q`+IKFxlSEcrQ$CZhaL)ud${eh_IM@nsZ=Ibtoj zH5&GQgqm|7qI9grHqu$&TAy%ZcO+J6T#rF@6{OF6U*tECBK z(XWvXA*#GY8nh6FmrCEf090!wc?Dp%NtaS&X`^)haCwCQG4c}zN=GO(VN-o#Rf zMcJ?mgSf|ebS*01>s(E~osG^8O8(j8e3yt}vvbcV6h7eW|1vN<=qy+Z*u&08Nm@MO z>`pq$qt4Msp~{oaw`(!Rr<_MWi*`>tGswny!FkF?TwZkMQPSQ{XHQ~CuR3quf~VJ< zOY4B_b!TQVX209{4Y||aa9%zL$li5Me-1U@bDsA+aQ@A?mLkmWJBu#_>;vai5|N)c zv*|N3pE^%@7&Sk0E~fze=g!On@${ARq&c|kb&jSW%J7A4cbXxlU<*0IQ)*(I=-k<&LPibOl{wb~a9CyD+{$>D{%De6Y!jt9h>GGmDX)D8m`;&zB)qHSvq{50Ro=b}g{R3&DGGGDdn=$bl^Tsd6E;fDe5L(SYhqIr$u%8?Yo!u$EnFtO zM8?PE(n8wHb<%d4_0`hc5x8uS3O>cne`Ny$)2~EWLdf%C|_b(}?erLL}1fm$s1ieyg;V48{kf+v+im2c_|IfM}ak zPls=Zw1|9qPe@DY=}9SlIWA90N0I^iv~<~Qw0lO{ycAWQl`@H3pObEz1Dx+k$1@=N zo3w${wfChx{c!nQI`>S#zL0*TZud%OZ9{|ar8h{mS|%SsF39C_(R5r^$mc$Z!n5Re zZpSRnmait&f3^JKEx24P-%J@Wm&gb9M7Nj9S>TTB8hOZL81=Ps!P9_UCx1#lnCsoRkk6$s@_lmE9eBE5zGNCMkH|07qspW5Jro*yOrA+8 zERV~7B~|Bn`8?Xm7vw`pt9en5KMmMUj2eY+$S)28vNz>BJJH`;^0IHy;BC2vw5WIF z`3-p5BP(R#d?NpeRO(OVjWqYqFRlb(jQ>^|Qxp639-^$;fgs1Q1y%dz(D+i~dhwtSA8pIFsHFR2kl>dAHEaGv&r)S`v>z(M7!_U`Z~b71iiR(hmR<}*Crg{ZLyOa-lj%sDF5N(1tvFXY{xnoM zPkNm=@mi_ZW;DA@>bV<**Gi9mh0Ar)iK1WzY6O)4Zm#G_Jn3oegIe+!|(E#`$`MT8q zRXpvMdURq&Z%DgO#pO-ujW5vOThbR%p#D(GyB5tql4jA6K9)Y{jRt$985g35PoyLI zp~0up?I!~EndBnf=X2@ccC@=)KJ*AwxmP~uWjt+?CsSZ*i#$Ia&F`1rrM2EBe@7

    2A0}_hoa;$J_|v=OQ#kw!a)i&1cmZ8-#@oPsa_17Y1}c8QW-kGA}-Ulnxg-U_f7%y*j*>%_qeauU<}89@EYz{NVA*puu^)5 zGCt0db`Z-vTRM$&pw*H`NSc9nq2F_)ncY$45~+K4JY6acp~J9NTKF=WUnaG60d~1` z1HG+syL8PR7{o^D`}0v{tJLjmz#fubUWRr%q>o9~Ju7{4I7axAWoUzc9H2T$)x z+sHcnM9P_nD&I<-&A2R;Z<+#R=g4!8MDwfUL2%WH6?1)$%4?*jZpDbtkzRTawJwpy zO+ewL(tFt`Tq`~GH85Nzy?qBdxmJ3o5uIEo4JW(i7HPp?z;2aZn}nLTNvjXX<#x&U zA&_s9-YiAU&C=uV<7tcZ*W=OPA!)>$czRemj|ApZ((T*P{Ap?Dsp$4)X+8OeUy~gO^0BpZ%bVZ(cm4NHNf7LZXnz93#pL^=1b|%EnH+sOETQa+Mmx7RNd3 zF~IvApS*>!-0#?W9}2fRcG2J;aEzY|*n^IuEAh0=amHD=T*7880nSU=ngfAzE&Gww z)yvqo)ZgXo#TbQmowAvp)`-brq5lEDvzbFJq!Ikk-qzIT;5H;o8oTYrC)gtdS8*T z@&r|(|5!ecUh4Qv{)iam-{tx`VERTLHw>M9FBcw!r&UVYAsR(4B@Now<2v+Hee@A% z82mPZ`_Lv2TGt#&L#!P&0>9y}N$^j*h?L;SWsSI>UGOq~=lJPt{pqDcf#>kUh|$CY z*I;Bv3~L02hCAQJ?@>G7M607Oq~p->Em`HA!OPJ0gwvkFa86t`9Q9X97mb9NI7Qk; zse!AcMf5lAPL(bjjC!X@p;laOmcHzX`gcq0DxlaR%_pI@O{$}}Y#x>R_X75(q{5rg z`~~UixAC+~nn~ZqcvD(NR?7R*XXKRnRQi%m;WyH2M*!K+QtcF6mdha`v(w}ycWE+l zBw?s5nv1zt{j%5p1f=laGo#w5O&3h`FS!5x5}aS)y;fX zzJQ##yX1>j0{*JZ8Odw%ef0FYe8zV4vRlrb0u&#}4-i>=DBoFt!aZ^gWo&#RUr%|Y zpUYnzfUdug@A0DWdpYMGH2*=q>L*-IR|YRf;n~XQYjHVO>3kHI^OYOE1MC824va?5 zx%#gmEBGtv0y?%|OZ`duej_#f4LyG={jdj>zLQER9i+oxpOn{2@8WZjzS` zK;Z^?*F-$sET374=6A~%e+1O`$am4-%-kw3C_{q>%9}sN z({plgIAE{Ion%SAE?4{&&3DUddgJnj?4x&>-jp}}0N7jdL(ieX+w#y=Xz-4_kWvxf zmG3S<;d}D28!*m)$oEo|<12Y1g>Sx=+x)2cjXZ&}HNKTsEXDx$%3Ic>$`A4tZK(32 zeB*F5U#^^fDEeEW)SpeWRR)s{vq5R4Xy=2BlTgU-9<5uukR^N@z$;?j~W-{yN0^HB; zKOetyo;?ZB!ySI$iOZkh{)ij;V>}J3{to$lrQRc1ImwC{5eY6 zKRpYrI`U6J$+2rrM9t&>L4nkhrKgDawn@iCRokJcdKl^#_o7UJl7q<;Fr|xp(Nlj| zj&g5(1;$po{~omUO&p2evf~$^+`ok8UOpfPH7k}aLV4vKZuAluHIC#C{-r;?8e`h; zVC3AegFXwP#=(P0hUG3g4L!Xlum1*UK9I*>in34TgI+>~FXa7-fbSpjkTrmPBOmfO z+U}K4Cr9}?O7|C0WvwEwQ8{qvkh$n)c9>#6b02#bXc{-Tfcl@x)YZ70>{xQELk#6@ z=^_P*Dj!JONtxLry_<*fz0!;&K>w2zFF@1f@^zn~(P{GYrFgnfK8jA`)iPf85GaOS zxd>p_>wm@X@Mp;@HF`Gjf`hlOMFoFP`ty{5`iC&Wsyo3x`3m&=X&Y(`c#nK90}GIv zL#1k}keaij=Fot3Z|;Ufp10+N;OG0wsNpF7B9V9UT&ZaoDxWW{KLNA4OPc;MrgNWk z{$M<9ljcmrJa$MM7pQ~jozWNN{i7eL6O#KAix_z}*^Q$&?T7n=-X#y>*t(ZdGA>LU zE;o-(u=^rPeaZI@K%a%ror5V&oH`73CJ+1=_lMm@wnuUMhbrFC87BdD1S1>&9BEMy zRW6k;p%C6$`6Y6`TqYkw8+f^V9yt-Okh_y>aGf032J~0TEfizFSsp-vfm`I!ly!Tn zypV+FW_fE5z_!S5o`<2`CvV)0%l+~@m!is6`ThuC7c0m6KtFdXuG<6)aAxQ1M6F() zqftC$(IdDY-v=dpd+t*jZ$R5el!4!(;2Gt-4pe$US@SW*^NMoX)p&YWd6snI_my8L zV)uzsc@hTsxw2t@Oz!VWd^4U_Id&caET=oBy?}OSIc8U)@NCBxTJ6=2spPR-qpb%9qaZDfs z@>0iy`>_mb9WjzKmpN{2MB(L**`J|@D;%@wmA!S2p*w)(O2_$2(a}|o_l^PTs~vwM z!}=OWc|IDv$of(K*iKeofTx$(j$?uBWp)P{m#?s;yU@cfytRcYud?$m0P5G+@V9~N zbrv8qbT|9^CwO{;y>J;Cyv4@0quV{Kf}#*#vI8E#6C7n^moIhxdW6YrD%k^kA%{3JFhyOw^@W#KQ{GFrM>_+{T4ez4uqV8mlALAa4@{Z?T zK>e=BPTVi4A-;axX~ls4c^GAVpE%(O;8`a5R-tHx^ukoYS4w}ORMJ(*{zHw^r4g@V zc4tU0lOO0zY0fxwdA2m0)S}f=FCxZsq{T(3a-Q@RVVAo3}-7&5k zq}i_nwqD9O6_=Z&ZN%s|NG}jyx>WH0#G{HrD!^mP#pF48M%e}h8J{gbh79Bvlo1~S*=}Xy8MwTm+);x5K2)mCMuVS~ z9+Uy_i?X5ygFo3(+z8k*M{F5jD;!f^MT4^)XFrH4=Q_HPL4Kj*SW^8iaZEiDRW5hD z-wPeBb1Zuju^P~YBQ?9`rruitza{87XDop;2 zGF-Z!u^MyeU$a-RZ#Mgp$yld3`w?mVY5$i2J3Nc@rXy~m%(RA*ivgW`0(pQN$Bx49 zyvkpIwdp?EocU16ph>+)@y8<fXhYFl9fQVRvJNGpLNnFUZA^LDx+6(u9LQZ zf-38!zg>hUoGJBWt`-oXGNPA~*_&mhUyAzOWabQ>=S)*F z`mg~{;z%e%`=%d``i}Ia{I>^GXNS_gUwWM1^ib00_95s~^vk;c^AZ{0DgDzo^rO

    a{AC*f?OkKrXSDmo|Rqc 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


    &;n%V5y|1lyI>%xDVB8c;rjZ$AMoLH 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

    5fG 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%0A0qOyG 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 V(A$AH6+eIDSKljpbCjdq{{=>LKY0KE literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/access_control_stm32.list b/access_control_stm32/Debug/access_control_stm32.list new file mode 100644 index 0000000..ff8aebb --- /dev/null +++ b/access_control_stm32/Debug/access_control_stm32.list @@ -0,0 +1,4902 @@ + +access_control_stm32.elf: file format elf32-littlearm + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .isr_vector 00000198 08000000 08000000 00010000 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 1 .text 00001ebc 08000198 08000198 00010198 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .rodata 00000018 08002054 08002054 00012054 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .ARM.extab 00000000 0800206c 0800206c 0002000c 2**0 + CONTENTS + 4 .ARM 00000008 0800206c 0800206c 0001206c 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 5 .preinit_array 00000000 08002074 08002074 0002000c 2**0 + CONTENTS, ALLOC, LOAD, DATA + 6 .init_array 00000004 08002074 08002074 00012074 2**2 + CONTENTS, ALLOC, LOAD, DATA + 7 .fini_array 00000004 08002078 08002078 00012078 2**2 + CONTENTS, ALLOC, LOAD, DATA + 8 .data 0000000c 20000000 0800207c 00020000 2**2 + CONTENTS, ALLOC, LOAD, DATA + 9 .bss 00000070 2000000c 08002088 0002000c 2**2 + ALLOC + 10 ._user_heap_stack 00000604 2000007c 08002088 0002007c 2**0 + ALLOC + 11 .ARM.attributes 00000030 00000000 00000000 0002000c 2**0 + CONTENTS, READONLY + 12 .comment 00000043 00000000 00000000 0002003c 2**0 + CONTENTS, READONLY + 13 .debug_info 000070cd 00000000 00000000 0002007f 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 14 .debug_abbrev 000012d3 00000000 00000000 0002714c 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 15 .debug_aranges 00000608 00000000 00000000 00028420 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 16 .debug_rnglists 0000049d 00000000 00000000 00028a28 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 17 .debug_macro 000152be 00000000 00000000 00028ec5 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 18 .debug_line 00007ae1 00000000 00000000 0003e183 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 19 .debug_str 00085048 00000000 00000000 00045c64 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 20 .debug_frame 000017a4 00000000 00000000 000cacac 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + 21 .debug_line_str 00000072 00000000 00000000 000cc450 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + +Disassembly of section .text: + +08000198 <__do_global_dtors_aux>: + 8000198: b510 push {r4, lr} + 800019a: 4c05 ldr r4, [pc, #20] ; (80001b0 <__do_global_dtors_aux+0x18>) + 800019c: 7823 ldrb r3, [r4, #0] + 800019e: b933 cbnz r3, 80001ae <__do_global_dtors_aux+0x16> + 80001a0: 4b04 ldr r3, [pc, #16] ; (80001b4 <__do_global_dtors_aux+0x1c>) + 80001a2: b113 cbz r3, 80001aa <__do_global_dtors_aux+0x12> + 80001a4: 4804 ldr r0, [pc, #16] ; (80001b8 <__do_global_dtors_aux+0x20>) + 80001a6: f3af 8000 nop.w + 80001aa: 2301 movs r3, #1 + 80001ac: 7023 strb r3, [r4, #0] + 80001ae: bd10 pop {r4, pc} + 80001b0: 2000000c .word 0x2000000c + 80001b4: 00000000 .word 0x00000000 + 80001b8: 0800203c .word 0x0800203c + +080001bc : + 80001bc: b508 push {r3, lr} + 80001be: 4b03 ldr r3, [pc, #12] ; (80001cc ) + 80001c0: b11b cbz r3, 80001ca + 80001c2: 4903 ldr r1, [pc, #12] ; (80001d0 ) + 80001c4: 4803 ldr r0, [pc, #12] ; (80001d4 ) + 80001c6: f3af 8000 nop.w + 80001ca: bd08 pop {r3, pc} + 80001cc: 00000000 .word 0x00000000 + 80001d0: 20000010 .word 0x20000010 + 80001d4: 0800203c .word 0x0800203c + +080001d8 <__aeabi_uldivmod>: + 80001d8: b953 cbnz r3, 80001f0 <__aeabi_uldivmod+0x18> + 80001da: b94a cbnz r2, 80001f0 <__aeabi_uldivmod+0x18> + 80001dc: 2900 cmp r1, #0 + 80001de: bf08 it eq + 80001e0: 2800 cmpeq r0, #0 + 80001e2: bf1c itt ne + 80001e4: f04f 31ff movne.w r1, #4294967295 + 80001e8: f04f 30ff movne.w r0, #4294967295 + 80001ec: f000 b970 b.w 80004d0 <__aeabi_idiv0> + 80001f0: f1ad 0c08 sub.w ip, sp, #8 + 80001f4: e96d ce04 strd ip, lr, [sp, #-16]! + 80001f8: f000 f806 bl 8000208 <__udivmoddi4> + 80001fc: f8dd e004 ldr.w lr, [sp, #4] + 8000200: e9dd 2302 ldrd r2, r3, [sp, #8] + 8000204: b004 add sp, #16 + 8000206: 4770 bx lr + +08000208 <__udivmoddi4>: + 8000208: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 800020c: 9e08 ldr r6, [sp, #32] + 800020e: 460d mov r5, r1 + 8000210: 4604 mov r4, r0 + 8000212: 460f mov r7, r1 + 8000214: 2b00 cmp r3, #0 + 8000216: d14a bne.n 80002ae <__udivmoddi4+0xa6> + 8000218: 428a cmp r2, r1 + 800021a: 4694 mov ip, r2 + 800021c: d965 bls.n 80002ea <__udivmoddi4+0xe2> + 800021e: fab2 f382 clz r3, r2 + 8000222: b143 cbz r3, 8000236 <__udivmoddi4+0x2e> + 8000224: fa02 fc03 lsl.w ip, r2, r3 + 8000228: f1c3 0220 rsb r2, r3, #32 + 800022c: 409f lsls r7, r3 + 800022e: fa20 f202 lsr.w r2, r0, r2 + 8000232: 4317 orrs r7, r2 + 8000234: 409c lsls r4, r3 + 8000236: ea4f 4e1c mov.w lr, ip, lsr #16 + 800023a: fa1f f58c uxth.w r5, ip + 800023e: fbb7 f1fe udiv r1, r7, lr + 8000242: 0c22 lsrs r2, r4, #16 + 8000244: fb0e 7711 mls r7, lr, r1, r7 + 8000248: ea42 4207 orr.w r2, r2, r7, lsl #16 + 800024c: fb01 f005 mul.w r0, r1, r5 + 8000250: 4290 cmp r0, r2 + 8000252: d90a bls.n 800026a <__udivmoddi4+0x62> + 8000254: eb1c 0202 adds.w r2, ip, r2 + 8000258: f101 37ff add.w r7, r1, #4294967295 + 800025c: f080 811c bcs.w 8000498 <__udivmoddi4+0x290> + 8000260: 4290 cmp r0, r2 + 8000262: f240 8119 bls.w 8000498 <__udivmoddi4+0x290> + 8000266: 3902 subs r1, #2 + 8000268: 4462 add r2, ip + 800026a: 1a12 subs r2, r2, r0 + 800026c: b2a4 uxth r4, r4 + 800026e: fbb2 f0fe udiv r0, r2, lr + 8000272: fb0e 2210 mls r2, lr, r0, r2 + 8000276: ea44 4402 orr.w r4, r4, r2, lsl #16 + 800027a: fb00 f505 mul.w r5, r0, r5 + 800027e: 42a5 cmp r5, r4 + 8000280: d90a bls.n 8000298 <__udivmoddi4+0x90> + 8000282: eb1c 0404 adds.w r4, ip, r4 + 8000286: f100 32ff add.w r2, r0, #4294967295 + 800028a: f080 8107 bcs.w 800049c <__udivmoddi4+0x294> + 800028e: 42a5 cmp r5, r4 + 8000290: f240 8104 bls.w 800049c <__udivmoddi4+0x294> + 8000294: 4464 add r4, ip + 8000296: 3802 subs r0, #2 + 8000298: ea40 4001 orr.w r0, r0, r1, lsl #16 + 800029c: 1b64 subs r4, r4, r5 + 800029e: 2100 movs r1, #0 + 80002a0: b11e cbz r6, 80002aa <__udivmoddi4+0xa2> + 80002a2: 40dc lsrs r4, r3 + 80002a4: 2300 movs r3, #0 + 80002a6: e9c6 4300 strd r4, r3, [r6] + 80002aa: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80002ae: 428b cmp r3, r1 + 80002b0: d908 bls.n 80002c4 <__udivmoddi4+0xbc> + 80002b2: 2e00 cmp r6, #0 + 80002b4: f000 80ed beq.w 8000492 <__udivmoddi4+0x28a> + 80002b8: 2100 movs r1, #0 + 80002ba: e9c6 0500 strd r0, r5, [r6] + 80002be: 4608 mov r0, r1 + 80002c0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80002c4: fab3 f183 clz r1, r3 + 80002c8: 2900 cmp r1, #0 + 80002ca: d149 bne.n 8000360 <__udivmoddi4+0x158> + 80002cc: 42ab cmp r3, r5 + 80002ce: d302 bcc.n 80002d6 <__udivmoddi4+0xce> + 80002d0: 4282 cmp r2, r0 + 80002d2: f200 80f8 bhi.w 80004c6 <__udivmoddi4+0x2be> + 80002d6: 1a84 subs r4, r0, r2 + 80002d8: eb65 0203 sbc.w r2, r5, r3 + 80002dc: 2001 movs r0, #1 + 80002de: 4617 mov r7, r2 + 80002e0: 2e00 cmp r6, #0 + 80002e2: d0e2 beq.n 80002aa <__udivmoddi4+0xa2> + 80002e4: e9c6 4700 strd r4, r7, [r6] + 80002e8: e7df b.n 80002aa <__udivmoddi4+0xa2> + 80002ea: b902 cbnz r2, 80002ee <__udivmoddi4+0xe6> + 80002ec: deff udf #255 ; 0xff + 80002ee: fab2 f382 clz r3, r2 + 80002f2: 2b00 cmp r3, #0 + 80002f4: f040 8090 bne.w 8000418 <__udivmoddi4+0x210> + 80002f8: 1a8a subs r2, r1, r2 + 80002fa: ea4f 471c mov.w r7, ip, lsr #16 + 80002fe: fa1f fe8c uxth.w lr, ip + 8000302: 2101 movs r1, #1 + 8000304: fbb2 f5f7 udiv r5, r2, r7 + 8000308: fb07 2015 mls r0, r7, r5, r2 + 800030c: 0c22 lsrs r2, r4, #16 + 800030e: ea42 4200 orr.w r2, r2, r0, lsl #16 + 8000312: fb0e f005 mul.w r0, lr, r5 + 8000316: 4290 cmp r0, r2 + 8000318: d908 bls.n 800032c <__udivmoddi4+0x124> + 800031a: eb1c 0202 adds.w r2, ip, r2 + 800031e: f105 38ff add.w r8, r5, #4294967295 + 8000322: d202 bcs.n 800032a <__udivmoddi4+0x122> + 8000324: 4290 cmp r0, r2 + 8000326: f200 80cb bhi.w 80004c0 <__udivmoddi4+0x2b8> + 800032a: 4645 mov r5, r8 + 800032c: 1a12 subs r2, r2, r0 + 800032e: b2a4 uxth r4, r4 + 8000330: fbb2 f0f7 udiv r0, r2, r7 + 8000334: fb07 2210 mls r2, r7, r0, r2 + 8000338: ea44 4402 orr.w r4, r4, r2, lsl #16 + 800033c: fb0e fe00 mul.w lr, lr, r0 + 8000340: 45a6 cmp lr, r4 + 8000342: d908 bls.n 8000356 <__udivmoddi4+0x14e> + 8000344: eb1c 0404 adds.w r4, ip, r4 + 8000348: f100 32ff add.w r2, r0, #4294967295 + 800034c: d202 bcs.n 8000354 <__udivmoddi4+0x14c> + 800034e: 45a6 cmp lr, r4 + 8000350: f200 80bb bhi.w 80004ca <__udivmoddi4+0x2c2> + 8000354: 4610 mov r0, r2 + 8000356: eba4 040e sub.w r4, r4, lr + 800035a: ea40 4005 orr.w r0, r0, r5, lsl #16 + 800035e: e79f b.n 80002a0 <__udivmoddi4+0x98> + 8000360: f1c1 0720 rsb r7, r1, #32 + 8000364: 408b lsls r3, r1 + 8000366: fa22 fc07 lsr.w ip, r2, r7 + 800036a: ea4c 0c03 orr.w ip, ip, r3 + 800036e: fa05 f401 lsl.w r4, r5, r1 + 8000372: fa20 f307 lsr.w r3, r0, r7 + 8000376: 40fd lsrs r5, r7 + 8000378: ea4f 491c mov.w r9, ip, lsr #16 + 800037c: 4323 orrs r3, r4 + 800037e: fbb5 f8f9 udiv r8, r5, r9 + 8000382: fa1f fe8c uxth.w lr, ip + 8000386: fb09 5518 mls r5, r9, r8, r5 + 800038a: 0c1c lsrs r4, r3, #16 + 800038c: ea44 4405 orr.w r4, r4, r5, lsl #16 + 8000390: fb08 f50e mul.w r5, r8, lr + 8000394: 42a5 cmp r5, r4 + 8000396: fa02 f201 lsl.w r2, r2, r1 + 800039a: fa00 f001 lsl.w r0, r0, r1 + 800039e: d90b bls.n 80003b8 <__udivmoddi4+0x1b0> + 80003a0: eb1c 0404 adds.w r4, ip, r4 + 80003a4: f108 3aff add.w sl, r8, #4294967295 + 80003a8: f080 8088 bcs.w 80004bc <__udivmoddi4+0x2b4> + 80003ac: 42a5 cmp r5, r4 + 80003ae: f240 8085 bls.w 80004bc <__udivmoddi4+0x2b4> + 80003b2: f1a8 0802 sub.w r8, r8, #2 + 80003b6: 4464 add r4, ip + 80003b8: 1b64 subs r4, r4, r5 + 80003ba: b29d uxth r5, r3 + 80003bc: fbb4 f3f9 udiv r3, r4, r9 + 80003c0: fb09 4413 mls r4, r9, r3, r4 + 80003c4: ea45 4404 orr.w r4, r5, r4, lsl #16 + 80003c8: fb03 fe0e mul.w lr, r3, lr + 80003cc: 45a6 cmp lr, r4 + 80003ce: d908 bls.n 80003e2 <__udivmoddi4+0x1da> + 80003d0: eb1c 0404 adds.w r4, ip, r4 + 80003d4: f103 35ff add.w r5, r3, #4294967295 + 80003d8: d26c bcs.n 80004b4 <__udivmoddi4+0x2ac> + 80003da: 45a6 cmp lr, r4 + 80003dc: d96a bls.n 80004b4 <__udivmoddi4+0x2ac> + 80003de: 3b02 subs r3, #2 + 80003e0: 4464 add r4, ip + 80003e2: ea43 4308 orr.w r3, r3, r8, lsl #16 + 80003e6: fba3 9502 umull r9, r5, r3, r2 + 80003ea: eba4 040e sub.w r4, r4, lr + 80003ee: 42ac cmp r4, r5 + 80003f0: 46c8 mov r8, r9 + 80003f2: 46ae mov lr, r5 + 80003f4: d356 bcc.n 80004a4 <__udivmoddi4+0x29c> + 80003f6: d053 beq.n 80004a0 <__udivmoddi4+0x298> + 80003f8: b156 cbz r6, 8000410 <__udivmoddi4+0x208> + 80003fa: ebb0 0208 subs.w r2, r0, r8 + 80003fe: eb64 040e sbc.w r4, r4, lr + 8000402: fa04 f707 lsl.w r7, r4, r7 + 8000406: 40ca lsrs r2, r1 + 8000408: 40cc lsrs r4, r1 + 800040a: 4317 orrs r7, r2 + 800040c: e9c6 7400 strd r7, r4, [r6] + 8000410: 4618 mov r0, r3 + 8000412: 2100 movs r1, #0 + 8000414: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8000418: f1c3 0120 rsb r1, r3, #32 + 800041c: fa02 fc03 lsl.w ip, r2, r3 + 8000420: fa20 f201 lsr.w r2, r0, r1 + 8000424: fa25 f101 lsr.w r1, r5, r1 + 8000428: 409d lsls r5, r3 + 800042a: 432a orrs r2, r5 + 800042c: ea4f 471c mov.w r7, ip, lsr #16 + 8000430: fa1f fe8c uxth.w lr, ip + 8000434: fbb1 f0f7 udiv r0, r1, r7 + 8000438: fb07 1510 mls r5, r7, r0, r1 + 800043c: 0c11 lsrs r1, r2, #16 + 800043e: ea41 4105 orr.w r1, r1, r5, lsl #16 + 8000442: fb00 f50e mul.w r5, r0, lr + 8000446: 428d cmp r5, r1 + 8000448: fa04 f403 lsl.w r4, r4, r3 + 800044c: d908 bls.n 8000460 <__udivmoddi4+0x258> + 800044e: eb1c 0101 adds.w r1, ip, r1 + 8000452: f100 38ff add.w r8, r0, #4294967295 + 8000456: d22f bcs.n 80004b8 <__udivmoddi4+0x2b0> + 8000458: 428d cmp r5, r1 + 800045a: d92d bls.n 80004b8 <__udivmoddi4+0x2b0> + 800045c: 3802 subs r0, #2 + 800045e: 4461 add r1, ip + 8000460: 1b49 subs r1, r1, r5 + 8000462: b292 uxth r2, r2 + 8000464: fbb1 f5f7 udiv r5, r1, r7 + 8000468: fb07 1115 mls r1, r7, r5, r1 + 800046c: ea42 4201 orr.w r2, r2, r1, lsl #16 + 8000470: fb05 f10e mul.w r1, r5, lr + 8000474: 4291 cmp r1, r2 + 8000476: d908 bls.n 800048a <__udivmoddi4+0x282> + 8000478: eb1c 0202 adds.w r2, ip, r2 + 800047c: f105 38ff add.w r8, r5, #4294967295 + 8000480: d216 bcs.n 80004b0 <__udivmoddi4+0x2a8> + 8000482: 4291 cmp r1, r2 + 8000484: d914 bls.n 80004b0 <__udivmoddi4+0x2a8> + 8000486: 3d02 subs r5, #2 + 8000488: 4462 add r2, ip + 800048a: 1a52 subs r2, r2, r1 + 800048c: ea45 4100 orr.w r1, r5, r0, lsl #16 + 8000490: e738 b.n 8000304 <__udivmoddi4+0xfc> + 8000492: 4631 mov r1, r6 + 8000494: 4630 mov r0, r6 + 8000496: e708 b.n 80002aa <__udivmoddi4+0xa2> + 8000498: 4639 mov r1, r7 + 800049a: e6e6 b.n 800026a <__udivmoddi4+0x62> + 800049c: 4610 mov r0, r2 + 800049e: e6fb b.n 8000298 <__udivmoddi4+0x90> + 80004a0: 4548 cmp r0, r9 + 80004a2: d2a9 bcs.n 80003f8 <__udivmoddi4+0x1f0> + 80004a4: ebb9 0802 subs.w r8, r9, r2 + 80004a8: eb65 0e0c sbc.w lr, r5, ip + 80004ac: 3b01 subs r3, #1 + 80004ae: e7a3 b.n 80003f8 <__udivmoddi4+0x1f0> + 80004b0: 4645 mov r5, r8 + 80004b2: e7ea b.n 800048a <__udivmoddi4+0x282> + 80004b4: 462b mov r3, r5 + 80004b6: e794 b.n 80003e2 <__udivmoddi4+0x1da> + 80004b8: 4640 mov r0, r8 + 80004ba: e7d1 b.n 8000460 <__udivmoddi4+0x258> + 80004bc: 46d0 mov r8, sl + 80004be: e77b b.n 80003b8 <__udivmoddi4+0x1b0> + 80004c0: 3d02 subs r5, #2 + 80004c2: 4462 add r2, ip + 80004c4: e732 b.n 800032c <__udivmoddi4+0x124> + 80004c6: 4608 mov r0, r1 + 80004c8: e70a b.n 80002e0 <__udivmoddi4+0xd8> + 80004ca: 4464 add r4, ip + 80004cc: 3802 subs r0, #2 + 80004ce: e742 b.n 8000356 <__udivmoddi4+0x14e> + +080004d0 <__aeabi_idiv0>: + 80004d0: 4770 bx lr + 80004d2: bf00 nop + +080004d4

    : +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + 80004d4: b580 push {r7, lr} + 80004d6: af00 add r7, sp, #0 + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init();; + 80004d8: f000 fa24 bl 8000924 + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + 80004dc: f000 f844 bl 8000568 + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + 80004e0: f000 f8d6 bl 8000690 + MX_USART2_UART_Init(); + 80004e4: f000 f8aa bl 800063c + /* USER CODE BEGIN 2 */ + memset(uart_buffer,0,10); + 80004e8: 220a movs r2, #10 + 80004ea: 2100 movs r1, #0 + 80004ec: 481a ldr r0, [pc, #104] ; (8000558 ) + 80004ee: f001 fd79 bl 8001fe4 + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + if(HAL_UART_Receive(&huart2, uart_buffer+uart_index, 1, 250) == HAL_OK) { + 80004f2: 4b1a ldr r3, [pc, #104] ; (800055c ) + 80004f4: 781b ldrb r3, [r3, #0] + 80004f6: 461a mov r2, r3 + 80004f8: 4b17 ldr r3, [pc, #92] ; (8000558 ) + 80004fa: 18d1 adds r1, r2, r3 + 80004fc: 23fa movs r3, #250 ; 0xfa + 80004fe: 2201 movs r2, #1 + 8000500: 4817 ldr r0, [pc, #92] ; (8000560 ) + 8000502: f001 f9ea bl 80018da + 8000506: 4603 mov r3, r0 + 8000508: 2b00 cmp r3, #0 + 800050a: d1f2 bne.n 80004f2 + uart_index++; + 800050c: 4b13 ldr r3, [pc, #76] ; (800055c ) + 800050e: 781b ldrb r3, [r3, #0] + 8000510: 3301 adds r3, #1 + 8000512: b2da uxtb r2, r3 + 8000514: 4b11 ldr r3, [pc, #68] ; (800055c ) + 8000516: 701a strb r2, [r3, #0] + if(uart_buffer[uart_index-1] == 0xFF) { + 8000518: 4b10 ldr r3, [pc, #64] ; (800055c ) + 800051a: 781b ldrb r3, [r3, #0] + 800051c: 3b01 subs r3, #1 + 800051e: 4a0e ldr r2, [pc, #56] ; (8000558 ) + 8000520: 5cd3 ldrb r3, [r2, r3] + 8000522: 2bff cmp r3, #255 ; 0xff + 8000524: d1e5 bne.n 80004f2 + if(uart_index>1) { + 8000526: 4b0d ldr r3, [pc, #52] ; (800055c ) + 8000528: 781b ldrb r3, [r3, #0] + 800052a: 2b01 cmp r3, #1 + 800052c: d90a bls.n 8000544 + if(uart_buffer[0]==0x00) { + 800052e: 4b0a ldr r3, [pc, #40] ; (8000558 ) + 8000530: 781b ldrb r3, [r3, #0] + 8000532: 2b00 cmp r3, #0 + 8000534: d106 bne.n 8000544 + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, uart_buffer[1]); + 8000536: 4b08 ldr r3, [pc, #32] ; (8000558 ) + 8000538: 785b ldrb r3, [r3, #1] + 800053a: 461a mov r2, r3 + 800053c: 2120 movs r1, #32 + 800053e: 4809 ldr r0, [pc, #36] ; (8000564 ) + 8000540: f000 fccc bl 8000edc + } + } + uart_index = 0; + 8000544: 4b05 ldr r3, [pc, #20] ; (800055c ) + 8000546: 2200 movs r2, #0 + 8000548: 701a strb r2, [r3, #0] + memset(uart_buffer,0,10); + 800054a: 220a movs r2, #10 + 800054c: 2100 movs r1, #0 + 800054e: 4802 ldr r0, [pc, #8] ; (8000558 ) + 8000550: f001 fd48 bl 8001fe4 + if(HAL_UART_Receive(&huart2, uart_buffer+uart_index, 1, 250) == HAL_OK) { + 8000554: e7cd b.n 80004f2 + 8000556: bf00 nop + 8000558: 2000006c .word 0x2000006c + 800055c: 20000076 .word 0x20000076 + 8000560: 20000028 .word 0x20000028 + 8000564: 40020000 .word 0x40020000 + +08000568 : +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + 8000568: b580 push {r7, lr} + 800056a: b094 sub sp, #80 ; 0x50 + 800056c: af00 add r7, sp, #0 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 800056e: f107 0320 add.w r3, r7, #32 + 8000572: 2230 movs r2, #48 ; 0x30 + 8000574: 2100 movs r1, #0 + 8000576: 4618 mov r0, r3 + 8000578: f001 fd34 bl 8001fe4 + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + 800057c: f107 030c add.w r3, r7, #12 + 8000580: 2200 movs r2, #0 + 8000582: 601a str r2, [r3, #0] + 8000584: 605a str r2, [r3, #4] + 8000586: 609a str r2, [r3, #8] + 8000588: 60da str r2, [r3, #12] + 800058a: 611a str r2, [r3, #16] + + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + 800058c: 2300 movs r3, #0 + 800058e: 60bb str r3, [r7, #8] + 8000590: 4b28 ldr r3, [pc, #160] ; (8000634 ) + 8000592: 6c1b ldr r3, [r3, #64] ; 0x40 + 8000594: 4a27 ldr r2, [pc, #156] ; (8000634 ) + 8000596: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 800059a: 6413 str r3, [r2, #64] ; 0x40 + 800059c: 4b25 ldr r3, [pc, #148] ; (8000634 ) + 800059e: 6c1b ldr r3, [r3, #64] ; 0x40 + 80005a0: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 80005a4: 60bb str r3, [r7, #8] + 80005a6: 68bb ldr r3, [r7, #8] + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + 80005a8: 2300 movs r3, #0 + 80005aa: 607b str r3, [r7, #4] + 80005ac: 4b22 ldr r3, [pc, #136] ; (8000638 ) + 80005ae: 681b ldr r3, [r3, #0] + 80005b0: 4a21 ldr r2, [pc, #132] ; (8000638 ) + 80005b2: f443 4340 orr.w r3, r3, #49152 ; 0xc000 + 80005b6: 6013 str r3, [r2, #0] + 80005b8: 4b1f ldr r3, [pc, #124] ; (8000638 ) + 80005ba: 681b ldr r3, [r3, #0] + 80005bc: f403 4340 and.w r3, r3, #49152 ; 0xc000 + 80005c0: 607b str r3, [r7, #4] + 80005c2: 687b ldr r3, [r7, #4] + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + 80005c4: 2302 movs r3, #2 + 80005c6: 623b str r3, [r7, #32] + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + 80005c8: 2301 movs r3, #1 + 80005ca: 62fb str r3, [r7, #44] ; 0x2c + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + 80005cc: 2310 movs r3, #16 + 80005ce: 633b str r3, [r7, #48] ; 0x30 + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + 80005d0: 2302 movs r3, #2 + 80005d2: 63bb str r3, [r7, #56] ; 0x38 + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + 80005d4: 2300 movs r3, #0 + 80005d6: 63fb str r3, [r7, #60] ; 0x3c + RCC_OscInitStruct.PLL.PLLM = 16; + 80005d8: 2310 movs r3, #16 + 80005da: 643b str r3, [r7, #64] ; 0x40 + RCC_OscInitStruct.PLL.PLLN = 336; + 80005dc: f44f 73a8 mov.w r3, #336 ; 0x150 + 80005e0: 647b str r3, [r7, #68] ; 0x44 + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; + 80005e2: 2304 movs r3, #4 + 80005e4: 64bb str r3, [r7, #72] ; 0x48 + RCC_OscInitStruct.PLL.PLLQ = 4; + 80005e6: 2304 movs r3, #4 + 80005e8: 64fb str r3, [r7, #76] ; 0x4c + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 80005ea: f107 0320 add.w r3, r7, #32 + 80005ee: 4618 mov r0, r3 + 80005f0: f000 fc8e bl 8000f10 + 80005f4: 4603 mov r3, r0 + 80005f6: 2b00 cmp r3, #0 + 80005f8: d001 beq.n 80005fe + { + Error_Handler(); + 80005fa: f000 f8b7 bl 800076c + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + 80005fe: 230f movs r3, #15 + 8000600: 60fb str r3, [r7, #12] + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + 8000602: 2302 movs r3, #2 + 8000604: 613b str r3, [r7, #16] + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + 8000606: 2300 movs r3, #0 + 8000608: 617b str r3, [r7, #20] + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + 800060a: f44f 5380 mov.w r3, #4096 ; 0x1000 + 800060e: 61bb str r3, [r7, #24] + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + 8000610: 2300 movs r3, #0 + 8000612: 61fb str r3, [r7, #28] + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + 8000614: f107 030c add.w r3, r7, #12 + 8000618: 2102 movs r1, #2 + 800061a: 4618 mov r0, r3 + 800061c: f000 fef0 bl 8001400 + 8000620: 4603 mov r3, r0 + 8000622: 2b00 cmp r3, #0 + 8000624: d001 beq.n 800062a + { + Error_Handler(); + 8000626: f000 f8a1 bl 800076c + } +} + 800062a: bf00 nop + 800062c: 3750 adds r7, #80 ; 0x50 + 800062e: 46bd mov sp, r7 + 8000630: bd80 pop {r7, pc} + 8000632: bf00 nop + 8000634: 40023800 .word 0x40023800 + 8000638: 40007000 .word 0x40007000 + +0800063c : + * @brief USART2 Initialization Function + * @param None + * @retval None + */ +static void MX_USART2_UART_Init(void) +{ + 800063c: b580 push {r7, lr} + 800063e: af00 add r7, sp, #0 + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + 8000640: 4b11 ldr r3, [pc, #68] ; (8000688 ) + 8000642: 4a12 ldr r2, [pc, #72] ; (800068c ) + 8000644: 601a str r2, [r3, #0] + huart2.Init.BaudRate = 115200; + 8000646: 4b10 ldr r3, [pc, #64] ; (8000688 ) + 8000648: f44f 32e1 mov.w r2, #115200 ; 0x1c200 + 800064c: 605a str r2, [r3, #4] + huart2.Init.WordLength = UART_WORDLENGTH_8B; + 800064e: 4b0e ldr r3, [pc, #56] ; (8000688 ) + 8000650: 2200 movs r2, #0 + 8000652: 609a str r2, [r3, #8] + huart2.Init.StopBits = UART_STOPBITS_1; + 8000654: 4b0c ldr r3, [pc, #48] ; (8000688 ) + 8000656: 2200 movs r2, #0 + 8000658: 60da str r2, [r3, #12] + huart2.Init.Parity = UART_PARITY_NONE; + 800065a: 4b0b ldr r3, [pc, #44] ; (8000688 ) + 800065c: 2200 movs r2, #0 + 800065e: 611a str r2, [r3, #16] + huart2.Init.Mode = UART_MODE_TX_RX; + 8000660: 4b09 ldr r3, [pc, #36] ; (8000688 ) + 8000662: 220c movs r2, #12 + 8000664: 615a str r2, [r3, #20] + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 8000666: 4b08 ldr r3, [pc, #32] ; (8000688 ) + 8000668: 2200 movs r2, #0 + 800066a: 619a str r2, [r3, #24] + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + 800066c: 4b06 ldr r3, [pc, #24] ; (8000688 ) + 800066e: 2200 movs r2, #0 + 8000670: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart2) != HAL_OK) + 8000672: 4805 ldr r0, [pc, #20] ; (8000688 ) + 8000674: f001 f8e4 bl 8001840 + 8000678: 4603 mov r3, r0 + 800067a: 2b00 cmp r3, #0 + 800067c: d001 beq.n 8000682 + { + Error_Handler(); + 800067e: f000 f875 bl 800076c + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + 8000682: bf00 nop + 8000684: bd80 pop {r7, pc} + 8000686: bf00 nop + 8000688: 20000028 .word 0x20000028 + 800068c: 40004400 .word 0x40004400 + +08000690 : + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + 8000690: b580 push {r7, lr} + 8000692: b08a sub sp, #40 ; 0x28 + 8000694: af00 add r7, sp, #0 + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8000696: f107 0314 add.w r3, r7, #20 + 800069a: 2200 movs r2, #0 + 800069c: 601a str r2, [r3, #0] + 800069e: 605a str r2, [r3, #4] + 80006a0: 609a str r2, [r3, #8] + 80006a2: 60da str r2, [r3, #12] + 80006a4: 611a str r2, [r3, #16] +/* USER CODE BEGIN MX_GPIO_Init_1 */ +/* USER CODE END MX_GPIO_Init_1 */ + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + 80006a6: 2300 movs r3, #0 + 80006a8: 613b str r3, [r7, #16] + 80006aa: 4b2d ldr r3, [pc, #180] ; (8000760 ) + 80006ac: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006ae: 4a2c ldr r2, [pc, #176] ; (8000760 ) + 80006b0: f043 0304 orr.w r3, r3, #4 + 80006b4: 6313 str r3, [r2, #48] ; 0x30 + 80006b6: 4b2a ldr r3, [pc, #168] ; (8000760 ) + 80006b8: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006ba: f003 0304 and.w r3, r3, #4 + 80006be: 613b str r3, [r7, #16] + 80006c0: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOH_CLK_ENABLE(); + 80006c2: 2300 movs r3, #0 + 80006c4: 60fb str r3, [r7, #12] + 80006c6: 4b26 ldr r3, [pc, #152] ; (8000760 ) + 80006c8: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006ca: 4a25 ldr r2, [pc, #148] ; (8000760 ) + 80006cc: f043 0380 orr.w r3, r3, #128 ; 0x80 + 80006d0: 6313 str r3, [r2, #48] ; 0x30 + 80006d2: 4b23 ldr r3, [pc, #140] ; (8000760 ) + 80006d4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006d6: f003 0380 and.w r3, r3, #128 ; 0x80 + 80006da: 60fb str r3, [r7, #12] + 80006dc: 68fb ldr r3, [r7, #12] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 80006de: 2300 movs r3, #0 + 80006e0: 60bb str r3, [r7, #8] + 80006e2: 4b1f ldr r3, [pc, #124] ; (8000760 ) + 80006e4: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006e6: 4a1e ldr r2, [pc, #120] ; (8000760 ) + 80006e8: f043 0301 orr.w r3, r3, #1 + 80006ec: 6313 str r3, [r2, #48] ; 0x30 + 80006ee: 4b1c ldr r3, [pc, #112] ; (8000760 ) + 80006f0: 6b1b ldr r3, [r3, #48] ; 0x30 + 80006f2: f003 0301 and.w r3, r3, #1 + 80006f6: 60bb str r3, [r7, #8] + 80006f8: 68bb ldr r3, [r7, #8] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 80006fa: 2300 movs r3, #0 + 80006fc: 607b str r3, [r7, #4] + 80006fe: 4b18 ldr r3, [pc, #96] ; (8000760 ) + 8000700: 6b1b ldr r3, [r3, #48] ; 0x30 + 8000702: 4a17 ldr r2, [pc, #92] ; (8000760 ) + 8000704: f043 0302 orr.w r3, r3, #2 + 8000708: 6313 str r3, [r2, #48] ; 0x30 + 800070a: 4b15 ldr r3, [pc, #84] ; (8000760 ) + 800070c: 6b1b ldr r3, [r3, #48] ; 0x30 + 800070e: f003 0302 and.w r3, r3, #2 + 8000712: 607b str r3, [r7, #4] + 8000714: 687b ldr r3, [r7, #4] + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); + 8000716: 2200 movs r2, #0 + 8000718: 2120 movs r1, #32 + 800071a: 4812 ldr r0, [pc, #72] ; (8000764 ) + 800071c: f000 fbde bl 8000edc + + /*Configure GPIO pin : B1_Pin */ + GPIO_InitStruct.Pin = B1_Pin; + 8000720: f44f 5300 mov.w r3, #8192 ; 0x2000 + 8000724: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + 8000726: f44f 1304 mov.w r3, #2162688 ; 0x210000 + 800072a: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800072c: 2300 movs r3, #0 + 800072e: 61fb str r3, [r7, #28] + HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); + 8000730: f107 0314 add.w r3, r7, #20 + 8000734: 4619 mov r1, r3 + 8000736: 480c ldr r0, [pc, #48] ; (8000768 ) + 8000738: f000 fa4c bl 8000bd4 + + /*Configure GPIO pin : LD2_Pin */ + GPIO_InitStruct.Pin = LD2_Pin; + 800073c: 2320 movs r3, #32 + 800073e: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 8000740: 2301 movs r3, #1 + 8000742: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8000744: 2300 movs r3, #0 + 8000746: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 8000748: 2300 movs r3, #0 + 800074a: 623b str r3, [r7, #32] + HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct); + 800074c: f107 0314 add.w r3, r7, #20 + 8000750: 4619 mov r1, r3 + 8000752: 4804 ldr r0, [pc, #16] ; (8000764 ) + 8000754: f000 fa3e bl 8000bd4 + +/* USER CODE BEGIN MX_GPIO_Init_2 */ +/* USER CODE END MX_GPIO_Init_2 */ +} + 8000758: bf00 nop + 800075a: 3728 adds r7, #40 ; 0x28 + 800075c: 46bd mov sp, r7 + 800075e: bd80 pop {r7, pc} + 8000760: 40023800 .word 0x40023800 + 8000764: 40020000 .word 0x40020000 + 8000768: 40020800 .word 0x40020800 + +0800076c : +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + 800076c: b480 push {r7} + 800076e: af00 add r7, sp, #0 + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); + 8000770: b672 cpsid i +} + 8000772: bf00 nop + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + 8000774: e7fe b.n 8000774 + ... + +08000778 : +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + 8000778: b580 push {r7, lr} + 800077a: b082 sub sp, #8 + 800077c: af00 add r7, sp, #0 + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 800077e: 2300 movs r3, #0 + 8000780: 607b str r3, [r7, #4] + 8000782: 4b10 ldr r3, [pc, #64] ; (80007c4 ) + 8000784: 6c5b ldr r3, [r3, #68] ; 0x44 + 8000786: 4a0f ldr r2, [pc, #60] ; (80007c4 ) + 8000788: f443 4380 orr.w r3, r3, #16384 ; 0x4000 + 800078c: 6453 str r3, [r2, #68] ; 0x44 + 800078e: 4b0d ldr r3, [pc, #52] ; (80007c4 ) + 8000790: 6c5b ldr r3, [r3, #68] ; 0x44 + 8000792: f403 4380 and.w r3, r3, #16384 ; 0x4000 + 8000796: 607b str r3, [r7, #4] + 8000798: 687b ldr r3, [r7, #4] + __HAL_RCC_PWR_CLK_ENABLE(); + 800079a: 2300 movs r3, #0 + 800079c: 603b str r3, [r7, #0] + 800079e: 4b09 ldr r3, [pc, #36] ; (80007c4 ) + 80007a0: 6c1b ldr r3, [r3, #64] ; 0x40 + 80007a2: 4a08 ldr r2, [pc, #32] ; (80007c4 ) + 80007a4: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 80007a8: 6413 str r3, [r2, #64] ; 0x40 + 80007aa: 4b06 ldr r3, [pc, #24] ; (80007c4 ) + 80007ac: 6c1b ldr r3, [r3, #64] ; 0x40 + 80007ae: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 80007b2: 603b str r3, [r7, #0] + 80007b4: 683b ldr r3, [r7, #0] + + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); + 80007b6: 2007 movs r0, #7 + 80007b8: f000 f9d8 bl 8000b6c + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + 80007bc: bf00 nop + 80007be: 3708 adds r7, #8 + 80007c0: 46bd mov sp, r7 + 80007c2: bd80 pop {r7, pc} + 80007c4: 40023800 .word 0x40023800 + +080007c8 : +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + 80007c8: b580 push {r7, lr} + 80007ca: b08a sub sp, #40 ; 0x28 + 80007cc: af00 add r7, sp, #0 + 80007ce: 6078 str r0, [r7, #4] + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80007d0: f107 0314 add.w r3, r7, #20 + 80007d4: 2200 movs r2, #0 + 80007d6: 601a str r2, [r3, #0] + 80007d8: 605a str r2, [r3, #4] + 80007da: 609a str r2, [r3, #8] + 80007dc: 60da str r2, [r3, #12] + 80007de: 611a str r2, [r3, #16] + if(huart->Instance==USART2) + 80007e0: 687b ldr r3, [r7, #4] + 80007e2: 681b ldr r3, [r3, #0] + 80007e4: 4a19 ldr r2, [pc, #100] ; (800084c ) + 80007e6: 4293 cmp r3, r2 + 80007e8: d12b bne.n 8000842 + { + /* USER CODE BEGIN USART2_MspInit 0 */ + + /* USER CODE END USART2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + 80007ea: 2300 movs r3, #0 + 80007ec: 613b str r3, [r7, #16] + 80007ee: 4b18 ldr r3, [pc, #96] ; (8000850 ) + 80007f0: 6c1b ldr r3, [r3, #64] ; 0x40 + 80007f2: 4a17 ldr r2, [pc, #92] ; (8000850 ) + 80007f4: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 80007f8: 6413 str r3, [r2, #64] ; 0x40 + 80007fa: 4b15 ldr r3, [pc, #84] ; (8000850 ) + 80007fc: 6c1b ldr r3, [r3, #64] ; 0x40 + 80007fe: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000802: 613b str r3, [r7, #16] + 8000804: 693b ldr r3, [r7, #16] + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 8000806: 2300 movs r3, #0 + 8000808: 60fb str r3, [r7, #12] + 800080a: 4b11 ldr r3, [pc, #68] ; (8000850 ) + 800080c: 6b1b ldr r3, [r3, #48] ; 0x30 + 800080e: 4a10 ldr r2, [pc, #64] ; (8000850 ) + 8000810: f043 0301 orr.w r3, r3, #1 + 8000814: 6313 str r3, [r2, #48] ; 0x30 + 8000816: 4b0e ldr r3, [pc, #56] ; (8000850 ) + 8000818: 6b1b ldr r3, [r3, #48] ; 0x30 + 800081a: f003 0301 and.w r3, r3, #1 + 800081e: 60fb str r3, [r7, #12] + 8000820: 68fb ldr r3, [r7, #12] + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = USART_TX_Pin|USART_RX_Pin; + 8000822: 230c movs r3, #12 + 8000824: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8000826: 2302 movs r3, #2 + 8000828: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800082a: 2300 movs r3, #0 + 800082c: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + 800082e: 2303 movs r3, #3 + 8000830: 623b str r3, [r7, #32] + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + 8000832: 2307 movs r3, #7 + 8000834: 627b str r3, [r7, #36] ; 0x24 + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8000836: f107 0314 add.w r3, r7, #20 + 800083a: 4619 mov r1, r3 + 800083c: 4805 ldr r0, [pc, #20] ; (8000854 ) + 800083e: f000 f9c9 bl 8000bd4 + /* USER CODE BEGIN USART2_MspInit 1 */ + + /* USER CODE END USART2_MspInit 1 */ + } + +} + 8000842: bf00 nop + 8000844: 3728 adds r7, #40 ; 0x28 + 8000846: 46bd mov sp, r7 + 8000848: bd80 pop {r7, pc} + 800084a: bf00 nop + 800084c: 40004400 .word 0x40004400 + 8000850: 40023800 .word 0x40023800 + 8000854: 40020000 .word 0x40020000 + +08000858 : +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + 8000858: b480 push {r7} + 800085a: af00 add r7, sp, #0 + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + while (1) + 800085c: e7fe b.n 800085c + +0800085e : + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + 800085e: b480 push {r7} + 8000860: af00 add r7, sp, #0 + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + 8000862: e7fe b.n 8000862 + +08000864 : + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + 8000864: b480 push {r7} + 8000866: af00 add r7, sp, #0 + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + 8000868: e7fe b.n 8000868 + +0800086a : + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + 800086a: b480 push {r7} + 800086c: af00 add r7, sp, #0 + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + 800086e: e7fe b.n 800086e + +08000870 : + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + 8000870: b480 push {r7} + 8000872: af00 add r7, sp, #0 + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + 8000874: e7fe b.n 8000874 + +08000876 : + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + 8000876: b480 push {r7} + 8000878: af00 add r7, sp, #0 + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + 800087a: bf00 nop + 800087c: 46bd mov sp, r7 + 800087e: f85d 7b04 ldr.w r7, [sp], #4 + 8000882: 4770 bx lr + +08000884 : + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + 8000884: b480 push {r7} + 8000886: af00 add r7, sp, #0 + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + 8000888: bf00 nop + 800088a: 46bd mov sp, r7 + 800088c: f85d 7b04 ldr.w r7, [sp], #4 + 8000890: 4770 bx lr + +08000892 : + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + 8000892: b480 push {r7} + 8000894: af00 add r7, sp, #0 + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + 8000896: bf00 nop + 8000898: 46bd mov sp, r7 + 800089a: f85d 7b04 ldr.w r7, [sp], #4 + 800089e: 4770 bx lr + +080008a0 : + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + 80008a0: b580 push {r7, lr} + 80008a2: af00 add r7, sp, #0 + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + 80008a4: f000 f890 bl 80009c8 + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + 80008a8: bf00 nop + 80008aa: bd80 pop {r7, pc} + +080008ac : + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + 80008ac: b480 push {r7} + 80008ae: af00 add r7, sp, #0 + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + 80008b0: 4b06 ldr r3, [pc, #24] ; (80008cc ) + 80008b2: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 + 80008b6: 4a05 ldr r2, [pc, #20] ; (80008cc ) + 80008b8: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000 + 80008bc: f8c2 3088 str.w r3, [r2, #136] ; 0x88 + + /* Configure the Vector Table location -------------------------------------*/ +#if defined(USER_VECT_TAB_ADDRESS) + SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#endif /* USER_VECT_TAB_ADDRESS */ +} + 80008c0: bf00 nop + 80008c2: 46bd mov sp, r7 + 80008c4: f85d 7b04 ldr.w r7, [sp], #4 + 80008c8: 4770 bx lr + 80008ca: bf00 nop + 80008cc: e000ed00 .word 0xe000ed00 + +080008d0 : + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + 80008d0: f8df d034 ldr.w sp, [pc, #52] ; 8000908 + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + 80008d4: 480d ldr r0, [pc, #52] ; (800090c ) + ldr r1, =_edata + 80008d6: 490e ldr r1, [pc, #56] ; (8000910 ) + ldr r2, =_sidata + 80008d8: 4a0e ldr r2, [pc, #56] ; (8000914 ) + movs r3, #0 + 80008da: 2300 movs r3, #0 + b LoopCopyDataInit + 80008dc: e002 b.n 80008e4 + +080008de : + +CopyDataInit: + ldr r4, [r2, r3] + 80008de: 58d4 ldr r4, [r2, r3] + str r4, [r0, r3] + 80008e0: 50c4 str r4, [r0, r3] + adds r3, r3, #4 + 80008e2: 3304 adds r3, #4 + +080008e4 : + +LoopCopyDataInit: + adds r4, r0, r3 + 80008e4: 18c4 adds r4, r0, r3 + cmp r4, r1 + 80008e6: 428c cmp r4, r1 + bcc CopyDataInit + 80008e8: d3f9 bcc.n 80008de + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + 80008ea: 4a0b ldr r2, [pc, #44] ; (8000918 ) + ldr r4, =_ebss + 80008ec: 4c0b ldr r4, [pc, #44] ; (800091c ) + movs r3, #0 + 80008ee: 2300 movs r3, #0 + b LoopFillZerobss + 80008f0: e001 b.n 80008f6 + +080008f2 : + +FillZerobss: + str r3, [r2] + 80008f2: 6013 str r3, [r2, #0] + adds r2, r2, #4 + 80008f4: 3204 adds r2, #4 + +080008f6 : + +LoopFillZerobss: + cmp r2, r4 + 80008f6: 42a2 cmp r2, r4 + bcc FillZerobss + 80008f8: d3fb bcc.n 80008f2 + +/* Call the clock system initialization function.*/ + bl SystemInit + 80008fa: f7ff ffd7 bl 80008ac +/* Call static constructors */ + bl __libc_init_array + 80008fe: f001 fb79 bl 8001ff4 <__libc_init_array> +/* Call the application's entry point.*/ + bl main + 8000902: f7ff fde7 bl 80004d4
    + bx lr + 8000906: 4770 bx lr + ldr sp, =_estack /* set stack pointer */ + 8000908: 20020000 .word 0x20020000 + ldr r0, =_sdata + 800090c: 20000000 .word 0x20000000 + ldr r1, =_edata + 8000910: 2000000c .word 0x2000000c + ldr r2, =_sidata + 8000914: 0800207c .word 0x0800207c + ldr r2, =_sbss + 8000918: 2000000c .word 0x2000000c + ldr r4, =_ebss + 800091c: 2000007c .word 0x2000007c + +08000920 : + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + 8000920: e7fe b.n 8000920 + ... + +08000924 : + * need to ensure that the SysTick time base is always set to 1 millisecond + * to have correct HAL operation. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + 8000924: b580 push {r7, lr} + 8000926: af00 add r7, sp, #0 + /* Configure Flash prefetch, Instruction cache, Data cache */ +#if (INSTRUCTION_CACHE_ENABLE != 0U) + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); + 8000928: 4b0e ldr r3, [pc, #56] ; (8000964 ) + 800092a: 681b ldr r3, [r3, #0] + 800092c: 4a0d ldr r2, [pc, #52] ; (8000964 ) + 800092e: f443 7300 orr.w r3, r3, #512 ; 0x200 + 8000932: 6013 str r3, [r2, #0] +#endif /* INSTRUCTION_CACHE_ENABLE */ + +#if (DATA_CACHE_ENABLE != 0U) + __HAL_FLASH_DATA_CACHE_ENABLE(); + 8000934: 4b0b ldr r3, [pc, #44] ; (8000964 ) + 8000936: 681b ldr r3, [r3, #0] + 8000938: 4a0a ldr r2, [pc, #40] ; (8000964 ) + 800093a: f443 6380 orr.w r3, r3, #1024 ; 0x400 + 800093e: 6013 str r3, [r2, #0] +#endif /* DATA_CACHE_ENABLE */ + +#if (PREFETCH_ENABLE != 0U) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); + 8000940: 4b08 ldr r3, [pc, #32] ; (8000964 ) + 8000942: 681b ldr r3, [r3, #0] + 8000944: 4a07 ldr r2, [pc, #28] ; (8000964 ) + 8000946: f443 7380 orr.w r3, r3, #256 ; 0x100 + 800094a: 6013 str r3, [r2, #0] +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + 800094c: 2003 movs r0, #3 + 800094e: f000 f90d bl 8000b6c + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + 8000952: 2000 movs r0, #0 + 8000954: f000 f808 bl 8000968 + + /* Init the low level hardware */ + HAL_MspInit(); + 8000958: f7ff ff0e bl 8000778 + + /* Return function status */ + return HAL_OK; + 800095c: 2300 movs r3, #0 +} + 800095e: 4618 mov r0, r3 + 8000960: bd80 pop {r7, pc} + 8000962: bf00 nop + 8000964: 40023c00 .word 0x40023c00 + +08000968 : + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + 8000968: b580 push {r7, lr} + 800096a: b082 sub sp, #8 + 800096c: af00 add r7, sp, #0 + 800096e: 6078 str r0, [r7, #4] + /* Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + 8000970: 4b12 ldr r3, [pc, #72] ; (80009bc ) + 8000972: 681a ldr r2, [r3, #0] + 8000974: 4b12 ldr r3, [pc, #72] ; (80009c0 ) + 8000976: 781b ldrb r3, [r3, #0] + 8000978: 4619 mov r1, r3 + 800097a: f44f 737a mov.w r3, #1000 ; 0x3e8 + 800097e: fbb3 f3f1 udiv r3, r3, r1 + 8000982: fbb2 f3f3 udiv r3, r2, r3 + 8000986: 4618 mov r0, r3 + 8000988: f000 f917 bl 8000bba + 800098c: 4603 mov r3, r0 + 800098e: 2b00 cmp r3, #0 + 8000990: d001 beq.n 8000996 + { + return HAL_ERROR; + 8000992: 2301 movs r3, #1 + 8000994: e00e b.n 80009b4 + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + 8000996: 687b ldr r3, [r7, #4] + 8000998: 2b0f cmp r3, #15 + 800099a: d80a bhi.n 80009b2 + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + 800099c: 2200 movs r2, #0 + 800099e: 6879 ldr r1, [r7, #4] + 80009a0: f04f 30ff mov.w r0, #4294967295 + 80009a4: f000 f8ed bl 8000b82 + uwTickPrio = TickPriority; + 80009a8: 4a06 ldr r2, [pc, #24] ; (80009c4 ) + 80009aa: 687b ldr r3, [r7, #4] + 80009ac: 6013 str r3, [r2, #0] + { + return HAL_ERROR; + } + + /* Return function status */ + return HAL_OK; + 80009ae: 2300 movs r3, #0 + 80009b0: e000 b.n 80009b4 + return HAL_ERROR; + 80009b2: 2301 movs r3, #1 +} + 80009b4: 4618 mov r0, r3 + 80009b6: 3708 adds r7, #8 + 80009b8: 46bd mov sp, r7 + 80009ba: bd80 pop {r7, pc} + 80009bc: 20000000 .word 0x20000000 + 80009c0: 20000008 .word 0x20000008 + 80009c4: 20000004 .word 0x20000004 + +080009c8 : + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + 80009c8: b480 push {r7} + 80009ca: af00 add r7, sp, #0 + uwTick += uwTickFreq; + 80009cc: 4b06 ldr r3, [pc, #24] ; (80009e8 ) + 80009ce: 781b ldrb r3, [r3, #0] + 80009d0: 461a mov r2, r3 + 80009d2: 4b06 ldr r3, [pc, #24] ; (80009ec ) + 80009d4: 681b ldr r3, [r3, #0] + 80009d6: 4413 add r3, r2 + 80009d8: 4a04 ldr r2, [pc, #16] ; (80009ec ) + 80009da: 6013 str r3, [r2, #0] +} + 80009dc: bf00 nop + 80009de: 46bd mov sp, r7 + 80009e0: f85d 7b04 ldr.w r7, [sp], #4 + 80009e4: 4770 bx lr + 80009e6: bf00 nop + 80009e8: 20000008 .word 0x20000008 + 80009ec: 20000078 .word 0x20000078 + +080009f0 : + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + 80009f0: b480 push {r7} + 80009f2: af00 add r7, sp, #0 + return uwTick; + 80009f4: 4b03 ldr r3, [pc, #12] ; (8000a04 ) + 80009f6: 681b ldr r3, [r3, #0] +} + 80009f8: 4618 mov r0, r3 + 80009fa: 46bd mov sp, r7 + 80009fc: f85d 7b04 ldr.w r7, [sp], #4 + 8000a00: 4770 bx lr + 8000a02: bf00 nop + 8000a04: 20000078 .word 0x20000078 + +08000a08 <__NVIC_SetPriorityGrouping>: + 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) +{ + 8000a08: b480 push {r7} + 8000a0a: b085 sub sp, #20 + 8000a0c: af00 add r7, sp, #0 + 8000a0e: 6078 str r0, [r7, #4] + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + 8000a10: 687b ldr r3, [r7, #4] + 8000a12: f003 0307 and.w r3, r3, #7 + 8000a16: 60fb str r3, [r7, #12] + + reg_value = SCB->AIRCR; /* read old register configuration */ + 8000a18: 4b0c ldr r3, [pc, #48] ; (8000a4c <__NVIC_SetPriorityGrouping+0x44>) + 8000a1a: 68db ldr r3, [r3, #12] + 8000a1c: 60bb str r3, [r7, #8] + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + 8000a1e: 68ba ldr r2, [r7, #8] + 8000a20: f64f 03ff movw r3, #63743 ; 0xf8ff + 8000a24: 4013 ands r3, r2 + 8000a26: 60bb str r3, [r7, #8] + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + 8000a28: 68fb ldr r3, [r7, #12] + 8000a2a: 021a lsls r2, r3, #8 + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 8000a2c: 68bb ldr r3, [r7, #8] + 8000a2e: 4313 orrs r3, r2 + reg_value = (reg_value | + 8000a30: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 + 8000a34: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 8000a38: 60bb str r3, [r7, #8] + SCB->AIRCR = reg_value; + 8000a3a: 4a04 ldr r2, [pc, #16] ; (8000a4c <__NVIC_SetPriorityGrouping+0x44>) + 8000a3c: 68bb ldr r3, [r7, #8] + 8000a3e: 60d3 str r3, [r2, #12] +} + 8000a40: bf00 nop + 8000a42: 3714 adds r7, #20 + 8000a44: 46bd mov sp, r7 + 8000a46: f85d 7b04 ldr.w r7, [sp], #4 + 8000a4a: 4770 bx lr + 8000a4c: e000ed00 .word 0xe000ed00 + +08000a50 <__NVIC_GetPriorityGrouping>: + \brief Get Priority Grouping + \details 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) +{ + 8000a50: b480 push {r7} + 8000a52: af00 add r7, sp, #0 + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); + 8000a54: 4b04 ldr r3, [pc, #16] ; (8000a68 <__NVIC_GetPriorityGrouping+0x18>) + 8000a56: 68db ldr r3, [r3, #12] + 8000a58: 0a1b lsrs r3, r3, #8 + 8000a5a: f003 0307 and.w r3, r3, #7 +} + 8000a5e: 4618 mov r0, r3 + 8000a60: 46bd mov sp, r7 + 8000a62: f85d 7b04 ldr.w r7, [sp], #4 + 8000a66: 4770 bx lr + 8000a68: e000ed00 .word 0xe000ed00 + +08000a6c <__NVIC_SetPriority>: + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + 8000a6c: b480 push {r7} + 8000a6e: b083 sub sp, #12 + 8000a70: af00 add r7, sp, #0 + 8000a72: 4603 mov r3, r0 + 8000a74: 6039 str r1, [r7, #0] + 8000a76: 71fb strb r3, [r7, #7] + if ((int32_t)(IRQn) >= 0) + 8000a78: f997 3007 ldrsb.w r3, [r7, #7] + 8000a7c: 2b00 cmp r3, #0 + 8000a7e: db0a blt.n 8000a96 <__NVIC_SetPriority+0x2a> + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 8000a80: 683b ldr r3, [r7, #0] + 8000a82: b2da uxtb r2, r3 + 8000a84: 490c ldr r1, [pc, #48] ; (8000ab8 <__NVIC_SetPriority+0x4c>) + 8000a86: f997 3007 ldrsb.w r3, [r7, #7] + 8000a8a: 0112 lsls r2, r2, #4 + 8000a8c: b2d2 uxtb r2, r2 + 8000a8e: 440b add r3, r1 + 8000a90: f883 2300 strb.w r2, [r3, #768] ; 0x300 + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + 8000a94: e00a b.n 8000aac <__NVIC_SetPriority+0x40> + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 8000a96: 683b ldr r3, [r7, #0] + 8000a98: b2da uxtb r2, r3 + 8000a9a: 4908 ldr r1, [pc, #32] ; (8000abc <__NVIC_SetPriority+0x50>) + 8000a9c: 79fb ldrb r3, [r7, #7] + 8000a9e: f003 030f and.w r3, r3, #15 + 8000aa2: 3b04 subs r3, #4 + 8000aa4: 0112 lsls r2, r2, #4 + 8000aa6: b2d2 uxtb r2, r2 + 8000aa8: 440b add r3, r1 + 8000aaa: 761a strb r2, [r3, #24] +} + 8000aac: bf00 nop + 8000aae: 370c adds r7, #12 + 8000ab0: 46bd mov sp, r7 + 8000ab2: f85d 7b04 ldr.w r7, [sp], #4 + 8000ab6: 4770 bx lr + 8000ab8: e000e100 .word 0xe000e100 + 8000abc: e000ed00 .word 0xe000ed00 + +08000ac0 : + \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) +{ + 8000ac0: b480 push {r7} + 8000ac2: b089 sub sp, #36 ; 0x24 + 8000ac4: af00 add r7, sp, #0 + 8000ac6: 60f8 str r0, [r7, #12] + 8000ac8: 60b9 str r1, [r7, #8] + 8000aca: 607a str r2, [r7, #4] + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + 8000acc: 68fb ldr r3, [r7, #12] + 8000ace: f003 0307 and.w r3, r3, #7 + 8000ad2: 61fb str r3, [r7, #28] + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + 8000ad4: 69fb ldr r3, [r7, #28] + 8000ad6: f1c3 0307 rsb r3, r3, #7 + 8000ada: 2b04 cmp r3, #4 + 8000adc: bf28 it cs + 8000ade: 2304 movcs r3, #4 + 8000ae0: 61bb str r3, [r7, #24] + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + 8000ae2: 69fb ldr r3, [r7, #28] + 8000ae4: 3304 adds r3, #4 + 8000ae6: 2b06 cmp r3, #6 + 8000ae8: d902 bls.n 8000af0 + 8000aea: 69fb ldr r3, [r7, #28] + 8000aec: 3b03 subs r3, #3 + 8000aee: e000 b.n 8000af2 + 8000af0: 2300 movs r3, #0 + 8000af2: 617b str r3, [r7, #20] + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 8000af4: f04f 32ff mov.w r2, #4294967295 + 8000af8: 69bb ldr r3, [r7, #24] + 8000afa: fa02 f303 lsl.w r3, r2, r3 + 8000afe: 43da mvns r2, r3 + 8000b00: 68bb ldr r3, [r7, #8] + 8000b02: 401a ands r2, r3 + 8000b04: 697b ldr r3, [r7, #20] + 8000b06: 409a lsls r2, r3 + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + 8000b08: f04f 31ff mov.w r1, #4294967295 + 8000b0c: 697b ldr r3, [r7, #20] + 8000b0e: fa01 f303 lsl.w r3, r1, r3 + 8000b12: 43d9 mvns r1, r3 + 8000b14: 687b ldr r3, [r7, #4] + 8000b16: 400b ands r3, r1 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 8000b18: 4313 orrs r3, r2 + ); +} + 8000b1a: 4618 mov r0, r3 + 8000b1c: 3724 adds r7, #36 ; 0x24 + 8000b1e: 46bd mov sp, r7 + 8000b20: f85d 7b04 ldr.w r7, [sp], #4 + 8000b24: 4770 bx lr + ... + +08000b28 : + \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) +{ + 8000b28: b580 push {r7, lr} + 8000b2a: b082 sub sp, #8 + 8000b2c: af00 add r7, sp, #0 + 8000b2e: 6078 str r0, [r7, #4] + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + 8000b30: 687b ldr r3, [r7, #4] + 8000b32: 3b01 subs r3, #1 + 8000b34: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 + 8000b38: d301 bcc.n 8000b3e + { + return (1UL); /* Reload value impossible */ + 8000b3a: 2301 movs r3, #1 + 8000b3c: e00f b.n 8000b5e + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + 8000b3e: 4a0a ldr r2, [pc, #40] ; (8000b68 ) + 8000b40: 687b ldr r3, [r7, #4] + 8000b42: 3b01 subs r3, #1 + 8000b44: 6053 str r3, [r2, #4] + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + 8000b46: 210f movs r1, #15 + 8000b48: f04f 30ff mov.w r0, #4294967295 + 8000b4c: f7ff ff8e bl 8000a6c <__NVIC_SetPriority> + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + 8000b50: 4b05 ldr r3, [pc, #20] ; (8000b68 ) + 8000b52: 2200 movs r2, #0 + 8000b54: 609a str r2, [r3, #8] + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + 8000b56: 4b04 ldr r3, [pc, #16] ; (8000b68 ) + 8000b58: 2207 movs r2, #7 + 8000b5a: 601a str r2, [r3, #0] + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ + 8000b5c: 2300 movs r3, #0 +} + 8000b5e: 4618 mov r0, r3 + 8000b60: 3708 adds r7, #8 + 8000b62: 46bd mov sp, r7 + 8000b64: bd80 pop {r7, pc} + 8000b66: bf00 nop + 8000b68: e000e010 .word 0xe000e010 + +08000b6c : + * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + 8000b6c: b580 push {r7, lr} + 8000b6e: b082 sub sp, #8 + 8000b70: af00 add r7, sp, #0 + 8000b72: 6078 str r0, [r7, #4] + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); + 8000b74: 6878 ldr r0, [r7, #4] + 8000b76: f7ff ff47 bl 8000a08 <__NVIC_SetPriorityGrouping> +} + 8000b7a: bf00 nop + 8000b7c: 3708 adds r7, #8 + 8000b7e: 46bd mov sp, r7 + 8000b80: bd80 pop {r7, pc} + +08000b82 : + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + 8000b82: b580 push {r7, lr} + 8000b84: b086 sub sp, #24 + 8000b86: af00 add r7, sp, #0 + 8000b88: 4603 mov r3, r0 + 8000b8a: 60b9 str r1, [r7, #8] + 8000b8c: 607a str r2, [r7, #4] + 8000b8e: 73fb strb r3, [r7, #15] + uint32_t prioritygroup = 0x00U; + 8000b90: 2300 movs r3, #0 + 8000b92: 617b str r3, [r7, #20] + + /* Check the parameters */ + assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + 8000b94: f7ff ff5c bl 8000a50 <__NVIC_GetPriorityGrouping> + 8000b98: 6178 str r0, [r7, #20] + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); + 8000b9a: 687a ldr r2, [r7, #4] + 8000b9c: 68b9 ldr r1, [r7, #8] + 8000b9e: 6978 ldr r0, [r7, #20] + 8000ba0: f7ff ff8e bl 8000ac0 + 8000ba4: 4602 mov r2, r0 + 8000ba6: f997 300f ldrsb.w r3, [r7, #15] + 8000baa: 4611 mov r1, r2 + 8000bac: 4618 mov r0, r3 + 8000bae: f7ff ff5d bl 8000a6c <__NVIC_SetPriority> +} + 8000bb2: bf00 nop + 8000bb4: 3718 adds r7, #24 + 8000bb6: 46bd mov sp, r7 + 8000bb8: bd80 pop {r7, pc} + +08000bba : + * @param TicksNumb Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) +{ + 8000bba: b580 push {r7, lr} + 8000bbc: b082 sub sp, #8 + 8000bbe: af00 add r7, sp, #0 + 8000bc0: 6078 str r0, [r7, #4] + return SysTick_Config(TicksNumb); + 8000bc2: 6878 ldr r0, [r7, #4] + 8000bc4: f7ff ffb0 bl 8000b28 + 8000bc8: 4603 mov r3, r0 +} + 8000bca: 4618 mov r0, r3 + 8000bcc: 3708 adds r7, #8 + 8000bce: 46bd mov sp, r7 + 8000bd0: bd80 pop {r7, pc} + ... + +08000bd4 : + * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + 8000bd4: b480 push {r7} + 8000bd6: b089 sub sp, #36 ; 0x24 + 8000bd8: af00 add r7, sp, #0 + 8000bda: 6078 str r0, [r7, #4] + 8000bdc: 6039 str r1, [r7, #0] + uint32_t position; + uint32_t ioposition = 0x00U; + 8000bde: 2300 movs r3, #0 + 8000be0: 617b str r3, [r7, #20] + uint32_t iocurrent = 0x00U; + 8000be2: 2300 movs r3, #0 + 8000be4: 613b str r3, [r7, #16] + uint32_t temp = 0x00U; + 8000be6: 2300 movs r3, #0 + 8000be8: 61bb str r3, [r7, #24] + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + for(position = 0U; position < GPIO_NUMBER; position++) + 8000bea: 2300 movs r3, #0 + 8000bec: 61fb str r3, [r7, #28] + 8000bee: e159 b.n 8000ea4 + { + /* Get the IO position */ + ioposition = 0x01U << position; + 8000bf0: 2201 movs r2, #1 + 8000bf2: 69fb ldr r3, [r7, #28] + 8000bf4: fa02 f303 lsl.w r3, r2, r3 + 8000bf8: 617b str r3, [r7, #20] + /* Get the current IO position */ + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + 8000bfa: 683b ldr r3, [r7, #0] + 8000bfc: 681b ldr r3, [r3, #0] + 8000bfe: 697a ldr r2, [r7, #20] + 8000c00: 4013 ands r3, r2 + 8000c02: 613b str r3, [r7, #16] + + if(iocurrent == ioposition) + 8000c04: 693a ldr r2, [r7, #16] + 8000c06: 697b ldr r3, [r7, #20] + 8000c08: 429a cmp r2, r3 + 8000c0a: f040 8148 bne.w 8000e9e + { + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Output or Alternate function mode selection */ + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ + 8000c0e: 683b ldr r3, [r7, #0] + 8000c10: 685b ldr r3, [r3, #4] + 8000c12: f003 0303 and.w r3, r3, #3 + 8000c16: 2b01 cmp r3, #1 + 8000c18: d005 beq.n 8000c26 + (GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + 8000c1a: 683b ldr r3, [r7, #0] + 8000c1c: 685b ldr r3, [r3, #4] + 8000c1e: f003 0303 and.w r3, r3, #3 + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ + 8000c22: 2b02 cmp r3, #2 + 8000c24: d130 bne.n 8000c88 + { + /* Check the Speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + /* Configure the IO Speed */ + temp = GPIOx->OSPEEDR; + 8000c26: 687b ldr r3, [r7, #4] + 8000c28: 689b ldr r3, [r3, #8] + 8000c2a: 61bb str r3, [r7, #24] + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); + 8000c2c: 69fb ldr r3, [r7, #28] + 8000c2e: 005b lsls r3, r3, #1 + 8000c30: 2203 movs r2, #3 + 8000c32: fa02 f303 lsl.w r3, r2, r3 + 8000c36: 43db mvns r3, r3 + 8000c38: 69ba ldr r2, [r7, #24] + 8000c3a: 4013 ands r3, r2 + 8000c3c: 61bb str r3, [r7, #24] + temp |= (GPIO_Init->Speed << (position * 2U)); + 8000c3e: 683b ldr r3, [r7, #0] + 8000c40: 68da ldr r2, [r3, #12] + 8000c42: 69fb ldr r3, [r7, #28] + 8000c44: 005b lsls r3, r3, #1 + 8000c46: fa02 f303 lsl.w r3, r2, r3 + 8000c4a: 69ba ldr r2, [r7, #24] + 8000c4c: 4313 orrs r3, r2 + 8000c4e: 61bb str r3, [r7, #24] + GPIOx->OSPEEDR = temp; + 8000c50: 687b ldr r3, [r7, #4] + 8000c52: 69ba ldr r2, [r7, #24] + 8000c54: 609a str r2, [r3, #8] + + /* Configure the IO Output Type */ + temp = GPIOx->OTYPER; + 8000c56: 687b ldr r3, [r7, #4] + 8000c58: 685b ldr r3, [r3, #4] + 8000c5a: 61bb str r3, [r7, #24] + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + 8000c5c: 2201 movs r2, #1 + 8000c5e: 69fb ldr r3, [r7, #28] + 8000c60: fa02 f303 lsl.w r3, r2, r3 + 8000c64: 43db mvns r3, r3 + 8000c66: 69ba ldr r2, [r7, #24] + 8000c68: 4013 ands r3, r2 + 8000c6a: 61bb str r3, [r7, #24] + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + 8000c6c: 683b ldr r3, [r7, #0] + 8000c6e: 685b ldr r3, [r3, #4] + 8000c70: 091b lsrs r3, r3, #4 + 8000c72: f003 0201 and.w r2, r3, #1 + 8000c76: 69fb ldr r3, [r7, #28] + 8000c78: fa02 f303 lsl.w r3, r2, r3 + 8000c7c: 69ba ldr r2, [r7, #24] + 8000c7e: 4313 orrs r3, r2 + 8000c80: 61bb str r3, [r7, #24] + GPIOx->OTYPER = temp; + 8000c82: 687b ldr r3, [r7, #4] + 8000c84: 69ba ldr r2, [r7, #24] + 8000c86: 605a str r2, [r3, #4] + } + + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + 8000c88: 683b ldr r3, [r7, #0] + 8000c8a: 685b ldr r3, [r3, #4] + 8000c8c: f003 0303 and.w r3, r3, #3 + 8000c90: 2b03 cmp r3, #3 + 8000c92: d017 beq.n 8000cc4 + { + /* Check the parameters */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + + /* Activate the Pull-up or Pull down resistor for the current IO */ + temp = GPIOx->PUPDR; + 8000c94: 687b ldr r3, [r7, #4] + 8000c96: 68db ldr r3, [r3, #12] + 8000c98: 61bb str r3, [r7, #24] + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); + 8000c9a: 69fb ldr r3, [r7, #28] + 8000c9c: 005b lsls r3, r3, #1 + 8000c9e: 2203 movs r2, #3 + 8000ca0: fa02 f303 lsl.w r3, r2, r3 + 8000ca4: 43db mvns r3, r3 + 8000ca6: 69ba ldr r2, [r7, #24] + 8000ca8: 4013 ands r3, r2 + 8000caa: 61bb str r3, [r7, #24] + temp |= ((GPIO_Init->Pull) << (position * 2U)); + 8000cac: 683b ldr r3, [r7, #0] + 8000cae: 689a ldr r2, [r3, #8] + 8000cb0: 69fb ldr r3, [r7, #28] + 8000cb2: 005b lsls r3, r3, #1 + 8000cb4: fa02 f303 lsl.w r3, r2, r3 + 8000cb8: 69ba ldr r2, [r7, #24] + 8000cba: 4313 orrs r3, r2 + 8000cbc: 61bb str r3, [r7, #24] + GPIOx->PUPDR = temp; + 8000cbe: 687b ldr r3, [r7, #4] + 8000cc0: 69ba ldr r2, [r7, #24] + 8000cc2: 60da str r2, [r3, #12] + } + + /* In case of Alternate function mode selection */ + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + 8000cc4: 683b ldr r3, [r7, #0] + 8000cc6: 685b ldr r3, [r3, #4] + 8000cc8: f003 0303 and.w r3, r3, #3 + 8000ccc: 2b02 cmp r3, #2 + 8000cce: d123 bne.n 8000d18 + { + /* Check the Alternate function parameter */ + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3U]; + 8000cd0: 69fb ldr r3, [r7, #28] + 8000cd2: 08da lsrs r2, r3, #3 + 8000cd4: 687b ldr r3, [r7, #4] + 8000cd6: 3208 adds r2, #8 + 8000cd8: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8000cdc: 61bb str r3, [r7, #24] + temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; + 8000cde: 69fb ldr r3, [r7, #28] + 8000ce0: f003 0307 and.w r3, r3, #7 + 8000ce4: 009b lsls r3, r3, #2 + 8000ce6: 220f movs r2, #15 + 8000ce8: fa02 f303 lsl.w r3, r2, r3 + 8000cec: 43db mvns r3, r3 + 8000cee: 69ba ldr r2, [r7, #24] + 8000cf0: 4013 ands r3, r2 + 8000cf2: 61bb str r3, [r7, #24] + temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U)); + 8000cf4: 683b ldr r3, [r7, #0] + 8000cf6: 691a ldr r2, [r3, #16] + 8000cf8: 69fb ldr r3, [r7, #28] + 8000cfa: f003 0307 and.w r3, r3, #7 + 8000cfe: 009b lsls r3, r3, #2 + 8000d00: fa02 f303 lsl.w r3, r2, r3 + 8000d04: 69ba ldr r2, [r7, #24] + 8000d06: 4313 orrs r3, r2 + 8000d08: 61bb str r3, [r7, #24] + GPIOx->AFR[position >> 3U] = temp; + 8000d0a: 69fb ldr r3, [r7, #28] + 8000d0c: 08da lsrs r2, r3, #3 + 8000d0e: 687b ldr r3, [r7, #4] + 8000d10: 3208 adds r2, #8 + 8000d12: 69b9 ldr r1, [r7, #24] + 8000d14: f843 1022 str.w r1, [r3, r2, lsl #2] + } + + /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ + temp = GPIOx->MODER; + 8000d18: 687b ldr r3, [r7, #4] + 8000d1a: 681b ldr r3, [r3, #0] + 8000d1c: 61bb str r3, [r7, #24] + temp &= ~(GPIO_MODER_MODER0 << (position * 2U)); + 8000d1e: 69fb ldr r3, [r7, #28] + 8000d20: 005b lsls r3, r3, #1 + 8000d22: 2203 movs r2, #3 + 8000d24: fa02 f303 lsl.w r3, r2, r3 + 8000d28: 43db mvns r3, r3 + 8000d2a: 69ba ldr r2, [r7, #24] + 8000d2c: 4013 ands r3, r2 + 8000d2e: 61bb str r3, [r7, #24] + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U)); + 8000d30: 683b ldr r3, [r7, #0] + 8000d32: 685b ldr r3, [r3, #4] + 8000d34: f003 0203 and.w r2, r3, #3 + 8000d38: 69fb ldr r3, [r7, #28] + 8000d3a: 005b lsls r3, r3, #1 + 8000d3c: fa02 f303 lsl.w r3, r2, r3 + 8000d40: 69ba ldr r2, [r7, #24] + 8000d42: 4313 orrs r3, r2 + 8000d44: 61bb str r3, [r7, #24] + GPIOx->MODER = temp; + 8000d46: 687b ldr r3, [r7, #4] + 8000d48: 69ba ldr r2, [r7, #24] + 8000d4a: 601a str r2, [r3, #0] + + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) != 0x00U) + 8000d4c: 683b ldr r3, [r7, #0] + 8000d4e: 685b ldr r3, [r3, #4] + 8000d50: f403 3340 and.w r3, r3, #196608 ; 0x30000 + 8000d54: 2b00 cmp r3, #0 + 8000d56: f000 80a2 beq.w 8000e9e + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + 8000d5a: 2300 movs r3, #0 + 8000d5c: 60fb str r3, [r7, #12] + 8000d5e: 4b57 ldr r3, [pc, #348] ; (8000ebc ) + 8000d60: 6c5b ldr r3, [r3, #68] ; 0x44 + 8000d62: 4a56 ldr r2, [pc, #344] ; (8000ebc ) + 8000d64: f443 4380 orr.w r3, r3, #16384 ; 0x4000 + 8000d68: 6453 str r3, [r2, #68] ; 0x44 + 8000d6a: 4b54 ldr r3, [pc, #336] ; (8000ebc ) + 8000d6c: 6c5b ldr r3, [r3, #68] ; 0x44 + 8000d6e: f403 4380 and.w r3, r3, #16384 ; 0x4000 + 8000d72: 60fb str r3, [r7, #12] + 8000d74: 68fb ldr r3, [r7, #12] + + temp = SYSCFG->EXTICR[position >> 2U]; + 8000d76: 4a52 ldr r2, [pc, #328] ; (8000ec0 ) + 8000d78: 69fb ldr r3, [r7, #28] + 8000d7a: 089b lsrs r3, r3, #2 + 8000d7c: 3302 adds r3, #2 + 8000d7e: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8000d82: 61bb str r3, [r7, #24] + temp &= ~(0x0FU << (4U * (position & 0x03U))); + 8000d84: 69fb ldr r3, [r7, #28] + 8000d86: f003 0303 and.w r3, r3, #3 + 8000d8a: 009b lsls r3, r3, #2 + 8000d8c: 220f movs r2, #15 + 8000d8e: fa02 f303 lsl.w r3, r2, r3 + 8000d92: 43db mvns r3, r3 + 8000d94: 69ba ldr r2, [r7, #24] + 8000d96: 4013 ands r3, r2 + 8000d98: 61bb str r3, [r7, #24] + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); + 8000d9a: 687b ldr r3, [r7, #4] + 8000d9c: 4a49 ldr r2, [pc, #292] ; (8000ec4 ) + 8000d9e: 4293 cmp r3, r2 + 8000da0: d019 beq.n 8000dd6 + 8000da2: 687b ldr r3, [r7, #4] + 8000da4: 4a48 ldr r2, [pc, #288] ; (8000ec8 ) + 8000da6: 4293 cmp r3, r2 + 8000da8: d013 beq.n 8000dd2 + 8000daa: 687b ldr r3, [r7, #4] + 8000dac: 4a47 ldr r2, [pc, #284] ; (8000ecc ) + 8000dae: 4293 cmp r3, r2 + 8000db0: d00d beq.n 8000dce + 8000db2: 687b ldr r3, [r7, #4] + 8000db4: 4a46 ldr r2, [pc, #280] ; (8000ed0 ) + 8000db6: 4293 cmp r3, r2 + 8000db8: d007 beq.n 8000dca + 8000dba: 687b ldr r3, [r7, #4] + 8000dbc: 4a45 ldr r2, [pc, #276] ; (8000ed4 ) + 8000dbe: 4293 cmp r3, r2 + 8000dc0: d101 bne.n 8000dc6 + 8000dc2: 2304 movs r3, #4 + 8000dc4: e008 b.n 8000dd8 + 8000dc6: 2307 movs r3, #7 + 8000dc8: e006 b.n 8000dd8 + 8000dca: 2303 movs r3, #3 + 8000dcc: e004 b.n 8000dd8 + 8000dce: 2302 movs r3, #2 + 8000dd0: e002 b.n 8000dd8 + 8000dd2: 2301 movs r3, #1 + 8000dd4: e000 b.n 8000dd8 + 8000dd6: 2300 movs r3, #0 + 8000dd8: 69fa ldr r2, [r7, #28] + 8000dda: f002 0203 and.w r2, r2, #3 + 8000dde: 0092 lsls r2, r2, #2 + 8000de0: 4093 lsls r3, r2 + 8000de2: 69ba ldr r2, [r7, #24] + 8000de4: 4313 orrs r3, r2 + 8000de6: 61bb str r3, [r7, #24] + SYSCFG->EXTICR[position >> 2U] = temp; + 8000de8: 4935 ldr r1, [pc, #212] ; (8000ec0 ) + 8000dea: 69fb ldr r3, [r7, #28] + 8000dec: 089b lsrs r3, r3, #2 + 8000dee: 3302 adds r3, #2 + 8000df0: 69ba ldr r2, [r7, #24] + 8000df2: f841 2023 str.w r2, [r1, r3, lsl #2] + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + 8000df6: 4b38 ldr r3, [pc, #224] ; (8000ed8 ) + 8000df8: 689b ldr r3, [r3, #8] + 8000dfa: 61bb str r3, [r7, #24] + temp &= ~((uint32_t)iocurrent); + 8000dfc: 693b ldr r3, [r7, #16] + 8000dfe: 43db mvns r3, r3 + 8000e00: 69ba ldr r2, [r7, #24] + 8000e02: 4013 ands r3, r2 + 8000e04: 61bb str r3, [r7, #24] + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U) + 8000e06: 683b ldr r3, [r7, #0] + 8000e08: 685b ldr r3, [r3, #4] + 8000e0a: f403 1380 and.w r3, r3, #1048576 ; 0x100000 + 8000e0e: 2b00 cmp r3, #0 + 8000e10: d003 beq.n 8000e1a + { + temp |= iocurrent; + 8000e12: 69ba ldr r2, [r7, #24] + 8000e14: 693b ldr r3, [r7, #16] + 8000e16: 4313 orrs r3, r2 + 8000e18: 61bb str r3, [r7, #24] + } + EXTI->RTSR = temp; + 8000e1a: 4a2f ldr r2, [pc, #188] ; (8000ed8 ) + 8000e1c: 69bb ldr r3, [r7, #24] + 8000e1e: 6093 str r3, [r2, #8] + + temp = EXTI->FTSR; + 8000e20: 4b2d ldr r3, [pc, #180] ; (8000ed8 ) + 8000e22: 68db ldr r3, [r3, #12] + 8000e24: 61bb str r3, [r7, #24] + temp &= ~((uint32_t)iocurrent); + 8000e26: 693b ldr r3, [r7, #16] + 8000e28: 43db mvns r3, r3 + 8000e2a: 69ba ldr r2, [r7, #24] + 8000e2c: 4013 ands r3, r2 + 8000e2e: 61bb str r3, [r7, #24] + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U) + 8000e30: 683b ldr r3, [r7, #0] + 8000e32: 685b ldr r3, [r3, #4] + 8000e34: f403 1300 and.w r3, r3, #2097152 ; 0x200000 + 8000e38: 2b00 cmp r3, #0 + 8000e3a: d003 beq.n 8000e44 + { + temp |= iocurrent; + 8000e3c: 69ba ldr r2, [r7, #24] + 8000e3e: 693b ldr r3, [r7, #16] + 8000e40: 4313 orrs r3, r2 + 8000e42: 61bb str r3, [r7, #24] + } + EXTI->FTSR = temp; + 8000e44: 4a24 ldr r2, [pc, #144] ; (8000ed8 ) + 8000e46: 69bb ldr r3, [r7, #24] + 8000e48: 60d3 str r3, [r2, #12] + + temp = EXTI->EMR; + 8000e4a: 4b23 ldr r3, [pc, #140] ; (8000ed8 ) + 8000e4c: 685b ldr r3, [r3, #4] + 8000e4e: 61bb str r3, [r7, #24] + temp &= ~((uint32_t)iocurrent); + 8000e50: 693b ldr r3, [r7, #16] + 8000e52: 43db mvns r3, r3 + 8000e54: 69ba ldr r2, [r7, #24] + 8000e56: 4013 ands r3, r2 + 8000e58: 61bb str r3, [r7, #24] + if((GPIO_Init->Mode & EXTI_EVT) != 0x00U) + 8000e5a: 683b ldr r3, [r7, #0] + 8000e5c: 685b ldr r3, [r3, #4] + 8000e5e: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000e62: 2b00 cmp r3, #0 + 8000e64: d003 beq.n 8000e6e + { + temp |= iocurrent; + 8000e66: 69ba ldr r2, [r7, #24] + 8000e68: 693b ldr r3, [r7, #16] + 8000e6a: 4313 orrs r3, r2 + 8000e6c: 61bb str r3, [r7, #24] + } + EXTI->EMR = temp; + 8000e6e: 4a1a ldr r2, [pc, #104] ; (8000ed8 ) + 8000e70: 69bb ldr r3, [r7, #24] + 8000e72: 6053 str r3, [r2, #4] + + /* Clear EXTI line configuration */ + temp = EXTI->IMR; + 8000e74: 4b18 ldr r3, [pc, #96] ; (8000ed8 ) + 8000e76: 681b ldr r3, [r3, #0] + 8000e78: 61bb str r3, [r7, #24] + temp &= ~((uint32_t)iocurrent); + 8000e7a: 693b ldr r3, [r7, #16] + 8000e7c: 43db mvns r3, r3 + 8000e7e: 69ba ldr r2, [r7, #24] + 8000e80: 4013 ands r3, r2 + 8000e82: 61bb str r3, [r7, #24] + if((GPIO_Init->Mode & EXTI_IT) != 0x00U) + 8000e84: 683b ldr r3, [r7, #0] + 8000e86: 685b ldr r3, [r3, #4] + 8000e88: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000e8c: 2b00 cmp r3, #0 + 8000e8e: d003 beq.n 8000e98 + { + temp |= iocurrent; + 8000e90: 69ba ldr r2, [r7, #24] + 8000e92: 693b ldr r3, [r7, #16] + 8000e94: 4313 orrs r3, r2 + 8000e96: 61bb str r3, [r7, #24] + } + EXTI->IMR = temp; + 8000e98: 4a0f ldr r2, [pc, #60] ; (8000ed8 ) + 8000e9a: 69bb ldr r3, [r7, #24] + 8000e9c: 6013 str r3, [r2, #0] + for(position = 0U; position < GPIO_NUMBER; position++) + 8000e9e: 69fb ldr r3, [r7, #28] + 8000ea0: 3301 adds r3, #1 + 8000ea2: 61fb str r3, [r7, #28] + 8000ea4: 69fb ldr r3, [r7, #28] + 8000ea6: 2b0f cmp r3, #15 + 8000ea8: f67f aea2 bls.w 8000bf0 + } + } + } +} + 8000eac: bf00 nop + 8000eae: bf00 nop + 8000eb0: 3724 adds r7, #36 ; 0x24 + 8000eb2: 46bd mov sp, r7 + 8000eb4: f85d 7b04 ldr.w r7, [sp], #4 + 8000eb8: 4770 bx lr + 8000eba: bf00 nop + 8000ebc: 40023800 .word 0x40023800 + 8000ec0: 40013800 .word 0x40013800 + 8000ec4: 40020000 .word 0x40020000 + 8000ec8: 40020400 .word 0x40020400 + 8000ecc: 40020800 .word 0x40020800 + 8000ed0: 40020c00 .word 0x40020c00 + 8000ed4: 40021000 .word 0x40021000 + 8000ed8: 40013c00 .word 0x40013c00 + +08000edc : + * @arg GPIO_PIN_RESET: to clear the port pin + * @arg GPIO_PIN_SET: to set the port pin + * @retval None + */ +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) +{ + 8000edc: b480 push {r7} + 8000ede: b083 sub sp, #12 + 8000ee0: af00 add r7, sp, #0 + 8000ee2: 6078 str r0, [r7, #4] + 8000ee4: 460b mov r3, r1 + 8000ee6: 807b strh r3, [r7, #2] + 8000ee8: 4613 mov r3, r2 + 8000eea: 707b strb r3, [r7, #1] + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + 8000eec: 787b ldrb r3, [r7, #1] + 8000eee: 2b00 cmp r3, #0 + 8000ef0: d003 beq.n 8000efa + { + GPIOx->BSRR = GPIO_Pin; + 8000ef2: 887a ldrh r2, [r7, #2] + 8000ef4: 687b ldr r3, [r7, #4] + 8000ef6: 619a str r2, [r3, #24] + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; + } +} + 8000ef8: e003 b.n 8000f02 + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; + 8000efa: 887b ldrh r3, [r7, #2] + 8000efc: 041a lsls r2, r3, #16 + 8000efe: 687b ldr r3, [r7, #4] + 8000f00: 619a str r2, [r3, #24] +} + 8000f02: bf00 nop + 8000f04: 370c adds r7, #12 + 8000f06: 46bd mov sp, r7 + 8000f08: f85d 7b04 ldr.w r7, [sp], #4 + 8000f0c: 4770 bx lr + ... + +08000f10 : + * supported by this API. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + 8000f10: b580 push {r7, lr} + 8000f12: b086 sub sp, #24 + 8000f14: af00 add r7, sp, #0 + 8000f16: 6078 str r0, [r7, #4] + uint32_t tickstart, pll_config; + + /* Check Null pointer */ + if(RCC_OscInitStruct == NULL) + 8000f18: 687b ldr r3, [r7, #4] + 8000f1a: 2b00 cmp r3, #0 + 8000f1c: d101 bne.n 8000f22 + { + return HAL_ERROR; + 8000f1e: 2301 movs r3, #1 + 8000f20: e267 b.n 80013f2 + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + 8000f22: 687b ldr r3, [r7, #4] + 8000f24: 681b ldr r3, [r3, #0] + 8000f26: f003 0301 and.w r3, r3, #1 + 8000f2a: 2b00 cmp r3, #0 + 8000f2c: d075 beq.n 800101a + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ + 8000f2e: 4b88 ldr r3, [pc, #544] ; (8001150 ) + 8000f30: 689b ldr r3, [r3, #8] + 8000f32: f003 030c and.w r3, r3, #12 + 8000f36: 2b04 cmp r3, #4 + 8000f38: d00c beq.n 8000f54 + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) + 8000f3a: 4b85 ldr r3, [pc, #532] ; (8001150 ) + 8000f3c: 689b ldr r3, [r3, #8] + 8000f3e: f003 030c and.w r3, r3, #12 + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ + 8000f42: 2b08 cmp r3, #8 + 8000f44: d112 bne.n 8000f6c + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) + 8000f46: 4b82 ldr r3, [pc, #520] ; (8001150 ) + 8000f48: 685b ldr r3, [r3, #4] + 8000f4a: f403 0380 and.w r3, r3, #4194304 ; 0x400000 + 8000f4e: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000 + 8000f52: d10b bne.n 8000f6c + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 8000f54: 4b7e ldr r3, [pc, #504] ; (8001150 ) + 8000f56: 681b ldr r3, [r3, #0] + 8000f58: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000f5c: 2b00 cmp r3, #0 + 8000f5e: d05b beq.n 8001018 + 8000f60: 687b ldr r3, [r7, #4] + 8000f62: 685b ldr r3, [r3, #4] + 8000f64: 2b00 cmp r3, #0 + 8000f66: d157 bne.n 8001018 + { + return HAL_ERROR; + 8000f68: 2301 movs r3, #1 + 8000f6a: e242 b.n 80013f2 + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 8000f6c: 687b ldr r3, [r7, #4] + 8000f6e: 685b ldr r3, [r3, #4] + 8000f70: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8000f74: d106 bne.n 8000f84 + 8000f76: 4b76 ldr r3, [pc, #472] ; (8001150 ) + 8000f78: 681b ldr r3, [r3, #0] + 8000f7a: 4a75 ldr r2, [pc, #468] ; (8001150 ) + 8000f7c: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000f80: 6013 str r3, [r2, #0] + 8000f82: e01d b.n 8000fc0 + 8000f84: 687b ldr r3, [r7, #4] + 8000f86: 685b ldr r3, [r3, #4] + 8000f88: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 + 8000f8c: d10c bne.n 8000fa8 + 8000f8e: 4b70 ldr r3, [pc, #448] ; (8001150 ) + 8000f90: 681b ldr r3, [r3, #0] + 8000f92: 4a6f ldr r2, [pc, #444] ; (8001150 ) + 8000f94: f443 2380 orr.w r3, r3, #262144 ; 0x40000 + 8000f98: 6013 str r3, [r2, #0] + 8000f9a: 4b6d ldr r3, [pc, #436] ; (8001150 ) + 8000f9c: 681b ldr r3, [r3, #0] + 8000f9e: 4a6c ldr r2, [pc, #432] ; (8001150 ) + 8000fa0: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000fa4: 6013 str r3, [r2, #0] + 8000fa6: e00b b.n 8000fc0 + 8000fa8: 4b69 ldr r3, [pc, #420] ; (8001150 ) + 8000faa: 681b ldr r3, [r3, #0] + 8000fac: 4a68 ldr r2, [pc, #416] ; (8001150 ) + 8000fae: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8000fb2: 6013 str r3, [r2, #0] + 8000fb4: 4b66 ldr r3, [pc, #408] ; (8001150 ) + 8000fb6: 681b ldr r3, [r3, #0] + 8000fb8: 4a65 ldr r2, [pc, #404] ; (8001150 ) + 8000fba: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8000fbe: 6013 str r3, [r2, #0] + + /* Check the HSE State */ + if((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) + 8000fc0: 687b ldr r3, [r7, #4] + 8000fc2: 685b ldr r3, [r3, #4] + 8000fc4: 2b00 cmp r3, #0 + 8000fc6: d013 beq.n 8000ff0 + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000fc8: f7ff fd12 bl 80009f0 + 8000fcc: 6138 str r0, [r7, #16] + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8000fce: e008 b.n 8000fe2 + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + 8000fd0: f7ff fd0e bl 80009f0 + 8000fd4: 4602 mov r2, r0 + 8000fd6: 693b ldr r3, [r7, #16] + 8000fd8: 1ad3 subs r3, r2, r3 + 8000fda: 2b64 cmp r3, #100 ; 0x64 + 8000fdc: d901 bls.n 8000fe2 + { + return HAL_TIMEOUT; + 8000fde: 2303 movs r3, #3 + 8000fe0: e207 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 8000fe2: 4b5b ldr r3, [pc, #364] ; (8001150 ) + 8000fe4: 681b ldr r3, [r3, #0] + 8000fe6: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000fea: 2b00 cmp r3, #0 + 8000fec: d0f0 beq.n 8000fd0 + 8000fee: e014 b.n 800101a + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8000ff0: f7ff fcfe bl 80009f0 + 8000ff4: 6138 str r0, [r7, #16] + + /* Wait till HSE is bypassed or disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 8000ff6: e008 b.n 800100a + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + 8000ff8: f7ff fcfa bl 80009f0 + 8000ffc: 4602 mov r2, r0 + 8000ffe: 693b ldr r3, [r7, #16] + 8001000: 1ad3 subs r3, r2, r3 + 8001002: 2b64 cmp r3, #100 ; 0x64 + 8001004: d901 bls.n 800100a + { + return HAL_TIMEOUT; + 8001006: 2303 movs r3, #3 + 8001008: e1f3 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 800100a: 4b51 ldr r3, [pc, #324] ; (8001150 ) + 800100c: 681b ldr r3, [r3, #0] + 800100e: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8001012: 2b00 cmp r3, #0 + 8001014: d1f0 bne.n 8000ff8 + 8001016: e000 b.n 800101a + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 8001018: bf00 nop + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + 800101a: 687b ldr r3, [r7, #4] + 800101c: 681b ldr r3, [r3, #0] + 800101e: f003 0302 and.w r3, r3, #2 + 8001022: 2b00 cmp r3, #0 + 8001024: d063 beq.n 80010ee + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ + 8001026: 4b4a ldr r3, [pc, #296] ; (8001150 ) + 8001028: 689b ldr r3, [r3, #8] + 800102a: f003 030c and.w r3, r3, #12 + 800102e: 2b00 cmp r3, #0 + 8001030: d00b beq.n 800104a + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) + 8001032: 4b47 ldr r3, [pc, #284] ; (8001150 ) + 8001034: 689b ldr r3, [r3, #8] + 8001036: f003 030c and.w r3, r3, #12 + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ + 800103a: 2b08 cmp r3, #8 + 800103c: d11c bne.n 8001078 + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) + 800103e: 4b44 ldr r3, [pc, #272] ; (8001150 ) + 8001040: 685b ldr r3, [r3, #4] + 8001042: f403 0380 and.w r3, r3, #4194304 ; 0x400000 + 8001046: 2b00 cmp r3, #0 + 8001048: d116 bne.n 8001078 + { + /* When HSI is used as system clock it will not disabled */ + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 800104a: 4b41 ldr r3, [pc, #260] ; (8001150 ) + 800104c: 681b ldr r3, [r3, #0] + 800104e: f003 0302 and.w r3, r3, #2 + 8001052: 2b00 cmp r3, #0 + 8001054: d005 beq.n 8001062 + 8001056: 687b ldr r3, [r7, #4] + 8001058: 68db ldr r3, [r3, #12] + 800105a: 2b01 cmp r3, #1 + 800105c: d001 beq.n 8001062 + { + return HAL_ERROR; + 800105e: 2301 movs r3, #1 + 8001060: e1c7 b.n 80013f2 + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 8001062: 4b3b ldr r3, [pc, #236] ; (8001150 ) + 8001064: 681b ldr r3, [r3, #0] + 8001066: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 800106a: 687b ldr r3, [r7, #4] + 800106c: 691b ldr r3, [r3, #16] + 800106e: 00db lsls r3, r3, #3 + 8001070: 4937 ldr r1, [pc, #220] ; (8001150 ) + 8001072: 4313 orrs r3, r2 + 8001074: 600b str r3, [r1, #0] + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 8001076: e03a b.n 80010ee + } + } + else + { + /* Check the HSI State */ + if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF) + 8001078: 687b ldr r3, [r7, #4] + 800107a: 68db ldr r3, [r3, #12] + 800107c: 2b00 cmp r3, #0 + 800107e: d020 beq.n 80010c2 + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + 8001080: 4b34 ldr r3, [pc, #208] ; (8001154 ) + 8001082: 2201 movs r2, #1 + 8001084: 601a str r2, [r3, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 8001086: f7ff fcb3 bl 80009f0 + 800108a: 6138 str r0, [r7, #16] + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 800108c: e008 b.n 80010a0 + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + 800108e: f7ff fcaf bl 80009f0 + 8001092: 4602 mov r2, r0 + 8001094: 693b ldr r3, [r7, #16] + 8001096: 1ad3 subs r3, r2, r3 + 8001098: 2b02 cmp r3, #2 + 800109a: d901 bls.n 80010a0 + { + return HAL_TIMEOUT; + 800109c: 2303 movs r3, #3 + 800109e: e1a8 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 80010a0: 4b2b ldr r3, [pc, #172] ; (8001150 ) + 80010a2: 681b ldr r3, [r3, #0] + 80010a4: f003 0302 and.w r3, r3, #2 + 80010a8: 2b00 cmp r3, #0 + 80010aa: d0f0 beq.n 800108e + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value. */ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 80010ac: 4b28 ldr r3, [pc, #160] ; (8001150 ) + 80010ae: 681b ldr r3, [r3, #0] + 80010b0: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 80010b4: 687b ldr r3, [r7, #4] + 80010b6: 691b ldr r3, [r3, #16] + 80010b8: 00db lsls r3, r3, #3 + 80010ba: 4925 ldr r1, [pc, #148] ; (8001150 ) + 80010bc: 4313 orrs r3, r2 + 80010be: 600b str r3, [r1, #0] + 80010c0: e015 b.n 80010ee + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + 80010c2: 4b24 ldr r3, [pc, #144] ; (8001154 ) + 80010c4: 2200 movs r2, #0 + 80010c6: 601a str r2, [r3, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 80010c8: f7ff fc92 bl 80009f0 + 80010cc: 6138 str r0, [r7, #16] + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 80010ce: e008 b.n 80010e2 + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + 80010d0: f7ff fc8e bl 80009f0 + 80010d4: 4602 mov r2, r0 + 80010d6: 693b ldr r3, [r7, #16] + 80010d8: 1ad3 subs r3, r2, r3 + 80010da: 2b02 cmp r3, #2 + 80010dc: d901 bls.n 80010e2 + { + return HAL_TIMEOUT; + 80010de: 2303 movs r3, #3 + 80010e0: e187 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 80010e2: 4b1b ldr r3, [pc, #108] ; (8001150 ) + 80010e4: 681b ldr r3, [r3, #0] + 80010e6: f003 0302 and.w r3, r3, #2 + 80010ea: 2b00 cmp r3, #0 + 80010ec: d1f0 bne.n 80010d0 + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + 80010ee: 687b ldr r3, [r7, #4] + 80010f0: 681b ldr r3, [r3, #0] + 80010f2: f003 0308 and.w r3, r3, #8 + 80010f6: 2b00 cmp r3, #0 + 80010f8: d036 beq.n 8001168 + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF) + 80010fa: 687b ldr r3, [r7, #4] + 80010fc: 695b ldr r3, [r3, #20] + 80010fe: 2b00 cmp r3, #0 + 8001100: d016 beq.n 8001130 + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + 8001102: 4b15 ldr r3, [pc, #84] ; (8001158 ) + 8001104: 2201 movs r2, #1 + 8001106: 601a str r2, [r3, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 8001108: f7ff fc72 bl 80009f0 + 800110c: 6138 str r0, [r7, #16] + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 800110e: e008 b.n 8001122 + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + 8001110: f7ff fc6e bl 80009f0 + 8001114: 4602 mov r2, r0 + 8001116: 693b ldr r3, [r7, #16] + 8001118: 1ad3 subs r3, r2, r3 + 800111a: 2b02 cmp r3, #2 + 800111c: d901 bls.n 8001122 + { + return HAL_TIMEOUT; + 800111e: 2303 movs r3, #3 + 8001120: e167 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 8001122: 4b0b ldr r3, [pc, #44] ; (8001150 ) + 8001124: 6f5b ldr r3, [r3, #116] ; 0x74 + 8001126: f003 0302 and.w r3, r3, #2 + 800112a: 2b00 cmp r3, #0 + 800112c: d0f0 beq.n 8001110 + 800112e: e01b b.n 8001168 + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + 8001130: 4b09 ldr r3, [pc, #36] ; (8001158 ) + 8001132: 2200 movs r2, #0 + 8001134: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8001136: f7ff fc5b bl 80009f0 + 800113a: 6138 str r0, [r7, #16] + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 800113c: e00e b.n 800115c + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + 800113e: f7ff fc57 bl 80009f0 + 8001142: 4602 mov r2, r0 + 8001144: 693b ldr r3, [r7, #16] + 8001146: 1ad3 subs r3, r2, r3 + 8001148: 2b02 cmp r3, #2 + 800114a: d907 bls.n 800115c + { + return HAL_TIMEOUT; + 800114c: 2303 movs r3, #3 + 800114e: e150 b.n 80013f2 + 8001150: 40023800 .word 0x40023800 + 8001154: 42470000 .word 0x42470000 + 8001158: 42470e80 .word 0x42470e80 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 800115c: 4b88 ldr r3, [pc, #544] ; (8001380 ) + 800115e: 6f5b ldr r3, [r3, #116] ; 0x74 + 8001160: f003 0302 and.w r3, r3, #2 + 8001164: 2b00 cmp r3, #0 + 8001166: d1ea bne.n 800113e + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + 8001168: 687b ldr r3, [r7, #4] + 800116a: 681b ldr r3, [r3, #0] + 800116c: f003 0304 and.w r3, r3, #4 + 8001170: 2b00 cmp r3, #0 + 8001172: f000 8097 beq.w 80012a4 + { + FlagStatus pwrclkchanged = RESET; + 8001176: 2300 movs r3, #0 + 8001178: 75fb strb r3, [r7, #23] + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + 800117a: 4b81 ldr r3, [pc, #516] ; (8001380 ) + 800117c: 6c1b ldr r3, [r3, #64] ; 0x40 + 800117e: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8001182: 2b00 cmp r3, #0 + 8001184: d10f bne.n 80011a6 + { + __HAL_RCC_PWR_CLK_ENABLE(); + 8001186: 2300 movs r3, #0 + 8001188: 60bb str r3, [r7, #8] + 800118a: 4b7d ldr r3, [pc, #500] ; (8001380 ) + 800118c: 6c1b ldr r3, [r3, #64] ; 0x40 + 800118e: 4a7c ldr r2, [pc, #496] ; (8001380 ) + 8001190: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 8001194: 6413 str r3, [r2, #64] ; 0x40 + 8001196: 4b7a ldr r3, [pc, #488] ; (8001380 ) + 8001198: 6c1b ldr r3, [r3, #64] ; 0x40 + 800119a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 800119e: 60bb str r3, [r7, #8] + 80011a0: 68bb ldr r3, [r7, #8] + pwrclkchanged = SET; + 80011a2: 2301 movs r3, #1 + 80011a4: 75fb strb r3, [r7, #23] + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 80011a6: 4b77 ldr r3, [pc, #476] ; (8001384 ) + 80011a8: 681b ldr r3, [r3, #0] + 80011aa: f403 7380 and.w r3, r3, #256 ; 0x100 + 80011ae: 2b00 cmp r3, #0 + 80011b0: d118 bne.n 80011e4 + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + 80011b2: 4b74 ldr r3, [pc, #464] ; (8001384 ) + 80011b4: 681b ldr r3, [r3, #0] + 80011b6: 4a73 ldr r2, [pc, #460] ; (8001384 ) + 80011b8: f443 7380 orr.w r3, r3, #256 ; 0x100 + 80011bc: 6013 str r3, [r2, #0] + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + 80011be: f7ff fc17 bl 80009f0 + 80011c2: 6138 str r0, [r7, #16] + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 80011c4: e008 b.n 80011d8 + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 80011c6: f7ff fc13 bl 80009f0 + 80011ca: 4602 mov r2, r0 + 80011cc: 693b ldr r3, [r7, #16] + 80011ce: 1ad3 subs r3, r2, r3 + 80011d0: 2b02 cmp r3, #2 + 80011d2: d901 bls.n 80011d8 + { + return HAL_TIMEOUT; + 80011d4: 2303 movs r3, #3 + 80011d6: e10c b.n 80013f2 + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 80011d8: 4b6a ldr r3, [pc, #424] ; (8001384 ) + 80011da: 681b ldr r3, [r3, #0] + 80011dc: f403 7380 and.w r3, r3, #256 ; 0x100 + 80011e0: 2b00 cmp r3, #0 + 80011e2: d0f0 beq.n 80011c6 + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 80011e4: 687b ldr r3, [r7, #4] + 80011e6: 689b ldr r3, [r3, #8] + 80011e8: 2b01 cmp r3, #1 + 80011ea: d106 bne.n 80011fa + 80011ec: 4b64 ldr r3, [pc, #400] ; (8001380 ) + 80011ee: 6f1b ldr r3, [r3, #112] ; 0x70 + 80011f0: 4a63 ldr r2, [pc, #396] ; (8001380 ) + 80011f2: f043 0301 orr.w r3, r3, #1 + 80011f6: 6713 str r3, [r2, #112] ; 0x70 + 80011f8: e01c b.n 8001234 + 80011fa: 687b ldr r3, [r7, #4] + 80011fc: 689b ldr r3, [r3, #8] + 80011fe: 2b05 cmp r3, #5 + 8001200: d10c bne.n 800121c + 8001202: 4b5f ldr r3, [pc, #380] ; (8001380 ) + 8001204: 6f1b ldr r3, [r3, #112] ; 0x70 + 8001206: 4a5e ldr r2, [pc, #376] ; (8001380 ) + 8001208: f043 0304 orr.w r3, r3, #4 + 800120c: 6713 str r3, [r2, #112] ; 0x70 + 800120e: 4b5c ldr r3, [pc, #368] ; (8001380 ) + 8001210: 6f1b ldr r3, [r3, #112] ; 0x70 + 8001212: 4a5b ldr r2, [pc, #364] ; (8001380 ) + 8001214: f043 0301 orr.w r3, r3, #1 + 8001218: 6713 str r3, [r2, #112] ; 0x70 + 800121a: e00b b.n 8001234 + 800121c: 4b58 ldr r3, [pc, #352] ; (8001380 ) + 800121e: 6f1b ldr r3, [r3, #112] ; 0x70 + 8001220: 4a57 ldr r2, [pc, #348] ; (8001380 ) + 8001222: f023 0301 bic.w r3, r3, #1 + 8001226: 6713 str r3, [r2, #112] ; 0x70 + 8001228: 4b55 ldr r3, [pc, #340] ; (8001380 ) + 800122a: 6f1b ldr r3, [r3, #112] ; 0x70 + 800122c: 4a54 ldr r2, [pc, #336] ; (8001380 ) + 800122e: f023 0304 bic.w r3, r3, #4 + 8001232: 6713 str r3, [r2, #112] ; 0x70 + /* Check the LSE State */ + if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) + 8001234: 687b ldr r3, [r7, #4] + 8001236: 689b ldr r3, [r3, #8] + 8001238: 2b00 cmp r3, #0 + 800123a: d015 beq.n 8001268 + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 800123c: f7ff fbd8 bl 80009f0 + 8001240: 6138 str r0, [r7, #16] + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 8001242: e00a b.n 800125a + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8001244: f7ff fbd4 bl 80009f0 + 8001248: 4602 mov r2, r0 + 800124a: 693b ldr r3, [r7, #16] + 800124c: 1ad3 subs r3, r2, r3 + 800124e: f241 3288 movw r2, #5000 ; 0x1388 + 8001252: 4293 cmp r3, r2 + 8001254: d901 bls.n 800125a + { + return HAL_TIMEOUT; + 8001256: 2303 movs r3, #3 + 8001258: e0cb b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 800125a: 4b49 ldr r3, [pc, #292] ; (8001380 ) + 800125c: 6f1b ldr r3, [r3, #112] ; 0x70 + 800125e: f003 0302 and.w r3, r3, #2 + 8001262: 2b00 cmp r3, #0 + 8001264: d0ee beq.n 8001244 + 8001266: e014 b.n 8001292 + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8001268: f7ff fbc2 bl 80009f0 + 800126c: 6138 str r0, [r7, #16] + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 800126e: e00a b.n 8001286 + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + 8001270: f7ff fbbe bl 80009f0 + 8001274: 4602 mov r2, r0 + 8001276: 693b ldr r3, [r7, #16] + 8001278: 1ad3 subs r3, r2, r3 + 800127a: f241 3288 movw r2, #5000 ; 0x1388 + 800127e: 4293 cmp r3, r2 + 8001280: d901 bls.n 8001286 + { + return HAL_TIMEOUT; + 8001282: 2303 movs r3, #3 + 8001284: e0b5 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 8001286: 4b3e ldr r3, [pc, #248] ; (8001380 ) + 8001288: 6f1b ldr r3, [r3, #112] ; 0x70 + 800128a: f003 0302 and.w r3, r3, #2 + 800128e: 2b00 cmp r3, #0 + 8001290: d1ee bne.n 8001270 + } + } + } + + /* Restore clock configuration if changed */ + if(pwrclkchanged == SET) + 8001292: 7dfb ldrb r3, [r7, #23] + 8001294: 2b01 cmp r3, #1 + 8001296: d105 bne.n 80012a4 + { + __HAL_RCC_PWR_CLK_DISABLE(); + 8001298: 4b39 ldr r3, [pc, #228] ; (8001380 ) + 800129a: 6c1b ldr r3, [r3, #64] ; 0x40 + 800129c: 4a38 ldr r2, [pc, #224] ; (8001380 ) + 800129e: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 + 80012a2: 6413 str r3, [r2, #64] ; 0x40 + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + 80012a4: 687b ldr r3, [r7, #4] + 80012a6: 699b ldr r3, [r3, #24] + 80012a8: 2b00 cmp r3, #0 + 80012aa: f000 80a1 beq.w 80013f0 + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + 80012ae: 4b34 ldr r3, [pc, #208] ; (8001380 ) + 80012b0: 689b ldr r3, [r3, #8] + 80012b2: f003 030c and.w r3, r3, #12 + 80012b6: 2b08 cmp r3, #8 + 80012b8: d05c beq.n 8001374 + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + 80012ba: 687b ldr r3, [r7, #4] + 80012bc: 699b ldr r3, [r3, #24] + 80012be: 2b02 cmp r3, #2 + 80012c0: d141 bne.n 8001346 + assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); + assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + 80012c2: 4b31 ldr r3, [pc, #196] ; (8001388 ) + 80012c4: 2200 movs r2, #0 + 80012c6: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 80012c8: f7ff fb92 bl 80009f0 + 80012cc: 6138 str r0, [r7, #16] + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 80012ce: e008 b.n 80012e2 + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 80012d0: f7ff fb8e bl 80009f0 + 80012d4: 4602 mov r2, r0 + 80012d6: 693b ldr r3, [r7, #16] + 80012d8: 1ad3 subs r3, r2, r3 + 80012da: 2b02 cmp r3, #2 + 80012dc: d901 bls.n 80012e2 + { + return HAL_TIMEOUT; + 80012de: 2303 movs r3, #3 + 80012e0: e087 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 80012e2: 4b27 ldr r3, [pc, #156] ; (8001380 ) + 80012e4: 681b ldr r3, [r3, #0] + 80012e6: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 80012ea: 2b00 cmp r3, #0 + 80012ec: d1f0 bne.n 80012d0 + } + } + + /* Configure the main PLL clock source, multiplication and division factors. */ + WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ + 80012ee: 687b ldr r3, [r7, #4] + 80012f0: 69da ldr r2, [r3, #28] + 80012f2: 687b ldr r3, [r7, #4] + 80012f4: 6a1b ldr r3, [r3, #32] + 80012f6: 431a orrs r2, r3 + 80012f8: 687b ldr r3, [r7, #4] + 80012fa: 6a5b ldr r3, [r3, #36] ; 0x24 + 80012fc: 019b lsls r3, r3, #6 + 80012fe: 431a orrs r2, r3 + 8001300: 687b ldr r3, [r7, #4] + 8001302: 6a9b ldr r3, [r3, #40] ; 0x28 + 8001304: 085b lsrs r3, r3, #1 + 8001306: 3b01 subs r3, #1 + 8001308: 041b lsls r3, r3, #16 + 800130a: 431a orrs r2, r3 + 800130c: 687b ldr r3, [r7, #4] + 800130e: 6adb ldr r3, [r3, #44] ; 0x2c + 8001310: 061b lsls r3, r3, #24 + 8001312: 491b ldr r1, [pc, #108] ; (8001380 ) + 8001314: 4313 orrs r3, r2 + 8001316: 604b str r3, [r1, #4] + RCC_OscInitStruct->PLL.PLLM | \ + (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ + (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ + (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + 8001318: 4b1b ldr r3, [pc, #108] ; (8001388 ) + 800131a: 2201 movs r2, #1 + 800131c: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800131e: f7ff fb67 bl 80009f0 + 8001322: 6138 str r0, [r7, #16] + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8001324: e008 b.n 8001338 + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 8001326: f7ff fb63 bl 80009f0 + 800132a: 4602 mov r2, r0 + 800132c: 693b ldr r3, [r7, #16] + 800132e: 1ad3 subs r3, r2, r3 + 8001330: 2b02 cmp r3, #2 + 8001332: d901 bls.n 8001338 + { + return HAL_TIMEOUT; + 8001334: 2303 movs r3, #3 + 8001336: e05c b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8001338: 4b11 ldr r3, [pc, #68] ; (8001380 ) + 800133a: 681b ldr r3, [r3, #0] + 800133c: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 8001340: 2b00 cmp r3, #0 + 8001342: d0f0 beq.n 8001326 + 8001344: e054 b.n 80013f0 + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + 8001346: 4b10 ldr r3, [pc, #64] ; (8001388 ) + 8001348: 2200 movs r2, #0 + 800134a: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800134c: f7ff fb50 bl 80009f0 + 8001350: 6138 str r0, [r7, #16] + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8001352: e008 b.n 8001366 + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + 8001354: f7ff fb4c bl 80009f0 + 8001358: 4602 mov r2, r0 + 800135a: 693b ldr r3, [r7, #16] + 800135c: 1ad3 subs r3, r2, r3 + 800135e: 2b02 cmp r3, #2 + 8001360: d901 bls.n 8001366 + { + return HAL_TIMEOUT; + 8001362: 2303 movs r3, #3 + 8001364: e045 b.n 80013f2 + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8001366: 4b06 ldr r3, [pc, #24] ; (8001380 ) + 8001368: 681b ldr r3, [r3, #0] + 800136a: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 800136e: 2b00 cmp r3, #0 + 8001370: d1f0 bne.n 8001354 + 8001372: e03d b.n 80013f0 + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + 8001374: 687b ldr r3, [r7, #4] + 8001376: 699b ldr r3, [r3, #24] + 8001378: 2b01 cmp r3, #1 + 800137a: d107 bne.n 800138c + { + return HAL_ERROR; + 800137c: 2301 movs r3, #1 + 800137e: e038 b.n 80013f2 + 8001380: 40023800 .word 0x40023800 + 8001384: 40007000 .word 0x40007000 + 8001388: 42470060 .word 0x42470060 + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->PLLCFGR; + 800138c: 4b1b ldr r3, [pc, #108] ; (80013fc ) + 800138e: 685b ldr r3, [r3, #4] + 8001390: 60fb str r3, [r7, #12] + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) +#else + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + 8001392: 687b ldr r3, [r7, #4] + 8001394: 699b ldr r3, [r3, #24] + 8001396: 2b01 cmp r3, #1 + 8001398: d028 beq.n 80013ec + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 800139a: 68fb ldr r3, [r7, #12] + 800139c: f403 0280 and.w r2, r3, #4194304 ; 0x400000 + 80013a0: 687b ldr r3, [r7, #4] + 80013a2: 69db ldr r3, [r3, #28] + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + 80013a4: 429a cmp r2, r3 + 80013a6: d121 bne.n 80013ec + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + 80013a8: 68fb ldr r3, [r7, #12] + 80013aa: f003 023f and.w r2, r3, #63 ; 0x3f + 80013ae: 687b ldr r3, [r7, #4] + 80013b0: 6a1b ldr r3, [r3, #32] + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 80013b2: 429a cmp r2, r3 + 80013b4: d11a bne.n 80013ec + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + 80013b6: 68fa ldr r2, [r7, #12] + 80013b8: f647 73c0 movw r3, #32704 ; 0x7fc0 + 80013bc: 4013 ands r3, r2 + 80013be: 687a ldr r2, [r7, #4] + 80013c0: 6a52 ldr r2, [r2, #36] ; 0x24 + 80013c2: 0192 lsls r2, r2, #6 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + 80013c4: 4293 cmp r3, r2 + 80013c6: d111 bne.n 80013ec + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + 80013c8: 68fb ldr r3, [r7, #12] + 80013ca: f403 3240 and.w r2, r3, #196608 ; 0x30000 + 80013ce: 687b ldr r3, [r7, #4] + 80013d0: 6a9b ldr r3, [r3, #40] ; 0x28 + 80013d2: 085b lsrs r3, r3, #1 + 80013d4: 3b01 subs r3, #1 + 80013d6: 041b lsls r3, r3, #16 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + 80013d8: 429a cmp r2, r3 + 80013da: d107 bne.n 80013ec + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) + 80013dc: 68fb ldr r3, [r7, #12] + 80013de: f003 6270 and.w r2, r3, #251658240 ; 0xf000000 + 80013e2: 687b ldr r3, [r7, #4] + 80013e4: 6adb ldr r3, [r3, #44] ; 0x2c + 80013e6: 061b lsls r3, r3, #24 + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + 80013e8: 429a cmp r2, r3 + 80013ea: d001 beq.n 80013f0 +#endif + { + return HAL_ERROR; + 80013ec: 2301 movs r3, #1 + 80013ee: e000 b.n 80013f2 + } + } + } + } + return HAL_OK; + 80013f0: 2300 movs r3, #0 +} + 80013f2: 4618 mov r0, r3 + 80013f4: 3718 adds r7, #24 + 80013f6: 46bd mov sp, r7 + 80013f8: bd80 pop {r7, pc} + 80013fa: bf00 nop + 80013fc: 40023800 .word 0x40023800 + +08001400 : + * HPRE[3:0] bits to ensure that HCLK not exceed the maximum allowed frequency + * (for more details refer to section above "Initialization/de-initialization functions") + * @retval None + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + 8001400: b580 push {r7, lr} + 8001402: b084 sub sp, #16 + 8001404: af00 add r7, sp, #0 + 8001406: 6078 str r0, [r7, #4] + 8001408: 6039 str r1, [r7, #0] + uint32_t tickstart; + + /* Check Null pointer */ + if(RCC_ClkInitStruct == NULL) + 800140a: 687b ldr r3, [r7, #4] + 800140c: 2b00 cmp r3, #0 + 800140e: d101 bne.n 8001414 + { + return HAL_ERROR; + 8001410: 2301 movs r3, #1 + 8001412: e0cc b.n 80015ae + /* To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) and the supply voltage of the device. */ + + /* Increasing the number of wait states because of higher CPU frequency */ + if(FLatency > __HAL_FLASH_GET_LATENCY()) + 8001414: 4b68 ldr r3, [pc, #416] ; (80015b8 ) + 8001416: 681b ldr r3, [r3, #0] + 8001418: f003 0307 and.w r3, r3, #7 + 800141c: 683a ldr r2, [r7, #0] + 800141e: 429a cmp r2, r3 + 8001420: d90c bls.n 800143c + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 8001422: 4b65 ldr r3, [pc, #404] ; (80015b8 ) + 8001424: 683a ldr r2, [r7, #0] + 8001426: b2d2 uxtb r2, r2 + 8001428: 701a strb r2, [r3, #0] + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + 800142a: 4b63 ldr r3, [pc, #396] ; (80015b8 ) + 800142c: 681b ldr r3, [r3, #0] + 800142e: f003 0307 and.w r3, r3, #7 + 8001432: 683a ldr r2, [r7, #0] + 8001434: 429a cmp r2, r3 + 8001436: d001 beq.n 800143c + { + return HAL_ERROR; + 8001438: 2301 movs r3, #1 + 800143a: e0b8 b.n 80015ae + } + } + + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + 800143c: 687b ldr r3, [r7, #4] + 800143e: 681b ldr r3, [r3, #0] + 8001440: f003 0302 and.w r3, r3, #2 + 8001444: 2b00 cmp r3, #0 + 8001446: d020 beq.n 800148a + { + /* Set the highest APBx dividers in order to ensure that we do not go through + a non-spec phase whatever we decrease or increase HCLK. */ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 8001448: 687b ldr r3, [r7, #4] + 800144a: 681b ldr r3, [r3, #0] + 800144c: f003 0304 and.w r3, r3, #4 + 8001450: 2b00 cmp r3, #0 + 8001452: d005 beq.n 8001460 + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); + 8001454: 4b59 ldr r3, [pc, #356] ; (80015bc ) + 8001456: 689b ldr r3, [r3, #8] + 8001458: 4a58 ldr r2, [pc, #352] ; (80015bc ) + 800145a: f443 53e0 orr.w r3, r3, #7168 ; 0x1c00 + 800145e: 6093 str r3, [r2, #8] + } + + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 8001460: 687b ldr r3, [r7, #4] + 8001462: 681b ldr r3, [r3, #0] + 8001464: f003 0308 and.w r3, r3, #8 + 8001468: 2b00 cmp r3, #0 + 800146a: d005 beq.n 8001478 + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); + 800146c: 4b53 ldr r3, [pc, #332] ; (80015bc ) + 800146e: 689b ldr r3, [r3, #8] + 8001470: 4a52 ldr r2, [pc, #328] ; (80015bc ) + 8001472: f443 4360 orr.w r3, r3, #57344 ; 0xe000 + 8001476: 6093 str r3, [r2, #8] + } + + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + 8001478: 4b50 ldr r3, [pc, #320] ; (80015bc ) + 800147a: 689b ldr r3, [r3, #8] + 800147c: f023 02f0 bic.w r2, r3, #240 ; 0xf0 + 8001480: 687b ldr r3, [r7, #4] + 8001482: 689b ldr r3, [r3, #8] + 8001484: 494d ldr r1, [pc, #308] ; (80015bc ) + 8001486: 4313 orrs r3, r2 + 8001488: 608b str r3, [r1, #8] + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + 800148a: 687b ldr r3, [r7, #4] + 800148c: 681b ldr r3, [r3, #0] + 800148e: f003 0301 and.w r3, r3, #1 + 8001492: 2b00 cmp r3, #0 + 8001494: d044 beq.n 8001520 + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + 8001496: 687b ldr r3, [r7, #4] + 8001498: 685b ldr r3, [r3, #4] + 800149a: 2b01 cmp r3, #1 + 800149c: d107 bne.n 80014ae + { + /* Check the HSE ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 800149e: 4b47 ldr r3, [pc, #284] ; (80015bc ) + 80014a0: 681b ldr r3, [r3, #0] + 80014a2: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 80014a6: 2b00 cmp r3, #0 + 80014a8: d119 bne.n 80014de + { + return HAL_ERROR; + 80014aa: 2301 movs r3, #1 + 80014ac: e07f b.n 80015ae + } + } + /* PLL is selected as System Clock Source */ + else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || + 80014ae: 687b ldr r3, [r7, #4] + 80014b0: 685b ldr r3, [r3, #4] + 80014b2: 2b02 cmp r3, #2 + 80014b4: d003 beq.n 80014be + (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLRCLK)) + 80014b6: 687b ldr r3, [r7, #4] + 80014b8: 685b ldr r3, [r3, #4] + else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || + 80014ba: 2b03 cmp r3, #3 + 80014bc: d107 bne.n 80014ce + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 80014be: 4b3f ldr r3, [pc, #252] ; (80015bc ) + 80014c0: 681b ldr r3, [r3, #0] + 80014c2: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 80014c6: 2b00 cmp r3, #0 + 80014c8: d109 bne.n 80014de + { + return HAL_ERROR; + 80014ca: 2301 movs r3, #1 + 80014cc: e06f b.n 80015ae + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 80014ce: 4b3b ldr r3, [pc, #236] ; (80015bc ) + 80014d0: 681b ldr r3, [r3, #0] + 80014d2: f003 0302 and.w r3, r3, #2 + 80014d6: 2b00 cmp r3, #0 + 80014d8: d101 bne.n 80014de + { + return HAL_ERROR; + 80014da: 2301 movs r3, #1 + 80014dc: e067 b.n 80015ae + } + } + + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + 80014de: 4b37 ldr r3, [pc, #220] ; (80015bc ) + 80014e0: 689b ldr r3, [r3, #8] + 80014e2: f023 0203 bic.w r2, r3, #3 + 80014e6: 687b ldr r3, [r7, #4] + 80014e8: 685b ldr r3, [r3, #4] + 80014ea: 4934 ldr r1, [pc, #208] ; (80015bc ) + 80014ec: 4313 orrs r3, r2 + 80014ee: 608b str r3, [r1, #8] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 80014f0: f7ff fa7e bl 80009f0 + 80014f4: 60f8 str r0, [r7, #12] + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 80014f6: e00a b.n 800150e + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + 80014f8: f7ff fa7a bl 80009f0 + 80014fc: 4602 mov r2, r0 + 80014fe: 68fb ldr r3, [r7, #12] + 8001500: 1ad3 subs r3, r2, r3 + 8001502: f241 3288 movw r2, #5000 ; 0x1388 + 8001506: 4293 cmp r3, r2 + 8001508: d901 bls.n 800150e + { + return HAL_TIMEOUT; + 800150a: 2303 movs r3, #3 + 800150c: e04f b.n 80015ae + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 800150e: 4b2b ldr r3, [pc, #172] ; (80015bc ) + 8001510: 689b ldr r3, [r3, #8] + 8001512: f003 020c and.w r2, r3, #12 + 8001516: 687b ldr r3, [r7, #4] + 8001518: 685b ldr r3, [r3, #4] + 800151a: 009b lsls r3, r3, #2 + 800151c: 429a cmp r2, r3 + 800151e: d1eb bne.n 80014f8 + } + } + } + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLatency < __HAL_FLASH_GET_LATENCY()) + 8001520: 4b25 ldr r3, [pc, #148] ; (80015b8 ) + 8001522: 681b ldr r3, [r3, #0] + 8001524: f003 0307 and.w r3, r3, #7 + 8001528: 683a ldr r2, [r7, #0] + 800152a: 429a cmp r2, r3 + 800152c: d20c bcs.n 8001548 + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 800152e: 4b22 ldr r3, [pc, #136] ; (80015b8 ) + 8001530: 683a ldr r2, [r7, #0] + 8001532: b2d2 uxtb r2, r2 + 8001534: 701a strb r2, [r3, #0] + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + 8001536: 4b20 ldr r3, [pc, #128] ; (80015b8 ) + 8001538: 681b ldr r3, [r3, #0] + 800153a: f003 0307 and.w r3, r3, #7 + 800153e: 683a ldr r2, [r7, #0] + 8001540: 429a cmp r2, r3 + 8001542: d001 beq.n 8001548 + { + return HAL_ERROR; + 8001544: 2301 movs r3, #1 + 8001546: e032 b.n 80015ae + } + } + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 8001548: 687b ldr r3, [r7, #4] + 800154a: 681b ldr r3, [r3, #0] + 800154c: f003 0304 and.w r3, r3, #4 + 8001550: 2b00 cmp r3, #0 + 8001552: d008 beq.n 8001566 + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + 8001554: 4b19 ldr r3, [pc, #100] ; (80015bc ) + 8001556: 689b ldr r3, [r3, #8] + 8001558: f423 52e0 bic.w r2, r3, #7168 ; 0x1c00 + 800155c: 687b ldr r3, [r7, #4] + 800155e: 68db ldr r3, [r3, #12] + 8001560: 4916 ldr r1, [pc, #88] ; (80015bc ) + 8001562: 4313 orrs r3, r2 + 8001564: 608b str r3, [r1, #8] + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 8001566: 687b ldr r3, [r7, #4] + 8001568: 681b ldr r3, [r3, #0] + 800156a: f003 0308 and.w r3, r3, #8 + 800156e: 2b00 cmp r3, #0 + 8001570: d009 beq.n 8001586 + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); + 8001572: 4b12 ldr r3, [pc, #72] ; (80015bc ) + 8001574: 689b ldr r3, [r3, #8] + 8001576: f423 4260 bic.w r2, r3, #57344 ; 0xe000 + 800157a: 687b ldr r3, [r7, #4] + 800157c: 691b ldr r3, [r3, #16] + 800157e: 00db lsls r3, r3, #3 + 8001580: 490e ldr r1, [pc, #56] ; (80015bc ) + 8001582: 4313 orrs r3, r2 + 8001584: 608b str r3, [r1, #8] + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos]; + 8001586: f000 f821 bl 80015cc + 800158a: 4602 mov r2, r0 + 800158c: 4b0b ldr r3, [pc, #44] ; (80015bc ) + 800158e: 689b ldr r3, [r3, #8] + 8001590: 091b lsrs r3, r3, #4 + 8001592: f003 030f and.w r3, r3, #15 + 8001596: 490a ldr r1, [pc, #40] ; (80015c0 ) + 8001598: 5ccb ldrb r3, [r1, r3] + 800159a: fa22 f303 lsr.w r3, r2, r3 + 800159e: 4a09 ldr r2, [pc, #36] ; (80015c4 ) + 80015a0: 6013 str r3, [r2, #0] + + /* Configure the source of time base considering new system clocks settings */ + HAL_InitTick (uwTickPrio); + 80015a2: 4b09 ldr r3, [pc, #36] ; (80015c8 ) + 80015a4: 681b ldr r3, [r3, #0] + 80015a6: 4618 mov r0, r3 + 80015a8: f7ff f9de bl 8000968 + + return HAL_OK; + 80015ac: 2300 movs r3, #0 +} + 80015ae: 4618 mov r0, r3 + 80015b0: 3710 adds r7, #16 + 80015b2: 46bd mov sp, r7 + 80015b4: bd80 pop {r7, pc} + 80015b6: bf00 nop + 80015b8: 40023c00 .word 0x40023c00 + 80015bc: 40023800 .word 0x40023800 + 80015c0: 08002054 .word 0x08002054 + 80015c4: 20000000 .word 0x20000000 + 80015c8: 20000004 .word 0x20000004 + +080015cc : + * + * + * @retval SYSCLK frequency + */ +__weak uint32_t HAL_RCC_GetSysClockFreq(void) +{ + 80015cc: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} + 80015d0: b094 sub sp, #80 ; 0x50 + 80015d2: af00 add r7, sp, #0 + uint32_t pllm = 0U, pllvco = 0U, pllp = 0U; + 80015d4: 2300 movs r3, #0 + 80015d6: 647b str r3, [r7, #68] ; 0x44 + 80015d8: 2300 movs r3, #0 + 80015da: 64fb str r3, [r7, #76] ; 0x4c + 80015dc: 2300 movs r3, #0 + 80015de: 643b str r3, [r7, #64] ; 0x40 + uint32_t sysclockfreq = 0U; + 80015e0: 2300 movs r3, #0 + 80015e2: 64bb str r3, [r7, #72] ; 0x48 + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + 80015e4: 4b79 ldr r3, [pc, #484] ; (80017cc ) + 80015e6: 689b ldr r3, [r3, #8] + 80015e8: f003 030c and.w r3, r3, #12 + 80015ec: 2b08 cmp r3, #8 + 80015ee: d00d beq.n 800160c + 80015f0: 2b08 cmp r3, #8 + 80015f2: f200 80e1 bhi.w 80017b8 + 80015f6: 2b00 cmp r3, #0 + 80015f8: d002 beq.n 8001600 + 80015fa: 2b04 cmp r3, #4 + 80015fc: d003 beq.n 8001606 + 80015fe: e0db b.n 80017b8 + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + { + sysclockfreq = HSI_VALUE; + 8001600: 4b73 ldr r3, [pc, #460] ; (80017d0 ) + 8001602: 64bb str r3, [r7, #72] ; 0x48 + break; + 8001604: e0db b.n 80017be + } + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + { + sysclockfreq = HSE_VALUE; + 8001606: 4b73 ldr r3, [pc, #460] ; (80017d4 ) + 8001608: 64bb str r3, [r7, #72] ; 0x48 + break; + 800160a: e0d8 b.n 80017be + } + case RCC_CFGR_SWS_PLL: /* PLL used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + 800160c: 4b6f ldr r3, [pc, #444] ; (80017cc ) + 800160e: 685b ldr r3, [r3, #4] + 8001610: f003 033f and.w r3, r3, #63 ; 0x3f + 8001614: 647b str r3, [r7, #68] ; 0x44 + if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + 8001616: 4b6d ldr r3, [pc, #436] ; (80017cc ) + 8001618: 685b ldr r3, [r3, #4] + 800161a: f403 0380 and.w r3, r3, #4194304 ; 0x400000 + 800161e: 2b00 cmp r3, #0 + 8001620: d063 beq.n 80016ea + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + 8001622: 4b6a ldr r3, [pc, #424] ; (80017cc ) + 8001624: 685b ldr r3, [r3, #4] + 8001626: 099b lsrs r3, r3, #6 + 8001628: 2200 movs r2, #0 + 800162a: 63bb str r3, [r7, #56] ; 0x38 + 800162c: 63fa str r2, [r7, #60] ; 0x3c + 800162e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001630: f3c3 0308 ubfx r3, r3, #0, #9 + 8001634: 633b str r3, [r7, #48] ; 0x30 + 8001636: 2300 movs r3, #0 + 8001638: 637b str r3, [r7, #52] ; 0x34 + 800163a: e9d7 450c ldrd r4, r5, [r7, #48] ; 0x30 + 800163e: 4622 mov r2, r4 + 8001640: 462b mov r3, r5 + 8001642: f04f 0000 mov.w r0, #0 + 8001646: f04f 0100 mov.w r1, #0 + 800164a: 0159 lsls r1, r3, #5 + 800164c: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 8001650: 0150 lsls r0, r2, #5 + 8001652: 4602 mov r2, r0 + 8001654: 460b mov r3, r1 + 8001656: 4621 mov r1, r4 + 8001658: 1a51 subs r1, r2, r1 + 800165a: 6139 str r1, [r7, #16] + 800165c: 4629 mov r1, r5 + 800165e: eb63 0301 sbc.w r3, r3, r1 + 8001662: 617b str r3, [r7, #20] + 8001664: f04f 0200 mov.w r2, #0 + 8001668: f04f 0300 mov.w r3, #0 + 800166c: e9d7 ab04 ldrd sl, fp, [r7, #16] + 8001670: 4659 mov r1, fp + 8001672: 018b lsls r3, r1, #6 + 8001674: 4651 mov r1, sl + 8001676: ea43 6391 orr.w r3, r3, r1, lsr #26 + 800167a: 4651 mov r1, sl + 800167c: 018a lsls r2, r1, #6 + 800167e: 4651 mov r1, sl + 8001680: ebb2 0801 subs.w r8, r2, r1 + 8001684: 4659 mov r1, fp + 8001686: eb63 0901 sbc.w r9, r3, r1 + 800168a: f04f 0200 mov.w r2, #0 + 800168e: f04f 0300 mov.w r3, #0 + 8001692: ea4f 03c9 mov.w r3, r9, lsl #3 + 8001696: ea43 7358 orr.w r3, r3, r8, lsr #29 + 800169a: ea4f 02c8 mov.w r2, r8, lsl #3 + 800169e: 4690 mov r8, r2 + 80016a0: 4699 mov r9, r3 + 80016a2: 4623 mov r3, r4 + 80016a4: eb18 0303 adds.w r3, r8, r3 + 80016a8: 60bb str r3, [r7, #8] + 80016aa: 462b mov r3, r5 + 80016ac: eb49 0303 adc.w r3, r9, r3 + 80016b0: 60fb str r3, [r7, #12] + 80016b2: f04f 0200 mov.w r2, #0 + 80016b6: f04f 0300 mov.w r3, #0 + 80016ba: e9d7 4502 ldrd r4, r5, [r7, #8] + 80016be: 4629 mov r1, r5 + 80016c0: 024b lsls r3, r1, #9 + 80016c2: 4621 mov r1, r4 + 80016c4: ea43 53d1 orr.w r3, r3, r1, lsr #23 + 80016c8: 4621 mov r1, r4 + 80016ca: 024a lsls r2, r1, #9 + 80016cc: 4610 mov r0, r2 + 80016ce: 4619 mov r1, r3 + 80016d0: 6c7b ldr r3, [r7, #68] ; 0x44 + 80016d2: 2200 movs r2, #0 + 80016d4: 62bb str r3, [r7, #40] ; 0x28 + 80016d6: 62fa str r2, [r7, #44] ; 0x2c + 80016d8: e9d7 230a ldrd r2, r3, [r7, #40] ; 0x28 + 80016dc: f7fe fd7c bl 80001d8 <__aeabi_uldivmod> + 80016e0: 4602 mov r2, r0 + 80016e2: 460b mov r3, r1 + 80016e4: 4613 mov r3, r2 + 80016e6: 64fb str r3, [r7, #76] ; 0x4c + 80016e8: e058 b.n 800179c + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + 80016ea: 4b38 ldr r3, [pc, #224] ; (80017cc ) + 80016ec: 685b ldr r3, [r3, #4] + 80016ee: 099b lsrs r3, r3, #6 + 80016f0: 2200 movs r2, #0 + 80016f2: 4618 mov r0, r3 + 80016f4: 4611 mov r1, r2 + 80016f6: f3c0 0308 ubfx r3, r0, #0, #9 + 80016fa: 623b str r3, [r7, #32] + 80016fc: 2300 movs r3, #0 + 80016fe: 627b str r3, [r7, #36] ; 0x24 + 8001700: e9d7 8908 ldrd r8, r9, [r7, #32] + 8001704: 4642 mov r2, r8 + 8001706: 464b mov r3, r9 + 8001708: f04f 0000 mov.w r0, #0 + 800170c: f04f 0100 mov.w r1, #0 + 8001710: 0159 lsls r1, r3, #5 + 8001712: ea41 61d2 orr.w r1, r1, r2, lsr #27 + 8001716: 0150 lsls r0, r2, #5 + 8001718: 4602 mov r2, r0 + 800171a: 460b mov r3, r1 + 800171c: 4641 mov r1, r8 + 800171e: ebb2 0a01 subs.w sl, r2, r1 + 8001722: 4649 mov r1, r9 + 8001724: eb63 0b01 sbc.w fp, r3, r1 + 8001728: f04f 0200 mov.w r2, #0 + 800172c: f04f 0300 mov.w r3, #0 + 8001730: ea4f 138b mov.w r3, fp, lsl #6 + 8001734: ea43 639a orr.w r3, r3, sl, lsr #26 + 8001738: ea4f 128a mov.w r2, sl, lsl #6 + 800173c: ebb2 040a subs.w r4, r2, sl + 8001740: eb63 050b sbc.w r5, r3, fp + 8001744: f04f 0200 mov.w r2, #0 + 8001748: f04f 0300 mov.w r3, #0 + 800174c: 00eb lsls r3, r5, #3 + 800174e: ea43 7354 orr.w r3, r3, r4, lsr #29 + 8001752: 00e2 lsls r2, r4, #3 + 8001754: 4614 mov r4, r2 + 8001756: 461d mov r5, r3 + 8001758: 4643 mov r3, r8 + 800175a: 18e3 adds r3, r4, r3 + 800175c: 603b str r3, [r7, #0] + 800175e: 464b mov r3, r9 + 8001760: eb45 0303 adc.w r3, r5, r3 + 8001764: 607b str r3, [r7, #4] + 8001766: f04f 0200 mov.w r2, #0 + 800176a: f04f 0300 mov.w r3, #0 + 800176e: e9d7 4500 ldrd r4, r5, [r7] + 8001772: 4629 mov r1, r5 + 8001774: 028b lsls r3, r1, #10 + 8001776: 4621 mov r1, r4 + 8001778: ea43 5391 orr.w r3, r3, r1, lsr #22 + 800177c: 4621 mov r1, r4 + 800177e: 028a lsls r2, r1, #10 + 8001780: 4610 mov r0, r2 + 8001782: 4619 mov r1, r3 + 8001784: 6c7b ldr r3, [r7, #68] ; 0x44 + 8001786: 2200 movs r2, #0 + 8001788: 61bb str r3, [r7, #24] + 800178a: 61fa str r2, [r7, #28] + 800178c: e9d7 2306 ldrd r2, r3, [r7, #24] + 8001790: f7fe fd22 bl 80001d8 <__aeabi_uldivmod> + 8001794: 4602 mov r2, r0 + 8001796: 460b mov r3, r1 + 8001798: 4613 mov r3, r2 + 800179a: 64fb str r3, [r7, #76] ; 0x4c + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) *2U); + 800179c: 4b0b ldr r3, [pc, #44] ; (80017cc ) + 800179e: 685b ldr r3, [r3, #4] + 80017a0: 0c1b lsrs r3, r3, #16 + 80017a2: f003 0303 and.w r3, r3, #3 + 80017a6: 3301 adds r3, #1 + 80017a8: 005b lsls r3, r3, #1 + 80017aa: 643b str r3, [r7, #64] ; 0x40 + + sysclockfreq = pllvco/pllp; + 80017ac: 6cfa ldr r2, [r7, #76] ; 0x4c + 80017ae: 6c3b ldr r3, [r7, #64] ; 0x40 + 80017b0: fbb2 f3f3 udiv r3, r2, r3 + 80017b4: 64bb str r3, [r7, #72] ; 0x48 + break; + 80017b6: e002 b.n 80017be + } + default: + { + sysclockfreq = HSI_VALUE; + 80017b8: 4b05 ldr r3, [pc, #20] ; (80017d0 ) + 80017ba: 64bb str r3, [r7, #72] ; 0x48 + break; + 80017bc: bf00 nop + } + } + return sysclockfreq; + 80017be: 6cbb ldr r3, [r7, #72] ; 0x48 +} + 80017c0: 4618 mov r0, r3 + 80017c2: 3750 adds r7, #80 ; 0x50 + 80017c4: 46bd mov sp, r7 + 80017c6: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} + 80017ca: bf00 nop + 80017cc: 40023800 .word 0x40023800 + 80017d0: 00f42400 .word 0x00f42400 + 80017d4: 007a1200 .word 0x007a1200 + +080017d8 : + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + 80017d8: b480 push {r7} + 80017da: af00 add r7, sp, #0 + return SystemCoreClock; + 80017dc: 4b03 ldr r3, [pc, #12] ; (80017ec ) + 80017de: 681b ldr r3, [r3, #0] +} + 80017e0: 4618 mov r0, r3 + 80017e2: 46bd mov sp, r7 + 80017e4: f85d 7b04 ldr.w r7, [sp], #4 + 80017e8: 4770 bx lr + 80017ea: bf00 nop + 80017ec: 20000000 .word 0x20000000 + +080017f0 : + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + 80017f0: b580 push {r7, lr} + 80017f2: af00 add r7, sp, #0 + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]); + 80017f4: f7ff fff0 bl 80017d8 + 80017f8: 4602 mov r2, r0 + 80017fa: 4b05 ldr r3, [pc, #20] ; (8001810 ) + 80017fc: 689b ldr r3, [r3, #8] + 80017fe: 0a9b lsrs r3, r3, #10 + 8001800: f003 0307 and.w r3, r3, #7 + 8001804: 4903 ldr r1, [pc, #12] ; (8001814 ) + 8001806: 5ccb ldrb r3, [r1, r3] + 8001808: fa22 f303 lsr.w r3, r2, r3 +} + 800180c: 4618 mov r0, r3 + 800180e: bd80 pop {r7, pc} + 8001810: 40023800 .word 0x40023800 + 8001814: 08002064 .word 0x08002064 + +08001818 : + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + 8001818: b580 push {r7, lr} + 800181a: af00 add r7, sp, #0 + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]); + 800181c: f7ff ffdc bl 80017d8 + 8001820: 4602 mov r2, r0 + 8001822: 4b05 ldr r3, [pc, #20] ; (8001838 ) + 8001824: 689b ldr r3, [r3, #8] + 8001826: 0b5b lsrs r3, r3, #13 + 8001828: f003 0307 and.w r3, r3, #7 + 800182c: 4903 ldr r1, [pc, #12] ; (800183c ) + 800182e: 5ccb ldrb r3, [r1, r3] + 8001830: fa22 f303 lsr.w r3, r2, r3 +} + 8001834: 4618 mov r0, r3 + 8001836: bd80 pop {r7, pc} + 8001838: 40023800 .word 0x40023800 + 800183c: 08002064 .word 0x08002064 + +08001840 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + 8001840: b580 push {r7, lr} + 8001842: b082 sub sp, #8 + 8001844: af00 add r7, sp, #0 + 8001846: 6078 str r0, [r7, #4] + /* Check the UART handle allocation */ + if (huart == NULL) + 8001848: 687b ldr r3, [r7, #4] + 800184a: 2b00 cmp r3, #0 + 800184c: d101 bne.n 8001852 + { + return HAL_ERROR; + 800184e: 2301 movs r3, #1 + 8001850: e03f b.n 80018d2 + assert_param(IS_UART_INSTANCE(huart->Instance)); + } + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + 8001852: 687b ldr r3, [r7, #4] + 8001854: f893 303d ldrb.w r3, [r3, #61] ; 0x3d + 8001858: b2db uxtb r3, r3 + 800185a: 2b00 cmp r3, #0 + 800185c: d106 bne.n 800186c + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + 800185e: 687b ldr r3, [r7, #4] + 8001860: 2200 movs r2, #0 + 8001862: f883 203c strb.w r2, [r3, #60] ; 0x3c + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); + 8001866: 6878 ldr r0, [r7, #4] + 8001868: f7fe ffae bl 80007c8 +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + 800186c: 687b ldr r3, [r7, #4] + 800186e: 2224 movs r2, #36 ; 0x24 + 8001870: f883 203d strb.w r2, [r3, #61] ; 0x3d + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + 8001874: 687b ldr r3, [r7, #4] + 8001876: 681b ldr r3, [r3, #0] + 8001878: 68da ldr r2, [r3, #12] + 800187a: 687b ldr r3, [r7, #4] + 800187c: 681b ldr r3, [r3, #0] + 800187e: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + 8001882: 60da str r2, [r3, #12] + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + 8001884: 6878 ldr r0, [r7, #4] + 8001886: f000 f939 bl 8001afc + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + 800188a: 687b ldr r3, [r7, #4] + 800188c: 681b ldr r3, [r3, #0] + 800188e: 691a ldr r2, [r3, #16] + 8001890: 687b ldr r3, [r7, #4] + 8001892: 681b ldr r3, [r3, #0] + 8001894: f422 4290 bic.w r2, r2, #18432 ; 0x4800 + 8001898: 611a str r2, [r3, #16] + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + 800189a: 687b ldr r3, [r7, #4] + 800189c: 681b ldr r3, [r3, #0] + 800189e: 695a ldr r2, [r3, #20] + 80018a0: 687b ldr r3, [r7, #4] + 80018a2: 681b ldr r3, [r3, #0] + 80018a4: f022 022a bic.w r2, r2, #42 ; 0x2a + 80018a8: 615a str r2, [r3, #20] + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + 80018aa: 687b ldr r3, [r7, #4] + 80018ac: 681b ldr r3, [r3, #0] + 80018ae: 68da ldr r2, [r3, #12] + 80018b0: 687b ldr r3, [r7, #4] + 80018b2: 681b ldr r3, [r3, #0] + 80018b4: f442 5200 orr.w r2, r2, #8192 ; 0x2000 + 80018b8: 60da str r2, [r3, #12] + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 80018ba: 687b ldr r3, [r7, #4] + 80018bc: 2200 movs r2, #0 + 80018be: 641a str r2, [r3, #64] ; 0x40 + huart->gState = HAL_UART_STATE_READY; + 80018c0: 687b ldr r3, [r7, #4] + 80018c2: 2220 movs r2, #32 + 80018c4: f883 203d strb.w r2, [r3, #61] ; 0x3d + huart->RxState = HAL_UART_STATE_READY; + 80018c8: 687b ldr r3, [r7, #4] + 80018ca: 2220 movs r2, #32 + 80018cc: f883 203e strb.w r2, [r3, #62] ; 0x3e + + return HAL_OK; + 80018d0: 2300 movs r3, #0 +} + 80018d2: 4618 mov r0, r3 + 80018d4: 3708 adds r7, #8 + 80018d6: 46bd mov sp, r7 + 80018d8: bd80 pop {r7, pc} + +080018da : + * @param Size Amount of data elements (u8 or u16) to be received. + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + 80018da: b580 push {r7, lr} + 80018dc: b08a sub sp, #40 ; 0x28 + 80018de: af02 add r7, sp, #8 + 80018e0: 60f8 str r0, [r7, #12] + 80018e2: 60b9 str r1, [r7, #8] + 80018e4: 603b str r3, [r7, #0] + 80018e6: 4613 mov r3, r2 + 80018e8: 80fb strh r3, [r7, #6] + uint8_t *pdata8bits; + uint16_t *pdata16bits; + uint32_t tickstart = 0U; + 80018ea: 2300 movs r3, #0 + 80018ec: 617b str r3, [r7, #20] + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + 80018ee: 68fb ldr r3, [r7, #12] + 80018f0: f893 303e ldrb.w r3, [r3, #62] ; 0x3e + 80018f4: b2db uxtb r3, r3 + 80018f6: 2b20 cmp r3, #32 + 80018f8: f040 808c bne.w 8001a14 + { + if ((pData == NULL) || (Size == 0U)) + 80018fc: 68bb ldr r3, [r7, #8] + 80018fe: 2b00 cmp r3, #0 + 8001900: d002 beq.n 8001908 + 8001902: 88fb ldrh r3, [r7, #6] + 8001904: 2b00 cmp r3, #0 + 8001906: d101 bne.n 800190c + { + return HAL_ERROR; + 8001908: 2301 movs r3, #1 + 800190a: e084 b.n 8001a16 + } + + /* Process Locked */ + __HAL_LOCK(huart); + 800190c: 68fb ldr r3, [r7, #12] + 800190e: f893 303c ldrb.w r3, [r3, #60] ; 0x3c + 8001912: 2b01 cmp r3, #1 + 8001914: d101 bne.n 800191a + 8001916: 2302 movs r3, #2 + 8001918: e07d b.n 8001a16 + 800191a: 68fb ldr r3, [r7, #12] + 800191c: 2201 movs r2, #1 + 800191e: f883 203c strb.w r2, [r3, #60] ; 0x3c + + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8001922: 68fb ldr r3, [r7, #12] + 8001924: 2200 movs r2, #0 + 8001926: 641a str r2, [r3, #64] ; 0x40 + huart->RxState = HAL_UART_STATE_BUSY_RX; + 8001928: 68fb ldr r3, [r7, #12] + 800192a: 2222 movs r2, #34 ; 0x22 + 800192c: f883 203e strb.w r2, [r3, #62] ; 0x3e + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8001930: 68fb ldr r3, [r7, #12] + 8001932: 2200 movs r2, #0 + 8001934: 631a str r2, [r3, #48] ; 0x30 + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + 8001936: f7ff f85b bl 80009f0 + 800193a: 6178 str r0, [r7, #20] + + huart->RxXferSize = Size; + 800193c: 68fb ldr r3, [r7, #12] + 800193e: 88fa ldrh r2, [r7, #6] + 8001940: 859a strh r2, [r3, #44] ; 0x2c + huart->RxXferCount = Size; + 8001942: 68fb ldr r3, [r7, #12] + 8001944: 88fa ldrh r2, [r7, #6] + 8001946: 85da strh r2, [r3, #46] ; 0x2e + + /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + 8001948: 68fb ldr r3, [r7, #12] + 800194a: 689b ldr r3, [r3, #8] + 800194c: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 + 8001950: d108 bne.n 8001964 + 8001952: 68fb ldr r3, [r7, #12] + 8001954: 691b ldr r3, [r3, #16] + 8001956: 2b00 cmp r3, #0 + 8001958: d104 bne.n 8001964 + { + pdata8bits = NULL; + 800195a: 2300 movs r3, #0 + 800195c: 61fb str r3, [r7, #28] + pdata16bits = (uint16_t *) pData; + 800195e: 68bb ldr r3, [r7, #8] + 8001960: 61bb str r3, [r7, #24] + 8001962: e003 b.n 800196c + } + else + { + pdata8bits = pData; + 8001964: 68bb ldr r3, [r7, #8] + 8001966: 61fb str r3, [r7, #28] + pdata16bits = NULL; + 8001968: 2300 movs r3, #0 + 800196a: 61bb str r3, [r7, #24] + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + 800196c: 68fb ldr r3, [r7, #12] + 800196e: 2200 movs r2, #0 + 8001970: f883 203c strb.w r2, [r3, #60] ; 0x3c + + /* Check the remain data to be received */ + while (huart->RxXferCount > 0U) + 8001974: e043 b.n 80019fe + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + 8001976: 683b ldr r3, [r7, #0] + 8001978: 9300 str r3, [sp, #0] + 800197a: 697b ldr r3, [r7, #20] + 800197c: 2200 movs r2, #0 + 800197e: 2120 movs r1, #32 + 8001980: 68f8 ldr r0, [r7, #12] + 8001982: f000 f84c bl 8001a1e + 8001986: 4603 mov r3, r0 + 8001988: 2b00 cmp r3, #0 + 800198a: d001 beq.n 8001990 + { + return HAL_TIMEOUT; + 800198c: 2303 movs r3, #3 + 800198e: e042 b.n 8001a16 + } + if (pdata8bits == NULL) + 8001990: 69fb ldr r3, [r7, #28] + 8001992: 2b00 cmp r3, #0 + 8001994: d10c bne.n 80019b0 + { + *pdata16bits = (uint16_t)(huart->Instance->DR & 0x01FF); + 8001996: 68fb ldr r3, [r7, #12] + 8001998: 681b ldr r3, [r3, #0] + 800199a: 685b ldr r3, [r3, #4] + 800199c: b29b uxth r3, r3 + 800199e: f3c3 0308 ubfx r3, r3, #0, #9 + 80019a2: b29a uxth r2, r3 + 80019a4: 69bb ldr r3, [r7, #24] + 80019a6: 801a strh r2, [r3, #0] + pdata16bits++; + 80019a8: 69bb ldr r3, [r7, #24] + 80019aa: 3302 adds r3, #2 + 80019ac: 61bb str r3, [r7, #24] + 80019ae: e01f b.n 80019f0 + } + else + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + 80019b0: 68fb ldr r3, [r7, #12] + 80019b2: 689b ldr r3, [r3, #8] + 80019b4: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 + 80019b8: d007 beq.n 80019ca + 80019ba: 68fb ldr r3, [r7, #12] + 80019bc: 689b ldr r3, [r3, #8] + 80019be: 2b00 cmp r3, #0 + 80019c0: d10a bne.n 80019d8 + 80019c2: 68fb ldr r3, [r7, #12] + 80019c4: 691b ldr r3, [r3, #16] + 80019c6: 2b00 cmp r3, #0 + 80019c8: d106 bne.n 80019d8 + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + 80019ca: 68fb ldr r3, [r7, #12] + 80019cc: 681b ldr r3, [r3, #0] + 80019ce: 685b ldr r3, [r3, #4] + 80019d0: b2da uxtb r2, r3 + 80019d2: 69fb ldr r3, [r7, #28] + 80019d4: 701a strb r2, [r3, #0] + 80019d6: e008 b.n 80019ea + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + 80019d8: 68fb ldr r3, [r7, #12] + 80019da: 681b ldr r3, [r3, #0] + 80019dc: 685b ldr r3, [r3, #4] + 80019de: b2db uxtb r3, r3 + 80019e0: f003 037f and.w r3, r3, #127 ; 0x7f + 80019e4: b2da uxtb r2, r3 + 80019e6: 69fb ldr r3, [r7, #28] + 80019e8: 701a strb r2, [r3, #0] + } + pdata8bits++; + 80019ea: 69fb ldr r3, [r7, #28] + 80019ec: 3301 adds r3, #1 + 80019ee: 61fb str r3, [r7, #28] + } + huart->RxXferCount--; + 80019f0: 68fb ldr r3, [r7, #12] + 80019f2: 8ddb ldrh r3, [r3, #46] ; 0x2e + 80019f4: b29b uxth r3, r3 + 80019f6: 3b01 subs r3, #1 + 80019f8: b29a uxth r2, r3 + 80019fa: 68fb ldr r3, [r7, #12] + 80019fc: 85da strh r2, [r3, #46] ; 0x2e + while (huart->RxXferCount > 0U) + 80019fe: 68fb ldr r3, [r7, #12] + 8001a00: 8ddb ldrh r3, [r3, #46] ; 0x2e + 8001a02: b29b uxth r3, r3 + 8001a04: 2b00 cmp r3, #0 + 8001a06: d1b6 bne.n 8001976 + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 8001a08: 68fb ldr r3, [r7, #12] + 8001a0a: 2220 movs r2, #32 + 8001a0c: f883 203e strb.w r2, [r3, #62] ; 0x3e + + return HAL_OK; + 8001a10: 2300 movs r3, #0 + 8001a12: e000 b.n 8001a16 + } + else + { + return HAL_BUSY; + 8001a14: 2302 movs r3, #2 + } +} + 8001a16: 4618 mov r0, r3 + 8001a18: 3720 adds r7, #32 + 8001a1a: 46bd mov sp, r7 + 8001a1c: bd80 pop {r7, pc} + +08001a1e : + * @param Timeout Timeout duration + * @retval HAL status + */ +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout) +{ + 8001a1e: b580 push {r7, lr} + 8001a20: b090 sub sp, #64 ; 0x40 + 8001a22: af00 add r7, sp, #0 + 8001a24: 60f8 str r0, [r7, #12] + 8001a26: 60b9 str r1, [r7, #8] + 8001a28: 603b str r3, [r7, #0] + 8001a2a: 4613 mov r3, r2 + 8001a2c: 71fb strb r3, [r7, #7] + /* Wait until flag is set */ + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 8001a2e: e050 b.n 8001ad2 + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + 8001a30: 6cbb ldr r3, [r7, #72] ; 0x48 + 8001a32: f1b3 3fff cmp.w r3, #4294967295 + 8001a36: d04c beq.n 8001ad2 + { + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) + 8001a38: 6cbb ldr r3, [r7, #72] ; 0x48 + 8001a3a: 2b00 cmp r3, #0 + 8001a3c: d007 beq.n 8001a4e + 8001a3e: f7fe ffd7 bl 80009f0 + 8001a42: 4602 mov r2, r0 + 8001a44: 683b ldr r3, [r7, #0] + 8001a46: 1ad3 subs r3, r2, r3 + 8001a48: 6cba ldr r2, [r7, #72] ; 0x48 + 8001a4a: 429a cmp r2, r3 + 8001a4c: d241 bcs.n 8001ad2 + { + /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); + 8001a4e: 68fb ldr r3, [r7, #12] + 8001a50: 681b ldr r3, [r3, #0] + 8001a52: 330c adds r3, #12 + 8001a54: 62bb str r3, [r7, #40] ; 0x28 + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8001a56: 6abb ldr r3, [r7, #40] ; 0x28 + 8001a58: e853 3f00 ldrex r3, [r3] + 8001a5c: 627b str r3, [r7, #36] ; 0x24 + return(result); + 8001a5e: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001a60: f423 73d0 bic.w r3, r3, #416 ; 0x1a0 + 8001a64: 63fb str r3, [r7, #60] ; 0x3c + 8001a66: 68fb ldr r3, [r7, #12] + 8001a68: 681b ldr r3, [r3, #0] + 8001a6a: 330c adds r3, #12 + 8001a6c: 6bfa ldr r2, [r7, #60] ; 0x3c + 8001a6e: 637a str r2, [r7, #52] ; 0x34 + 8001a70: 633b str r3, [r7, #48] ; 0x30 + */ +__STATIC_FORCEINLINE 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) ); + 8001a72: 6b39 ldr r1, [r7, #48] ; 0x30 + 8001a74: 6b7a ldr r2, [r7, #52] ; 0x34 + 8001a76: e841 2300 strex r3, r2, [r1] + 8001a7a: 62fb str r3, [r7, #44] ; 0x2c + return(result); + 8001a7c: 6afb ldr r3, [r7, #44] ; 0x2c + 8001a7e: 2b00 cmp r3, #0 + 8001a80: d1e5 bne.n 8001a4e + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 8001a82: 68fb ldr r3, [r7, #12] + 8001a84: 681b ldr r3, [r3, #0] + 8001a86: 3314 adds r3, #20 + 8001a88: 617b str r3, [r7, #20] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8001a8a: 697b ldr r3, [r7, #20] + 8001a8c: e853 3f00 ldrex r3, [r3] + 8001a90: 613b str r3, [r7, #16] + return(result); + 8001a92: 693b ldr r3, [r7, #16] + 8001a94: f023 0301 bic.w r3, r3, #1 + 8001a98: 63bb str r3, [r7, #56] ; 0x38 + 8001a9a: 68fb ldr r3, [r7, #12] + 8001a9c: 681b ldr r3, [r3, #0] + 8001a9e: 3314 adds r3, #20 + 8001aa0: 6bba ldr r2, [r7, #56] ; 0x38 + 8001aa2: 623a str r2, [r7, #32] + 8001aa4: 61fb str r3, [r7, #28] + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8001aa6: 69f9 ldr r1, [r7, #28] + 8001aa8: 6a3a ldr r2, [r7, #32] + 8001aaa: e841 2300 strex r3, r2, [r1] + 8001aae: 61bb str r3, [r7, #24] + return(result); + 8001ab0: 69bb ldr r3, [r7, #24] + 8001ab2: 2b00 cmp r3, #0 + 8001ab4: d1e5 bne.n 8001a82 + + huart->gState = HAL_UART_STATE_READY; + 8001ab6: 68fb ldr r3, [r7, #12] + 8001ab8: 2220 movs r2, #32 + 8001aba: f883 203d strb.w r2, [r3, #61] ; 0x3d + huart->RxState = HAL_UART_STATE_READY; + 8001abe: 68fb ldr r3, [r7, #12] + 8001ac0: 2220 movs r2, #32 + 8001ac2: f883 203e strb.w r2, [r3, #62] ; 0x3e + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + 8001ac6: 68fb ldr r3, [r7, #12] + 8001ac8: 2200 movs r2, #0 + 8001aca: f883 203c strb.w r2, [r3, #60] ; 0x3c + + return HAL_TIMEOUT; + 8001ace: 2303 movs r3, #3 + 8001ad0: e00f b.n 8001af2 + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 8001ad2: 68fb ldr r3, [r7, #12] + 8001ad4: 681b ldr r3, [r3, #0] + 8001ad6: 681a ldr r2, [r3, #0] + 8001ad8: 68bb ldr r3, [r7, #8] + 8001ada: 4013 ands r3, r2 + 8001adc: 68ba ldr r2, [r7, #8] + 8001ade: 429a cmp r2, r3 + 8001ae0: bf0c ite eq + 8001ae2: 2301 moveq r3, #1 + 8001ae4: 2300 movne r3, #0 + 8001ae6: b2db uxtb r3, r3 + 8001ae8: 461a mov r2, r3 + 8001aea: 79fb ldrb r3, [r7, #7] + 8001aec: 429a cmp r2, r3 + 8001aee: d09f beq.n 8001a30 + } + } + } + return HAL_OK; + 8001af0: 2300 movs r3, #0 +} + 8001af2: 4618 mov r0, r3 + 8001af4: 3740 adds r7, #64 ; 0x40 + 8001af6: 46bd mov sp, r7 + 8001af8: bd80 pop {r7, pc} + ... + +08001afc : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +static void UART_SetConfig(UART_HandleTypeDef *huart) +{ + 8001afc: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} + 8001b00: b0c0 sub sp, #256 ; 0x100 + 8001b02: af00 add r7, sp, #0 + 8001b04: f8c7 00f4 str.w r0, [r7, #244] ; 0xf4 + assert_param(IS_UART_MODE(huart->Init.Mode)); + + /*-------------------------- USART CR2 Configuration -----------------------*/ + /* Configure the UART Stop Bits: Set STOP[13:12] bits + according to huart->Init.StopBits value */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); + 8001b08: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b0c: 681b ldr r3, [r3, #0] + 8001b0e: 691b ldr r3, [r3, #16] + 8001b10: f423 5040 bic.w r0, r3, #12288 ; 0x3000 + 8001b14: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b18: 68d9 ldr r1, [r3, #12] + 8001b1a: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b1e: 681a ldr r2, [r3, #0] + 8001b20: ea40 0301 orr.w r3, r0, r1 + 8001b24: 6113 str r3, [r2, #16] + Set the M bits according to huart->Init.WordLength value + Set PCE and PS bits according to huart->Init.Parity value + Set TE and RE bits according to huart->Init.Mode value + Set OVER8 bit according to huart->Init.OverSampling value */ + + tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; + 8001b26: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b2a: 689a ldr r2, [r3, #8] + 8001b2c: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b30: 691b ldr r3, [r3, #16] + 8001b32: 431a orrs r2, r3 + 8001b34: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b38: 695b ldr r3, [r3, #20] + 8001b3a: 431a orrs r2, r3 + 8001b3c: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b40: 69db ldr r3, [r3, #28] + 8001b42: 4313 orrs r3, r2 + 8001b44: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 + MODIFY_REG(huart->Instance->CR1, + 8001b48: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b4c: 681b ldr r3, [r3, #0] + 8001b4e: 68db ldr r3, [r3, #12] + 8001b50: f423 4116 bic.w r1, r3, #38400 ; 0x9600 + 8001b54: f021 010c bic.w r1, r1, #12 + 8001b58: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b5c: 681a ldr r2, [r3, #0] + 8001b5e: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 + 8001b62: 430b orrs r3, r1 + 8001b64: 60d3 str r3, [r2, #12] + (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), + tmpreg); + + /*-------------------------- USART CR3 Configuration -----------------------*/ + /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ + MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); + 8001b66: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b6a: 681b ldr r3, [r3, #0] + 8001b6c: 695b ldr r3, [r3, #20] + 8001b6e: f423 7040 bic.w r0, r3, #768 ; 0x300 + 8001b72: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b76: 6999 ldr r1, [r3, #24] + 8001b78: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b7c: 681a ldr r2, [r3, #0] + 8001b7e: ea40 0301 orr.w r3, r0, r1 + 8001b82: 6153 str r3, [r2, #20] + if ((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#elif defined(USART6) + if ((huart->Instance == USART1) || (huart->Instance == USART6)) + 8001b84: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b88: 681a ldr r2, [r3, #0] + 8001b8a: 4b8f ldr r3, [pc, #572] ; (8001dc8 ) + 8001b8c: 429a cmp r2, r3 + 8001b8e: d005 beq.n 8001b9c + 8001b90: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001b94: 681a ldr r2, [r3, #0] + 8001b96: 4b8d ldr r3, [pc, #564] ; (8001dcc ) + 8001b98: 429a cmp r2, r3 + 8001b9a: d104 bne.n 8001ba6 + { + pclk = HAL_RCC_GetPCLK2Freq(); + 8001b9c: f7ff fe3c bl 8001818 + 8001ba0: f8c7 00fc str.w r0, [r7, #252] ; 0xfc + 8001ba4: e003 b.n 8001bae + pclk = HAL_RCC_GetPCLK2Freq(); + } +#endif /* USART6 */ + else + { + pclk = HAL_RCC_GetPCLK1Freq(); + 8001ba6: f7ff fe23 bl 80017f0 + 8001baa: f8c7 00fc str.w r0, [r7, #252] ; 0xfc + } + /*-------------------------- USART BRR Configuration ---------------------*/ + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + 8001bae: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001bb2: 69db ldr r3, [r3, #28] + 8001bb4: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 8001bb8: f040 810c bne.w 8001dd4 + { + huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate); + 8001bbc: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001bc0: 2200 movs r2, #0 + 8001bc2: f8c7 30e8 str.w r3, [r7, #232] ; 0xe8 + 8001bc6: f8c7 20ec str.w r2, [r7, #236] ; 0xec + 8001bca: e9d7 453a ldrd r4, r5, [r7, #232] ; 0xe8 + 8001bce: 4622 mov r2, r4 + 8001bd0: 462b mov r3, r5 + 8001bd2: 1891 adds r1, r2, r2 + 8001bd4: 65b9 str r1, [r7, #88] ; 0x58 + 8001bd6: 415b adcs r3, r3 + 8001bd8: 65fb str r3, [r7, #92] ; 0x5c + 8001bda: e9d7 2316 ldrd r2, r3, [r7, #88] ; 0x58 + 8001bde: 4621 mov r1, r4 + 8001be0: eb12 0801 adds.w r8, r2, r1 + 8001be4: 4629 mov r1, r5 + 8001be6: eb43 0901 adc.w r9, r3, r1 + 8001bea: f04f 0200 mov.w r2, #0 + 8001bee: f04f 0300 mov.w r3, #0 + 8001bf2: ea4f 03c9 mov.w r3, r9, lsl #3 + 8001bf6: ea43 7358 orr.w r3, r3, r8, lsr #29 + 8001bfa: ea4f 02c8 mov.w r2, r8, lsl #3 + 8001bfe: 4690 mov r8, r2 + 8001c00: 4699 mov r9, r3 + 8001c02: 4623 mov r3, r4 + 8001c04: eb18 0303 adds.w r3, r8, r3 + 8001c08: f8c7 30e0 str.w r3, [r7, #224] ; 0xe0 + 8001c0c: 462b mov r3, r5 + 8001c0e: eb49 0303 adc.w r3, r9, r3 + 8001c12: f8c7 30e4 str.w r3, [r7, #228] ; 0xe4 + 8001c16: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001c1a: 685b ldr r3, [r3, #4] + 8001c1c: 2200 movs r2, #0 + 8001c1e: f8c7 30d8 str.w r3, [r7, #216] ; 0xd8 + 8001c22: f8c7 20dc str.w r2, [r7, #220] ; 0xdc + 8001c26: e9d7 1236 ldrd r1, r2, [r7, #216] ; 0xd8 + 8001c2a: 460b mov r3, r1 + 8001c2c: 18db adds r3, r3, r3 + 8001c2e: 653b str r3, [r7, #80] ; 0x50 + 8001c30: 4613 mov r3, r2 + 8001c32: eb42 0303 adc.w r3, r2, r3 + 8001c36: 657b str r3, [r7, #84] ; 0x54 + 8001c38: e9d7 2314 ldrd r2, r3, [r7, #80] ; 0x50 + 8001c3c: e9d7 0138 ldrd r0, r1, [r7, #224] ; 0xe0 + 8001c40: f7fe faca bl 80001d8 <__aeabi_uldivmod> + 8001c44: 4602 mov r2, r0 + 8001c46: 460b mov r3, r1 + 8001c48: 4b61 ldr r3, [pc, #388] ; (8001dd0 ) + 8001c4a: fba3 2302 umull r2, r3, r3, r2 + 8001c4e: 095b lsrs r3, r3, #5 + 8001c50: 011c lsls r4, r3, #4 + 8001c52: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001c56: 2200 movs r2, #0 + 8001c58: f8c7 30d0 str.w r3, [r7, #208] ; 0xd0 + 8001c5c: f8c7 20d4 str.w r2, [r7, #212] ; 0xd4 + 8001c60: e9d7 8934 ldrd r8, r9, [r7, #208] ; 0xd0 + 8001c64: 4642 mov r2, r8 + 8001c66: 464b mov r3, r9 + 8001c68: 1891 adds r1, r2, r2 + 8001c6a: 64b9 str r1, [r7, #72] ; 0x48 + 8001c6c: 415b adcs r3, r3 + 8001c6e: 64fb str r3, [r7, #76] ; 0x4c + 8001c70: e9d7 2312 ldrd r2, r3, [r7, #72] ; 0x48 + 8001c74: 4641 mov r1, r8 + 8001c76: eb12 0a01 adds.w sl, r2, r1 + 8001c7a: 4649 mov r1, r9 + 8001c7c: eb43 0b01 adc.w fp, r3, r1 + 8001c80: f04f 0200 mov.w r2, #0 + 8001c84: f04f 0300 mov.w r3, #0 + 8001c88: ea4f 03cb mov.w r3, fp, lsl #3 + 8001c8c: ea43 735a orr.w r3, r3, sl, lsr #29 + 8001c90: ea4f 02ca mov.w r2, sl, lsl #3 + 8001c94: 4692 mov sl, r2 + 8001c96: 469b mov fp, r3 + 8001c98: 4643 mov r3, r8 + 8001c9a: eb1a 0303 adds.w r3, sl, r3 + 8001c9e: f8c7 30c8 str.w r3, [r7, #200] ; 0xc8 + 8001ca2: 464b mov r3, r9 + 8001ca4: eb4b 0303 adc.w r3, fp, r3 + 8001ca8: f8c7 30cc str.w r3, [r7, #204] ; 0xcc + 8001cac: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001cb0: 685b ldr r3, [r3, #4] + 8001cb2: 2200 movs r2, #0 + 8001cb4: f8c7 30c0 str.w r3, [r7, #192] ; 0xc0 + 8001cb8: f8c7 20c4 str.w r2, [r7, #196] ; 0xc4 + 8001cbc: e9d7 1230 ldrd r1, r2, [r7, #192] ; 0xc0 + 8001cc0: 460b mov r3, r1 + 8001cc2: 18db adds r3, r3, r3 + 8001cc4: 643b str r3, [r7, #64] ; 0x40 + 8001cc6: 4613 mov r3, r2 + 8001cc8: eb42 0303 adc.w r3, r2, r3 + 8001ccc: 647b str r3, [r7, #68] ; 0x44 + 8001cce: e9d7 2310 ldrd r2, r3, [r7, #64] ; 0x40 + 8001cd2: e9d7 0132 ldrd r0, r1, [r7, #200] ; 0xc8 + 8001cd6: f7fe fa7f bl 80001d8 <__aeabi_uldivmod> + 8001cda: 4602 mov r2, r0 + 8001cdc: 460b mov r3, r1 + 8001cde: 4611 mov r1, r2 + 8001ce0: 4b3b ldr r3, [pc, #236] ; (8001dd0 ) + 8001ce2: fba3 2301 umull r2, r3, r3, r1 + 8001ce6: 095b lsrs r3, r3, #5 + 8001ce8: 2264 movs r2, #100 ; 0x64 + 8001cea: fb02 f303 mul.w r3, r2, r3 + 8001cee: 1acb subs r3, r1, r3 + 8001cf0: 00db lsls r3, r3, #3 + 8001cf2: f103 0232 add.w r2, r3, #50 ; 0x32 + 8001cf6: 4b36 ldr r3, [pc, #216] ; (8001dd0 ) + 8001cf8: fba3 2302 umull r2, r3, r3, r2 + 8001cfc: 095b lsrs r3, r3, #5 + 8001cfe: 005b lsls r3, r3, #1 + 8001d00: f403 73f8 and.w r3, r3, #496 ; 0x1f0 + 8001d04: 441c add r4, r3 + 8001d06: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001d0a: 2200 movs r2, #0 + 8001d0c: f8c7 30b8 str.w r3, [r7, #184] ; 0xb8 + 8001d10: f8c7 20bc str.w r2, [r7, #188] ; 0xbc + 8001d14: e9d7 892e ldrd r8, r9, [r7, #184] ; 0xb8 + 8001d18: 4642 mov r2, r8 + 8001d1a: 464b mov r3, r9 + 8001d1c: 1891 adds r1, r2, r2 + 8001d1e: 63b9 str r1, [r7, #56] ; 0x38 + 8001d20: 415b adcs r3, r3 + 8001d22: 63fb str r3, [r7, #60] ; 0x3c + 8001d24: e9d7 230e ldrd r2, r3, [r7, #56] ; 0x38 + 8001d28: 4641 mov r1, r8 + 8001d2a: 1851 adds r1, r2, r1 + 8001d2c: 6339 str r1, [r7, #48] ; 0x30 + 8001d2e: 4649 mov r1, r9 + 8001d30: 414b adcs r3, r1 + 8001d32: 637b str r3, [r7, #52] ; 0x34 + 8001d34: f04f 0200 mov.w r2, #0 + 8001d38: f04f 0300 mov.w r3, #0 + 8001d3c: e9d7 ab0c ldrd sl, fp, [r7, #48] ; 0x30 + 8001d40: 4659 mov r1, fp + 8001d42: 00cb lsls r3, r1, #3 + 8001d44: 4651 mov r1, sl + 8001d46: ea43 7351 orr.w r3, r3, r1, lsr #29 + 8001d4a: 4651 mov r1, sl + 8001d4c: 00ca lsls r2, r1, #3 + 8001d4e: 4610 mov r0, r2 + 8001d50: 4619 mov r1, r3 + 8001d52: 4603 mov r3, r0 + 8001d54: 4642 mov r2, r8 + 8001d56: 189b adds r3, r3, r2 + 8001d58: f8c7 30b0 str.w r3, [r7, #176] ; 0xb0 + 8001d5c: 464b mov r3, r9 + 8001d5e: 460a mov r2, r1 + 8001d60: eb42 0303 adc.w r3, r2, r3 + 8001d64: f8c7 30b4 str.w r3, [r7, #180] ; 0xb4 + 8001d68: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001d6c: 685b ldr r3, [r3, #4] + 8001d6e: 2200 movs r2, #0 + 8001d70: f8c7 30a8 str.w r3, [r7, #168] ; 0xa8 + 8001d74: f8c7 20ac str.w r2, [r7, #172] ; 0xac + 8001d78: e9d7 122a ldrd r1, r2, [r7, #168] ; 0xa8 + 8001d7c: 460b mov r3, r1 + 8001d7e: 18db adds r3, r3, r3 + 8001d80: 62bb str r3, [r7, #40] ; 0x28 + 8001d82: 4613 mov r3, r2 + 8001d84: eb42 0303 adc.w r3, r2, r3 + 8001d88: 62fb str r3, [r7, #44] ; 0x2c + 8001d8a: e9d7 230a ldrd r2, r3, [r7, #40] ; 0x28 + 8001d8e: e9d7 012c ldrd r0, r1, [r7, #176] ; 0xb0 + 8001d92: f7fe fa21 bl 80001d8 <__aeabi_uldivmod> + 8001d96: 4602 mov r2, r0 + 8001d98: 460b mov r3, r1 + 8001d9a: 4b0d ldr r3, [pc, #52] ; (8001dd0 ) + 8001d9c: fba3 1302 umull r1, r3, r3, r2 + 8001da0: 095b lsrs r3, r3, #5 + 8001da2: 2164 movs r1, #100 ; 0x64 + 8001da4: fb01 f303 mul.w r3, r1, r3 + 8001da8: 1ad3 subs r3, r2, r3 + 8001daa: 00db lsls r3, r3, #3 + 8001dac: 3332 adds r3, #50 ; 0x32 + 8001dae: 4a08 ldr r2, [pc, #32] ; (8001dd0 ) + 8001db0: fba2 2303 umull r2, r3, r2, r3 + 8001db4: 095b lsrs r3, r3, #5 + 8001db6: f003 0207 and.w r2, r3, #7 + 8001dba: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001dbe: 681b ldr r3, [r3, #0] + 8001dc0: 4422 add r2, r4 + 8001dc2: 609a str r2, [r3, #8] + } + else + { + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + } +} + 8001dc4: e106 b.n 8001fd4 + 8001dc6: bf00 nop + 8001dc8: 40011000 .word 0x40011000 + 8001dcc: 40011400 .word 0x40011400 + 8001dd0: 51eb851f .word 0x51eb851f + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + 8001dd4: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001dd8: 2200 movs r2, #0 + 8001dda: f8c7 30a0 str.w r3, [r7, #160] ; 0xa0 + 8001dde: f8c7 20a4 str.w r2, [r7, #164] ; 0xa4 + 8001de2: e9d7 8928 ldrd r8, r9, [r7, #160] ; 0xa0 + 8001de6: 4642 mov r2, r8 + 8001de8: 464b mov r3, r9 + 8001dea: 1891 adds r1, r2, r2 + 8001dec: 6239 str r1, [r7, #32] + 8001dee: 415b adcs r3, r3 + 8001df0: 627b str r3, [r7, #36] ; 0x24 + 8001df2: e9d7 2308 ldrd r2, r3, [r7, #32] + 8001df6: 4641 mov r1, r8 + 8001df8: 1854 adds r4, r2, r1 + 8001dfa: 4649 mov r1, r9 + 8001dfc: eb43 0501 adc.w r5, r3, r1 + 8001e00: f04f 0200 mov.w r2, #0 + 8001e04: f04f 0300 mov.w r3, #0 + 8001e08: 00eb lsls r3, r5, #3 + 8001e0a: ea43 7354 orr.w r3, r3, r4, lsr #29 + 8001e0e: 00e2 lsls r2, r4, #3 + 8001e10: 4614 mov r4, r2 + 8001e12: 461d mov r5, r3 + 8001e14: 4643 mov r3, r8 + 8001e16: 18e3 adds r3, r4, r3 + 8001e18: f8c7 3098 str.w r3, [r7, #152] ; 0x98 + 8001e1c: 464b mov r3, r9 + 8001e1e: eb45 0303 adc.w r3, r5, r3 + 8001e22: f8c7 309c str.w r3, [r7, #156] ; 0x9c + 8001e26: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001e2a: 685b ldr r3, [r3, #4] + 8001e2c: 2200 movs r2, #0 + 8001e2e: f8c7 3090 str.w r3, [r7, #144] ; 0x90 + 8001e32: f8c7 2094 str.w r2, [r7, #148] ; 0x94 + 8001e36: f04f 0200 mov.w r2, #0 + 8001e3a: f04f 0300 mov.w r3, #0 + 8001e3e: e9d7 4524 ldrd r4, r5, [r7, #144] ; 0x90 + 8001e42: 4629 mov r1, r5 + 8001e44: 008b lsls r3, r1, #2 + 8001e46: 4621 mov r1, r4 + 8001e48: ea43 7391 orr.w r3, r3, r1, lsr #30 + 8001e4c: 4621 mov r1, r4 + 8001e4e: 008a lsls r2, r1, #2 + 8001e50: e9d7 0126 ldrd r0, r1, [r7, #152] ; 0x98 + 8001e54: f7fe f9c0 bl 80001d8 <__aeabi_uldivmod> + 8001e58: 4602 mov r2, r0 + 8001e5a: 460b mov r3, r1 + 8001e5c: 4b60 ldr r3, [pc, #384] ; (8001fe0 ) + 8001e5e: fba3 2302 umull r2, r3, r3, r2 + 8001e62: 095b lsrs r3, r3, #5 + 8001e64: 011c lsls r4, r3, #4 + 8001e66: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001e6a: 2200 movs r2, #0 + 8001e6c: f8c7 3088 str.w r3, [r7, #136] ; 0x88 + 8001e70: f8c7 208c str.w r2, [r7, #140] ; 0x8c + 8001e74: e9d7 8922 ldrd r8, r9, [r7, #136] ; 0x88 + 8001e78: 4642 mov r2, r8 + 8001e7a: 464b mov r3, r9 + 8001e7c: 1891 adds r1, r2, r2 + 8001e7e: 61b9 str r1, [r7, #24] + 8001e80: 415b adcs r3, r3 + 8001e82: 61fb str r3, [r7, #28] + 8001e84: e9d7 2306 ldrd r2, r3, [r7, #24] + 8001e88: 4641 mov r1, r8 + 8001e8a: 1851 adds r1, r2, r1 + 8001e8c: 6139 str r1, [r7, #16] + 8001e8e: 4649 mov r1, r9 + 8001e90: 414b adcs r3, r1 + 8001e92: 617b str r3, [r7, #20] + 8001e94: f04f 0200 mov.w r2, #0 + 8001e98: f04f 0300 mov.w r3, #0 + 8001e9c: e9d7 ab04 ldrd sl, fp, [r7, #16] + 8001ea0: 4659 mov r1, fp + 8001ea2: 00cb lsls r3, r1, #3 + 8001ea4: 4651 mov r1, sl + 8001ea6: ea43 7351 orr.w r3, r3, r1, lsr #29 + 8001eaa: 4651 mov r1, sl + 8001eac: 00ca lsls r2, r1, #3 + 8001eae: 4610 mov r0, r2 + 8001eb0: 4619 mov r1, r3 + 8001eb2: 4603 mov r3, r0 + 8001eb4: 4642 mov r2, r8 + 8001eb6: 189b adds r3, r3, r2 + 8001eb8: f8c7 3080 str.w r3, [r7, #128] ; 0x80 + 8001ebc: 464b mov r3, r9 + 8001ebe: 460a mov r2, r1 + 8001ec0: eb42 0303 adc.w r3, r2, r3 + 8001ec4: f8c7 3084 str.w r3, [r7, #132] ; 0x84 + 8001ec8: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001ecc: 685b ldr r3, [r3, #4] + 8001ece: 2200 movs r2, #0 + 8001ed0: 67bb str r3, [r7, #120] ; 0x78 + 8001ed2: 67fa str r2, [r7, #124] ; 0x7c + 8001ed4: f04f 0200 mov.w r2, #0 + 8001ed8: f04f 0300 mov.w r3, #0 + 8001edc: e9d7 891e ldrd r8, r9, [r7, #120] ; 0x78 + 8001ee0: 4649 mov r1, r9 + 8001ee2: 008b lsls r3, r1, #2 + 8001ee4: 4641 mov r1, r8 + 8001ee6: ea43 7391 orr.w r3, r3, r1, lsr #30 + 8001eea: 4641 mov r1, r8 + 8001eec: 008a lsls r2, r1, #2 + 8001eee: e9d7 0120 ldrd r0, r1, [r7, #128] ; 0x80 + 8001ef2: f7fe f971 bl 80001d8 <__aeabi_uldivmod> + 8001ef6: 4602 mov r2, r0 + 8001ef8: 460b mov r3, r1 + 8001efa: 4611 mov r1, r2 + 8001efc: 4b38 ldr r3, [pc, #224] ; (8001fe0 ) + 8001efe: fba3 2301 umull r2, r3, r3, r1 + 8001f02: 095b lsrs r3, r3, #5 + 8001f04: 2264 movs r2, #100 ; 0x64 + 8001f06: fb02 f303 mul.w r3, r2, r3 + 8001f0a: 1acb subs r3, r1, r3 + 8001f0c: 011b lsls r3, r3, #4 + 8001f0e: 3332 adds r3, #50 ; 0x32 + 8001f10: 4a33 ldr r2, [pc, #204] ; (8001fe0 ) + 8001f12: fba2 2303 umull r2, r3, r2, r3 + 8001f16: 095b lsrs r3, r3, #5 + 8001f18: f003 03f0 and.w r3, r3, #240 ; 0xf0 + 8001f1c: 441c add r4, r3 + 8001f1e: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc + 8001f22: 2200 movs r2, #0 + 8001f24: 673b str r3, [r7, #112] ; 0x70 + 8001f26: 677a str r2, [r7, #116] ; 0x74 + 8001f28: e9d7 891c ldrd r8, r9, [r7, #112] ; 0x70 + 8001f2c: 4642 mov r2, r8 + 8001f2e: 464b mov r3, r9 + 8001f30: 1891 adds r1, r2, r2 + 8001f32: 60b9 str r1, [r7, #8] + 8001f34: 415b adcs r3, r3 + 8001f36: 60fb str r3, [r7, #12] + 8001f38: e9d7 2302 ldrd r2, r3, [r7, #8] + 8001f3c: 4641 mov r1, r8 + 8001f3e: 1851 adds r1, r2, r1 + 8001f40: 6039 str r1, [r7, #0] + 8001f42: 4649 mov r1, r9 + 8001f44: 414b adcs r3, r1 + 8001f46: 607b str r3, [r7, #4] + 8001f48: f04f 0200 mov.w r2, #0 + 8001f4c: f04f 0300 mov.w r3, #0 + 8001f50: e9d7 ab00 ldrd sl, fp, [r7] + 8001f54: 4659 mov r1, fp + 8001f56: 00cb lsls r3, r1, #3 + 8001f58: 4651 mov r1, sl + 8001f5a: ea43 7351 orr.w r3, r3, r1, lsr #29 + 8001f5e: 4651 mov r1, sl + 8001f60: 00ca lsls r2, r1, #3 + 8001f62: 4610 mov r0, r2 + 8001f64: 4619 mov r1, r3 + 8001f66: 4603 mov r3, r0 + 8001f68: 4642 mov r2, r8 + 8001f6a: 189b adds r3, r3, r2 + 8001f6c: 66bb str r3, [r7, #104] ; 0x68 + 8001f6e: 464b mov r3, r9 + 8001f70: 460a mov r2, r1 + 8001f72: eb42 0303 adc.w r3, r2, r3 + 8001f76: 66fb str r3, [r7, #108] ; 0x6c + 8001f78: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001f7c: 685b ldr r3, [r3, #4] + 8001f7e: 2200 movs r2, #0 + 8001f80: 663b str r3, [r7, #96] ; 0x60 + 8001f82: 667a str r2, [r7, #100] ; 0x64 + 8001f84: f04f 0200 mov.w r2, #0 + 8001f88: f04f 0300 mov.w r3, #0 + 8001f8c: e9d7 8918 ldrd r8, r9, [r7, #96] ; 0x60 + 8001f90: 4649 mov r1, r9 + 8001f92: 008b lsls r3, r1, #2 + 8001f94: 4641 mov r1, r8 + 8001f96: ea43 7391 orr.w r3, r3, r1, lsr #30 + 8001f9a: 4641 mov r1, r8 + 8001f9c: 008a lsls r2, r1, #2 + 8001f9e: e9d7 011a ldrd r0, r1, [r7, #104] ; 0x68 + 8001fa2: f7fe f919 bl 80001d8 <__aeabi_uldivmod> + 8001fa6: 4602 mov r2, r0 + 8001fa8: 460b mov r3, r1 + 8001faa: 4b0d ldr r3, [pc, #52] ; (8001fe0 ) + 8001fac: fba3 1302 umull r1, r3, r3, r2 + 8001fb0: 095b lsrs r3, r3, #5 + 8001fb2: 2164 movs r1, #100 ; 0x64 + 8001fb4: fb01 f303 mul.w r3, r1, r3 + 8001fb8: 1ad3 subs r3, r2, r3 + 8001fba: 011b lsls r3, r3, #4 + 8001fbc: 3332 adds r3, #50 ; 0x32 + 8001fbe: 4a08 ldr r2, [pc, #32] ; (8001fe0 ) + 8001fc0: fba2 2303 umull r2, r3, r2, r3 + 8001fc4: 095b lsrs r3, r3, #5 + 8001fc6: f003 020f and.w r2, r3, #15 + 8001fca: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 + 8001fce: 681b ldr r3, [r3, #0] + 8001fd0: 4422 add r2, r4 + 8001fd2: 609a str r2, [r3, #8] +} + 8001fd4: bf00 nop + 8001fd6: f507 7780 add.w r7, r7, #256 ; 0x100 + 8001fda: 46bd mov sp, r7 + 8001fdc: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} + 8001fe0: 51eb851f .word 0x51eb851f + +08001fe4 : + 8001fe4: 4402 add r2, r0 + 8001fe6: 4603 mov r3, r0 + 8001fe8: 4293 cmp r3, r2 + 8001fea: d100 bne.n 8001fee + 8001fec: 4770 bx lr + 8001fee: f803 1b01 strb.w r1, [r3], #1 + 8001ff2: e7f9 b.n 8001fe8 + +08001ff4 <__libc_init_array>: + 8001ff4: b570 push {r4, r5, r6, lr} + 8001ff6: 4d0d ldr r5, [pc, #52] ; (800202c <__libc_init_array+0x38>) + 8001ff8: 4c0d ldr r4, [pc, #52] ; (8002030 <__libc_init_array+0x3c>) + 8001ffa: 1b64 subs r4, r4, r5 + 8001ffc: 10a4 asrs r4, r4, #2 + 8001ffe: 2600 movs r6, #0 + 8002000: 42a6 cmp r6, r4 + 8002002: d109 bne.n 8002018 <__libc_init_array+0x24> + 8002004: 4d0b ldr r5, [pc, #44] ; (8002034 <__libc_init_array+0x40>) + 8002006: 4c0c ldr r4, [pc, #48] ; (8002038 <__libc_init_array+0x44>) + 8002008: f000 f818 bl 800203c <_init> + 800200c: 1b64 subs r4, r4, r5 + 800200e: 10a4 asrs r4, r4, #2 + 8002010: 2600 movs r6, #0 + 8002012: 42a6 cmp r6, r4 + 8002014: d105 bne.n 8002022 <__libc_init_array+0x2e> + 8002016: bd70 pop {r4, r5, r6, pc} + 8002018: f855 3b04 ldr.w r3, [r5], #4 + 800201c: 4798 blx r3 + 800201e: 3601 adds r6, #1 + 8002020: e7ee b.n 8002000 <__libc_init_array+0xc> + 8002022: f855 3b04 ldr.w r3, [r5], #4 + 8002026: 4798 blx r3 + 8002028: 3601 adds r6, #1 + 800202a: e7f2 b.n 8002012 <__libc_init_array+0x1e> + 800202c: 08002074 .word 0x08002074 + 8002030: 08002074 .word 0x08002074 + 8002034: 08002074 .word 0x08002074 + 8002038: 08002078 .word 0x08002078 + +0800203c <_init>: + 800203c: b5f8 push {r3, r4, r5, r6, r7, lr} + 800203e: bf00 nop + 8002040: bcf8 pop {r3, r4, r5, r6, r7} + 8002042: bc08 pop {r3} + 8002044: 469e mov lr, r3 + 8002046: 4770 bx lr + +08002048 <_fini>: + 8002048: b5f8 push {r3, r4, r5, r6, r7, lr} + 800204a: bf00 nop + 800204c: bcf8 pop {r3, r4, r5, r6, r7} + 800204e: bc08 pop {r3} + 8002050: 469e mov lr, r3 + 8002052: 4770 bx lr diff --git a/access_control_stm32/Debug/access_control_stm32.map b/access_control_stm32/Debug/access_control_stm32.map new file mode 100644 index 0000000..d20a242 --- /dev/null +++ b/access_control_stm32/Debug/access_control_stm32.map @@ -0,0 +1,3273 @@ +Archive member included to satisfy reference by file (symbol) + +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (exit) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) (__stdio_exit_handler) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (_fwalk_sglue) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (__sread) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (memset) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_close_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) (errno) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) (_impure_ptr) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_lseek_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_read_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) (_write_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + ./Core/Src/syscalls.o (__errno) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o (__libc_init_array) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (__retarget_lock_init_recursive) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) (_free_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (_malloc_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) (__malloc_lock) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) (_fflush_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) (_sbrk_r) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o (__aeabi_uldivmod) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) (__udivmoddi4) +C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) (__aeabi_ldiv0) + +Discarded input sections + + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .data 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .rodata 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x0000000000000000 0x7c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.extab 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.exidx 0x0000000000000000 0x10 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_line 0x0000000000000000 0x76 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_line_str + 0x0000000000000000 0xdd C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_info 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_abbrev 0x0000000000000000 0x14 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_aranges + 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .debug_str 0x0000000000000000 0xe2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .ARM.attributes + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/main.o + .text 0x0000000000000000 0x0 ./Core/Src/main.o + .data 0x0000000000000000 0x0 ./Core/Src/main.o + .bss 0x0000000000000000 0x0 ./Core/Src/main.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_hal_msp.o + .text 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .data 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .bss 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_hal_msp.o + .text.HAL_UART_MspDeInit + 0x0000000000000000 0x3c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0xaa8 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0xd9 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x102d ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x11f ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0xb953 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x6d ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x367e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x5c ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x447 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x9fe ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x115 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x11b ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x15f ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x287 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x5f ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x236 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x132 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x264 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x11a ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x85 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x89 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x126 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000000000 0x58 ./Core/Src/stm32f4xx_hal_msp.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/stm32f4xx_it.o + .text 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_it.o + .data 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_it.o + .bss 0x0000000000000000 0x0 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0xaa8 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0xd9 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x102d ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x11f ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0xb953 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x6d ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x367e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x5c ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x447 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x9fe ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x115 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x11b ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x15f ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x287 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x5f ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x236 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x132 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x264 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x11a ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x85 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x89 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x126 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x0000000000000000 0x58 ./Core/Src/stm32f4xx_it.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/syscalls.o + .text 0x0000000000000000 0x0 ./Core/Src/syscalls.o + .data 0x0000000000000000 0x0 ./Core/Src/syscalls.o + .bss 0x0000000000000000 0x0 ./Core/Src/syscalls.o + .bss.__env 0x0000000000000000 0x4 ./Core/Src/syscalls.o + .data.environ 0x0000000000000000 0x4 ./Core/Src/syscalls.o + .text.initialise_monitor_handles + 0x0000000000000000 0xe ./Core/Src/syscalls.o + .text._getpid 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .text._kill 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._exit 0x0000000000000000 0x14 ./Core/Src/syscalls.o + .text._read 0x0000000000000000 0x3a ./Core/Src/syscalls.o + .text._write 0x0000000000000000 0x38 ./Core/Src/syscalls.o + .text._close 0x0000000000000000 0x18 ./Core/Src/syscalls.o + .text._fstat 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._isatty 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .text._lseek 0x0000000000000000 0x1a ./Core/Src/syscalls.o + .text._open 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .text._wait 0x0000000000000000 0x1e ./Core/Src/syscalls.o + .text._unlink 0x0000000000000000 0x1e ./Core/Src/syscalls.o + .text._times 0x0000000000000000 0x18 ./Core/Src/syscalls.o + .text._stat 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._link 0x0000000000000000 0x20 ./Core/Src/syscalls.o + .text._fork 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .text._execve 0x0000000000000000 0x22 ./Core/Src/syscalls.o + .debug_info 0x0000000000000000 0x6a3 ./Core/Src/syscalls.o + .debug_abbrev 0x0000000000000000 0x1b6 ./Core/Src/syscalls.o + .debug_aranges + 0x0000000000000000 0xa8 ./Core/Src/syscalls.o + .debug_rnglists + 0x0000000000000000 0x79 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x274 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0xaa8 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x5b ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x2a ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x94 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x57 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x369 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x58 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x177 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x35 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x52 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x52 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0xcf ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x3d ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x35 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x12c ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x29 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x242 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x147 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x18a ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/syscalls.o + .debug_macro 0x0000000000000000 0xce ./Core/Src/syscalls.o + .debug_line 0x0000000000000000 0x8a8 ./Core/Src/syscalls.o + .debug_str 0x0000000000000000 0x98b5 ./Core/Src/syscalls.o + .comment 0x0000000000000000 0x44 ./Core/Src/syscalls.o + .debug_frame 0x0000000000000000 0x2ac ./Core/Src/syscalls.o + .ARM.attributes + 0x0000000000000000 0x34 ./Core/Src/syscalls.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/sysmem.o + .text 0x0000000000000000 0x0 ./Core/Src/sysmem.o + .data 0x0000000000000000 0x0 ./Core/Src/sysmem.o + .bss 0x0000000000000000 0x0 ./Core/Src/sysmem.o + .bss.__sbrk_heap_end + 0x0000000000000000 0x4 ./Core/Src/sysmem.o + .text._sbrk 0x0000000000000000 0x6c ./Core/Src/sysmem.o + .debug_info 0x0000000000000000 0x168 ./Core/Src/sysmem.o + .debug_abbrev 0x0000000000000000 0xbc ./Core/Src/sysmem.o + .debug_aranges + 0x0000000000000000 0x20 ./Core/Src/sysmem.o + .debug_rnglists + 0x0000000000000000 0x13 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0xff ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0xaa8 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x5b ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x2a ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x94 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x16 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x43 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x57 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x34 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x10 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x58 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x177 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x23c ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/sysmem.o + .debug_line 0x0000000000000000 0x579 ./Core/Src/sysmem.o + .debug_str 0x0000000000000000 0x606c ./Core/Src/sysmem.o + .comment 0x0000000000000000 0x44 ./Core/Src/sysmem.o + .debug_frame 0x0000000000000000 0x34 ./Core/Src/sysmem.o + .ARM.attributes + 0x0000000000000000 0x34 ./Core/Src/sysmem.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .group 0x0000000000000000 0xc ./Core/Src/system_stm32f4xx.o + .text 0x0000000000000000 0x0 ./Core/Src/system_stm32f4xx.o + .data 0x0000000000000000 0x0 ./Core/Src/system_stm32f4xx.o + .bss 0x0000000000000000 0x0 ./Core/Src/system_stm32f4xx.o + .text.SystemCoreClockUpdate + 0x0000000000000000 0x100 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0xaa8 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x28 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x8e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x51 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x103 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x6a ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x1df ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x1c ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x22 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0xd9 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x102d ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x11f ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0xb953 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x6d ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x367e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x174 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x5c ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x447 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x9fe ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x115 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x11b ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0xa5 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x15f ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x287 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x5f ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x236 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x132 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x264 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x2e ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x11a ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x85 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x89 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x295 ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000000000 0x126 ./Core/Src/system_stm32f4xx.o + .text 0x0000000000000000 0x14 ./Core/Startup/startup_stm32f411retx.o + .data 0x0000000000000000 0x0 ./Core/Startup/startup_stm32f411retx.o + .bss 0x0000000000000000 0x0 ./Core/Startup/startup_stm32f411retx.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DeInit + 0x0000000000000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspInit + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_MspDeInit + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickPrio + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SetTickFreq + 0x0000000000000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetTickFreq + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_Delay + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_SuspendTick + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_ResumeTick + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetHalVersion + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetREVID + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetDEVID + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGSleepMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGSleepMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStopMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStopMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_EnableDBGStandbyMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DBGMCU_DisableDBGStandbyMode + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_EnableCompensationCell + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_DisableCompensationCell + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw0 + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw1 + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .text.HAL_GetUIDw2 + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_EnableIRQ + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_DisableIRQ + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPendingIRQ + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SetPendingIRQ + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_ClearPendingIRQ + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetActive + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPriority + 0x0000000000000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.NVIC_DecodePriority + 0x0000000000000000 0x6e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SystemReset + 0x0000000000000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_EnableIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_DisableIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SystemReset + 0x0000000000000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Disable + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_Enable + 0x0000000000000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_MPU_ConfigRegion + 0x0000000000000000 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriorityGrouping + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPriority + 0x0000000000000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SetPendingIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetPendingIRQ + 0x0000000000000000 0x1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_ClearPendingIRQ + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_GetActive + 0x0000000000000000 0x1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_CLKSourceConfig + 0x0000000000000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_IRQHandler + 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_SYSTICK_Callback + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Init + 0x0000000000000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_DeInit + 0x0000000000000000 0xbc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Start + 0x0000000000000000 0x76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Start_IT + 0x0000000000000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Abort + 0x0000000000000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_Abort_IT + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_PollForTransfer + 0x0000000000000000 0x1be ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_IRQHandler + 0x0000000000000000 0x314 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_RegisterCallback + 0x0000000000000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_UnRegisterCallback + 0x0000000000000000 0xd4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetState + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.HAL_DMA_GetError + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_SetConfig + 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_CalcBaseAndBitshift + 0x0000000000000000 0x6c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .text.DMA_CheckFifoParam + 0x0000000000000000 0xf8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .rodata.flagBitshiftOffset.0 + 0x0000000000000000 0x8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_info 0x0000000000000000 0x8e6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_abbrev 0x0000000000000000 0x221 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_aranges + 0x0000000000000000 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_rnglists + 0x0000000000000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_line 0x0000000000000000 0xf61 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_str 0x0000000000000000 0x7ff25 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .debug_frame 0x0000000000000000 0x250 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart + 0x0000000000000000 0x96 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_MultiBufferStart_IT + 0x0000000000000000 0x1290 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.HAL_DMAEx_ChangeMemory + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .text.DMA_MultiBufferSetConfig + 0x0000000000000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_info 0x0000000000000000 0x4fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_abbrev 0x0000000000000000 0x16e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_aranges + 0x0000000000000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_rnglists + 0x0000000000000000 0x27 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_line 0x0000000000000000 0x1390 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_str 0x0000000000000000 0x7fcdf ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .debug_frame 0x0000000000000000 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_SetConfigLine + 0x0000000000000000 0x150 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetConfigLine + 0x0000000000000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearConfigLine + 0x0000000000000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_RegisterCallback + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetHandle + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_IRQHandler + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GetPending + 0x0000000000000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_ClearPending + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .text.HAL_EXTI_GenerateSWI + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_info 0x0000000000000000 0x503 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_abbrev 0x0000000000000000 0x1d1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_aranges + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_rnglists + 0x0000000000000000 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_line 0x0000000000000000 0x9ec ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_str 0x0000000000000000 0x7fb77 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .debug_frame 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .bss.pFlash 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program + 0x0000000000000000 0xa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Program_IT + 0x0000000000000000 0x9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_IRQHandler + 0x0000000000000000 0x140 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_EndOfOperationCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OperationErrorCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Unlock + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_Lock + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Unlock + 0x0000000000000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Lock + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_OB_Launch + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.HAL_FLASH_GetError + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_WaitForLastOperation + 0x0000000000000000 0x80 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_DoubleWord + 0x0000000000000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_Word + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_HalfWord + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_Program_Byte + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .text.FLASH_SetErrorCode + 0x0000000000000000 0xcc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_info 0x0000000000000000 0x58c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_abbrev 0x0000000000000000 0x28d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_aranges + 0x0000000000000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_rnglists + 0x0000000000000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_line 0x0000000000000000 0xa9c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_str 0x0000000000000000 0x7fcfb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .debug_frame 0x0000000000000000 0x274 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase + 0x0000000000000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_Erase_IT + 0x0000000000000000 0xac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBProgram + 0x0000000000000000 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OBGetConfig + 0x0000000000000000 0x46 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBProgram + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_AdvOBGetConfig + 0x0000000000000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_SelectPCROP + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.HAL_FLASHEx_OB_DeSelectPCROP + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_MassErase + 0x0000000000000000 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_Erase_Sector + 0x0000000000000000 0x90 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_EnableWRP + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_DisableWRP + 0x0000000000000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_EnablePCROP + 0x0000000000000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_DisablePCROP + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_RDP_LevelConfig + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_UserConfig + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_BOR_LevelConfig + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetUser + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetWRP + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetRDP + 0x0000000000000000 0x40 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_OB_GetBOR + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .text.FLASH_FlushCaches + 0x0000000000000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_info 0x0000000000000000 0x7db ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_abbrev 0x0000000000000000 0x26e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_aranges + 0x0000000000000000 0xc8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_rnglists + 0x0000000000000000 0x96 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_line 0x0000000000000000 0xba1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_str 0x0000000000000000 0x7fe1e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .debug_frame 0x0000000000000000 0x334 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .RamFunc 0x0000000000000000 0x110 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_info 0x0000000000000000 0x364 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_abbrev 0x0000000000000000 0x10e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_aranges + 0x0000000000000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_rnglists + 0x0000000000000000 0x25 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_line 0x0000000000000000 0x758 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_str 0x0000000000000000 0x7fb45 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .debug_frame 0x0000000000000000 0xb0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_DeInit + 0x0000000000000000 0x1c8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_ReadPin + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_TogglePin + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_LockPin + 0x0000000000000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_IRQHandler + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .text.HAL_GPIO_EXTI_Callback + 0x0000000000000000 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DeInit + 0x0000000000000000 0x2c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableBkUpAccess + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableBkUpAccess + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_ConfigPVD + 0x0000000000000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnablePVD + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisablePVD + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableWakeUpPin + 0x0000000000000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableWakeUpPin + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSLEEPMode + 0x0000000000000000 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTOPMode + 0x0000000000000000 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnterSTANDBYMode + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVD_IRQHandler + 0x0000000000000000 0x24 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_PVDCallback + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSleepOnExit + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSleepOnExit + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_EnableSEVOnPend + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .text.HAL_PWR_DisableSEVOnPend + 0x0000000000000000 0x20 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_info 0x0000000000000000 0x71b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_abbrev 0x0000000000000000 0x1ae ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_aranges + 0x0000000000000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_rnglists + 0x0000000000000000 0x74 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1d2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_line 0x0000000000000000 0x909 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_str 0x0000000000000000 0x7fd53 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .debug_frame 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableBkUpReg + 0x0000000000000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableBkUpReg + 0x0000000000000000 0x4c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableFlashPowerDown + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableFlashPowerDown + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_GetVoltageRange + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_ControlVoltageScaling + 0x0000000000000000 0xf4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableMainRegulatorLowVoltage + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableMainRegulatorLowVoltage + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_EnableLowRegulatorLowVoltage + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .text.HAL_PWREx_DisableLowRegulatorLowVoltage + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_info 0x0000000000000000 0x42e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_abbrev 0x0000000000000000 0x1c9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_aranges + 0x0000000000000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_rnglists + 0x0000000000000000 0x4a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1d2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_line 0x0000000000000000 0x8b7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_str 0x0000000000000000 0x7fcce ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .debug_frame 0x0000000000000000 0x15c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DeInit + 0x0000000000000000 0x10 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_MCOConfig + 0x0000000000000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_EnableCSS + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_DisableCSS + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetOscConfig + 0x0000000000000000 0x128 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_GetClockConfig + 0x0000000000000000 0x64 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_NMI_IRQHandler + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .text.HAL_RCC_CSSCallback + 0x0000000000000000 0xe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_PeriphCLKConfig + 0x0000000000000000 0x1e0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKConfig + 0x0000000000000000 0x84 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_GetPeriphCLKFreq + 0x0000000000000000 0xc0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_SelectLSEMode + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_EnablePLLI2S + 0x0000000000000000 0x8c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCCEx_DisablePLLI2S + 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .text.HAL_RCC_DeInit + 0x0000000000000000 0x19c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_info 0x0000000000000000 0x5a5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_abbrev 0x0000000000000000 0x1b1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_aranges + 0x0000000000000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_rnglists + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_line 0x0000000000000000 0xa57 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_str 0x0000000000000000 0x7fca5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .debug_frame 0x0000000000000000 0x118 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1bb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_line 0x0000000000000000 0x70b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .debug_str 0x0000000000000000 0x7f946 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_info 0x0000000000000000 0x70 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_abbrev 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_aranges + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_line 0x0000000000000000 0x70e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .debug_str 0x0000000000000000 0x7f949 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .comment 0x0000000000000000 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .ARM.attributes + 0x0000000000000000 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .group 0x0000000000000000 0xc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .data 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .bss 0x0000000000000000 0x0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_Init + 0x0000000000000000 0xaa ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_Init + 0x0000000000000000 0xcc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_Init + 0x0000000000000000 0xe0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DeInit + 0x0000000000000000 0x5e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspInit + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_MspDeInit + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit + 0x0000000000000000 0x124 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit_IT + 0x0000000000000000 0x8a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive_IT + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Transmit_DMA + 0x0000000000000000 0xfc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Receive_DMA + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAPause + 0x0000000000000000 0x158 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAResume + 0x0000000000000000 0x13a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_DMAStop + 0x0000000000000000 0xfe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle + 0x0000000000000000 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_IT + 0x0000000000000000 0xca ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_ReceiveToIdle_DMA + 0x0000000000000000 0xca ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort + 0x0000000000000000 0x1d6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit + 0x0000000000000000 0xd0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive + 0x0000000000000000 0x146 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_Abort_IT + 0x0000000000000000 0x228 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmit_IT + 0x0000000000000000 0xe8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceive_IT + 0x0000000000000000 0x164 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_IRQHandler + 0x0000000000000000 0x51c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_TxCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_TxHalfCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_RxCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_RxHalfCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_ErrorCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortTransmitCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_AbortReceiveCpltCallback + 0x0000000000000000 0x14 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UARTEx_RxEventCallback + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_LIN_SendBreak + 0x0000000000000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_EnterMuteMode + 0x0000000000000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_MultiProcessor_ExitMuteMode + 0x0000000000000000 0x78 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableTransmitter + 0x0000000000000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_HalfDuplex_EnableReceiver + 0x0000000000000000 0x68 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetState + 0x0000000000000000 0x3c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.HAL_UART_GetError + 0x0000000000000000 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATransmitCplt + 0x0000000000000000 0x9a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxHalfCplt + 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAReceiveCplt + 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxHalfCplt + 0x0000000000000000 0x36 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAError + 0x0000000000000000 0x94 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Start_Receive_IT + 0x0000000000000000 0x7c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Start_Receive_DMA + 0x0000000000000000 0x13c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndTxTransfer + 0x0000000000000000 0x50 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndRxTransfer + 0x0000000000000000 0xc6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMAAbortOnError + 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxAbortCallback + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxAbortCallback + 0x0000000000000000 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMATxOnlyAbortCallback + 0x0000000000000000 0x2a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_DMARxOnlyAbortCallback + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Transmit_IT + 0x0000000000000000 0xa0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_EndTransmit_IT + 0x0000000000000000 0x30 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.UART_Receive_IT + 0x0000000000000000 0x176 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0xaa8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x8e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x51 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x103 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x6a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1df ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x22 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0xd9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x102d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x11f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0xb953 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x6d ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x367e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x174 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x5c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x447 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x9fe ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x115 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x11b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0xa5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x15f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x287 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x5f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x236 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x132 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x264 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x2e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x11a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x85 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x89 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x295 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_macro 0x0000000000000000 0x126 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .text.exit 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .debug_frame 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-exit.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.std 0x0000000000000000 0x48 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.stdio_exit_handler + 0x0000000000000000 0x18 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.cleanup_stdio + 0x0000000000000000 0x40 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_lock + 0x0000000000000000 0x18 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock + 0x0000000000000000 0x18 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.global_stdio_init.part.0 + 0x0000000000000000 0x3c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_acquire + 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sfp_lock_release + 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sfp 0x0000000000000000 0xa8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__sinit 0x0000000000000000 0x30 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_lock_all + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text.__fp_unlock_all + 0x0000000000000000 0x1c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .bss.__sf 0x0000000000000000 0x138 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .bss.__stdio_exit_handler + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .data.__sglue 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .debug_frame 0x0000000000000000 0x13c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-findfp.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .text._fwalk_sglue + 0x0000000000000000 0x3c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .debug_frame 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fwalk.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__sread 0x0000000000000000 0x22 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__seofread + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__swrite + 0x0000000000000000 0x38 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__sseek 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text.__sclose + 0x0000000000000000 0x8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .debug_frame 0x0000000000000000 0x88 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-stdio.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .text._close_r + 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .debug_frame 0x0000000000000000 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-closer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .text._reclaim_reent + 0x0000000000000000 0xac C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .bss.errno 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .debug_frame 0x0000000000000000 0x38 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-reent.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .data._impure_data + 0x0000000000000000 0x4c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .data._impure_ptr + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-impure.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .text._lseek_r + 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .debug_frame 0x0000000000000000 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lseekr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .text._read_r 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .debug_frame 0x0000000000000000 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-readr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .text._write_r + 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .debug_frame 0x0000000000000000 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-writer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .text.__errno 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .debug_frame 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-errno.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_init_recursive + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_close_recursive + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_acquire_recursive + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_try_acquire_recursive + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text.__retarget_lock_release_recursive + 0x0000000000000000 0x2 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___arc4random_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___at_quick_exit_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___atexit_recursive_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___dd_hash_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___env_recursive_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___malloc_recursive_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___sfp_recursive_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .bss.__lock___tz_mutex + 0x0000000000000000 0x1 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .debug_frame 0x0000000000000000 0xb0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-lock.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .text._free_r 0x0000000000000000 0x98 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .debug_frame 0x0000000000000000 0x38 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-freer.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .text.sbrk_aligned + 0x0000000000000000 0x40 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .text._malloc_r + 0x0000000000000000 0x100 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_free_list + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .bss.__malloc_sbrk_start + 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .debug_frame 0x0000000000000000 0x50 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mallocr.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .text.__malloc_lock + 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .text.__malloc_unlock + 0x0000000000000000 0xc C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .debug_frame 0x0000000000000000 0x30 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-mlock.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text.__sflush_r + 0x0000000000000000 0x10c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text._fflush_r + 0x0000000000000000 0x50 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text.fflush 0x0000000000000000 0x28 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .debug_frame 0x0000000000000000 0x5c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-fflush.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .text._sbrk_r 0x0000000000000000 0x20 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .debug_frame 0x0000000000000000 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-sbrkr.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .ARM.extab 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .rodata 0x0000000000000000 0x24 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .eh_frame 0x0000000000000000 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .comment 0x0000000000000000 0x44 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .ARM.attributes + 0x0000000000000000 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o + .text 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + .data 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + .bss 0x0000000000000000 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + +Memory Configuration + +Name Origin Length Attributes +RAM 0x0000000020000000 0x0000000000020000 xrw +FLASH 0x0000000008000000 0x0000000000080000 xr +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/crt0.o +LOAD ./Core/Src/main.o +LOAD ./Core/Src/stm32f4xx_hal_msp.o +LOAD ./Core/Src/stm32f4xx_it.o +LOAD ./Core/Src/syscalls.o +LOAD ./Core/Src/sysmem.o +LOAD ./Core/Src/system_stm32f4xx.o +LOAD ./Core/Startup/startup_stm32f411retx.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o +LOAD ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o +START GROUP +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libm.a +END GROUP +START GROUP +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +END GROUP +START GROUP +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libnosys.a +END GROUP +START GROUP +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libnosys.a +END GROUP +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtend.o +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x0000000020020000 _estack = (ORIGIN (RAM) + LENGTH (RAM)) + 0x0000000000000200 _Min_Heap_Size = 0x200 + 0x0000000000000400 _Min_Stack_Size = 0x400 + +.isr_vector 0x0000000008000000 0x198 + 0x0000000008000000 . = ALIGN (0x4) + *(.isr_vector) + .isr_vector 0x0000000008000000 0x198 ./Core/Startup/startup_stm32f411retx.o + 0x0000000008000000 g_pfnVectors + 0x0000000008000198 . = ALIGN (0x4) + +.text 0x0000000008000198 0x1ebc + 0x0000000008000198 . = ALIGN (0x4) + *(.text) + .text 0x0000000008000198 0x40 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .text 0x00000000080001d8 0x30 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + 0x00000000080001d8 __aeabi_uldivmod + .text 0x0000000008000208 0x2c8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x0000000008000208 __udivmoddi4 + .text 0x00000000080004d0 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + 0x00000000080004d0 __aeabi_idiv0 + 0x00000000080004d0 __aeabi_ldiv0 + *(.text*) + .text.main 0x00000000080004d4 0x94 ./Core/Src/main.o + 0x00000000080004d4 main + .text.SystemClock_Config + 0x0000000008000568 0xd4 ./Core/Src/main.o + 0x0000000008000568 SystemClock_Config + .text.MX_USART2_UART_Init + 0x000000000800063c 0x54 ./Core/Src/main.o + .text.MX_GPIO_Init + 0x0000000008000690 0xdc ./Core/Src/main.o + .text.Error_Handler + 0x000000000800076c 0xa ./Core/Src/main.o + 0x000000000800076c Error_Handler + *fill* 0x0000000008000776 0x2 + .text.HAL_MspInit + 0x0000000008000778 0x50 ./Core/Src/stm32f4xx_hal_msp.o + 0x0000000008000778 HAL_MspInit + .text.HAL_UART_MspInit + 0x00000000080007c8 0x90 ./Core/Src/stm32f4xx_hal_msp.o + 0x00000000080007c8 HAL_UART_MspInit + .text.NMI_Handler + 0x0000000008000858 0x6 ./Core/Src/stm32f4xx_it.o + 0x0000000008000858 NMI_Handler + .text.HardFault_Handler + 0x000000000800085e 0x6 ./Core/Src/stm32f4xx_it.o + 0x000000000800085e HardFault_Handler + .text.MemManage_Handler + 0x0000000008000864 0x6 ./Core/Src/stm32f4xx_it.o + 0x0000000008000864 MemManage_Handler + .text.BusFault_Handler + 0x000000000800086a 0x6 ./Core/Src/stm32f4xx_it.o + 0x000000000800086a BusFault_Handler + .text.UsageFault_Handler + 0x0000000008000870 0x6 ./Core/Src/stm32f4xx_it.o + 0x0000000008000870 UsageFault_Handler + .text.SVC_Handler + 0x0000000008000876 0xe ./Core/Src/stm32f4xx_it.o + 0x0000000008000876 SVC_Handler + .text.DebugMon_Handler + 0x0000000008000884 0xe ./Core/Src/stm32f4xx_it.o + 0x0000000008000884 DebugMon_Handler + .text.PendSV_Handler + 0x0000000008000892 0xe ./Core/Src/stm32f4xx_it.o + 0x0000000008000892 PendSV_Handler + .text.SysTick_Handler + 0x00000000080008a0 0xc ./Core/Src/stm32f4xx_it.o + 0x00000000080008a0 SysTick_Handler + .text.SystemInit + 0x00000000080008ac 0x24 ./Core/Src/system_stm32f4xx.o + 0x00000000080008ac SystemInit + .text.Reset_Handler + 0x00000000080008d0 0x50 ./Core/Startup/startup_stm32f411retx.o + 0x00000000080008d0 Reset_Handler + .text.Default_Handler + 0x0000000008000920 0x2 ./Core/Startup/startup_stm32f411retx.o + 0x0000000008000920 RTC_Alarm_IRQHandler + 0x0000000008000920 EXTI2_IRQHandler + 0x0000000008000920 SPI4_IRQHandler + 0x0000000008000920 TIM1_CC_IRQHandler + 0x0000000008000920 DMA2_Stream5_IRQHandler + 0x0000000008000920 DMA1_Stream5_IRQHandler + 0x0000000008000920 PVD_IRQHandler + 0x0000000008000920 SDIO_IRQHandler + 0x0000000008000920 TAMP_STAMP_IRQHandler + 0x0000000008000920 EXTI3_IRQHandler + 0x0000000008000920 TIM1_UP_TIM10_IRQHandler + 0x0000000008000920 I2C3_ER_IRQHandler + 0x0000000008000920 EXTI0_IRQHandler + 0x0000000008000920 I2C2_EV_IRQHandler + 0x0000000008000920 DMA1_Stream2_IRQHandler + 0x0000000008000920 FPU_IRQHandler + 0x0000000008000920 DMA2_Stream2_IRQHandler + 0x0000000008000920 SPI1_IRQHandler + 0x0000000008000920 TIM1_BRK_TIM9_IRQHandler + 0x0000000008000920 DMA2_Stream3_IRQHandler + 0x0000000008000920 USART6_IRQHandler + 0x0000000008000920 DMA2_Stream0_IRQHandler + 0x0000000008000920 TIM4_IRQHandler + 0x0000000008000920 I2C1_EV_IRQHandler + 0x0000000008000920 DMA1_Stream6_IRQHandler + 0x0000000008000920 DMA1_Stream1_IRQHandler + 0x0000000008000920 TIM3_IRQHandler + 0x0000000008000920 RCC_IRQHandler + 0x0000000008000920 Default_Handler + 0x0000000008000920 EXTI15_10_IRQHandler + 0x0000000008000920 ADC_IRQHandler + 0x0000000008000920 DMA1_Stream7_IRQHandler + 0x0000000008000920 SPI5_IRQHandler + 0x0000000008000920 TIM5_IRQHandler + 0x0000000008000920 DMA2_Stream7_IRQHandler + 0x0000000008000920 I2C3_EV_IRQHandler + 0x0000000008000920 EXTI9_5_IRQHandler + 0x0000000008000920 RTC_WKUP_IRQHandler + 0x0000000008000920 SPI2_IRQHandler + 0x0000000008000920 DMA1_Stream0_IRQHandler + 0x0000000008000920 EXTI4_IRQHandler + 0x0000000008000920 WWDG_IRQHandler + 0x0000000008000920 TIM2_IRQHandler + 0x0000000008000920 OTG_FS_WKUP_IRQHandler + 0x0000000008000920 TIM1_TRG_COM_TIM11_IRQHandler + 0x0000000008000920 EXTI1_IRQHandler + 0x0000000008000920 USART2_IRQHandler + 0x0000000008000920 I2C2_ER_IRQHandler + 0x0000000008000920 DMA2_Stream1_IRQHandler + 0x0000000008000920 FLASH_IRQHandler + 0x0000000008000920 DMA2_Stream4_IRQHandler + 0x0000000008000920 USART1_IRQHandler + 0x0000000008000920 OTG_FS_IRQHandler + 0x0000000008000920 SPI3_IRQHandler + 0x0000000008000920 DMA1_Stream4_IRQHandler + 0x0000000008000920 I2C1_ER_IRQHandler + 0x0000000008000920 DMA2_Stream6_IRQHandler + 0x0000000008000920 DMA1_Stream3_IRQHandler + *fill* 0x0000000008000922 0x2 + .text.HAL_Init + 0x0000000008000924 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0000000008000924 HAL_Init + .text.HAL_InitTick + 0x0000000008000968 0x60 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0000000008000968 HAL_InitTick + .text.HAL_IncTick + 0x00000000080009c8 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x00000000080009c8 HAL_IncTick + .text.HAL_GetTick + 0x00000000080009f0 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x00000000080009f0 HAL_GetTick + .text.__NVIC_SetPriorityGrouping + 0x0000000008000a08 0x48 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_GetPriorityGrouping + 0x0000000008000a50 0x1c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.__NVIC_SetPriority + 0x0000000008000a6c 0x54 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.NVIC_EncodePriority + 0x0000000008000ac0 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + *fill* 0x0000000008000b26 0x2 + .text.SysTick_Config + 0x0000000008000b28 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .text.HAL_NVIC_SetPriorityGrouping + 0x0000000008000b6c 0x16 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x0000000008000b6c HAL_NVIC_SetPriorityGrouping + .text.HAL_NVIC_SetPriority + 0x0000000008000b82 0x38 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x0000000008000b82 HAL_NVIC_SetPriority + .text.HAL_SYSTICK_Config + 0x0000000008000bba 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x0000000008000bba HAL_SYSTICK_Config + *fill* 0x0000000008000bd2 0x2 + .text.HAL_GPIO_Init + 0x0000000008000bd4 0x308 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x0000000008000bd4 HAL_GPIO_Init + .text.HAL_GPIO_WritePin + 0x0000000008000edc 0x32 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x0000000008000edc HAL_GPIO_WritePin + *fill* 0x0000000008000f0e 0x2 + .text.HAL_RCC_OscConfig + 0x0000000008000f10 0x4f0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x0000000008000f10 HAL_RCC_OscConfig + .text.HAL_RCC_ClockConfig + 0x0000000008001400 0x1cc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x0000000008001400 HAL_RCC_ClockConfig + .text.HAL_RCC_GetSysClockFreq + 0x00000000080015cc 0x20c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x00000000080015cc HAL_RCC_GetSysClockFreq + .text.HAL_RCC_GetHCLKFreq + 0x00000000080017d8 0x18 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x00000000080017d8 HAL_RCC_GetHCLKFreq + .text.HAL_RCC_GetPCLK1Freq + 0x00000000080017f0 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x00000000080017f0 HAL_RCC_GetPCLK1Freq + .text.HAL_RCC_GetPCLK2Freq + 0x0000000008001818 0x28 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x0000000008001818 HAL_RCC_GetPCLK2Freq + .text.HAL_UART_Init + 0x0000000008001840 0x9a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x0000000008001840 HAL_UART_Init + .text.HAL_UART_Receive + 0x00000000080018da 0x144 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x00000000080018da HAL_UART_Receive + .text.UART_WaitOnFlagUntilTimeout + 0x0000000008001a1e 0xdc ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + *fill* 0x0000000008001afa 0x2 + .text.UART_SetConfig + 0x0000000008001afc 0x4e8 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .text.memset 0x0000000008001fe4 0x10 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + 0x0000000008001fe4 memset + .text.__libc_init_array + 0x0000000008001ff4 0x48 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + 0x0000000008001ff4 __libc_init_array + *(.glue_7) + .glue_7 0x000000000800203c 0x0 linker stubs + *(.glue_7t) + .glue_7t 0x000000000800203c 0x0 linker stubs + *(.eh_frame) + .eh_frame 0x000000000800203c 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.init) + .init 0x000000000800203c 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + 0x000000000800203c _init + .init 0x0000000008002040 0x8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + *(.fini) + .fini 0x0000000008002048 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + 0x0000000008002048 _fini + .fini 0x000000000800204c 0x8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x0000000008002054 . = ALIGN (0x4) + 0x0000000008002054 _etext = . + +.vfp11_veneer 0x0000000008002054 0x0 + .vfp11_veneer 0x0000000008002054 0x0 linker stubs + +.v4_bx 0x0000000008002054 0x0 + .v4_bx 0x0000000008002054 0x0 linker stubs + +.iplt 0x0000000008002054 0x0 + .iplt 0x0000000008002054 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.rodata 0x0000000008002054 0x18 + 0x0000000008002054 . = ALIGN (0x4) + *(.rodata) + *(.rodata*) + .rodata.AHBPrescTable + 0x0000000008002054 0x10 ./Core/Src/system_stm32f4xx.o + 0x0000000008002054 AHBPrescTable + .rodata.APBPrescTable + 0x0000000008002064 0x8 ./Core/Src/system_stm32f4xx.o + 0x0000000008002064 APBPrescTable + 0x000000000800206c . = ALIGN (0x4) + +.ARM.extab 0x000000000800206c 0x0 + 0x000000000800206c . = ALIGN (0x4) + *(.ARM.extab* .gnu.linkonce.armextab.*) + 0x000000000800206c . = ALIGN (0x4) + +.ARM 0x000000000800206c 0x8 + 0x000000000800206c . = ALIGN (0x4) + 0x000000000800206c __exidx_start = . + *(.ARM.exidx*) + .ARM.exidx 0x000000000800206c 0x8 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x0000000008002074 __exidx_end = . + 0x0000000008002074 . = ALIGN (0x4) + +.rel.dyn 0x0000000008002074 0x0 + .rel.iplt 0x0000000008002074 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + +.preinit_array 0x0000000008002074 0x0 + 0x0000000008002074 . = ALIGN (0x4) + 0x0000000008002074 PROVIDE (__preinit_array_start = .) + *(.preinit_array*) + 0x0000000008002074 PROVIDE (__preinit_array_end = .) + 0x0000000008002074 . = ALIGN (0x4) + +.init_array 0x0000000008002074 0x4 + 0x0000000008002074 . = ALIGN (0x4) + 0x0000000008002074 PROVIDE (__init_array_start = .) + *(SORT_BY_NAME(.init_array.*)) + *(.init_array*) + .init_array 0x0000000008002074 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x0000000008002078 PROVIDE (__init_array_end = .) + 0x0000000008002078 . = ALIGN (0x4) + +.fini_array 0x0000000008002078 0x4 + 0x0000000008002078 . = ALIGN (0x4) + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_NAME(.fini_array.*)) + *(.fini_array*) + .fini_array 0x0000000008002078 0x4 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + [!provide] PROVIDE (__fini_array_end = .) + 0x000000000800207c . = ALIGN (0x4) + 0x000000000800207c _sidata = LOADADDR (.data) + +.data 0x0000000020000000 0xc load address 0x000000000800207c + 0x0000000020000000 . = ALIGN (0x4) + 0x0000000020000000 _sdata = . + *(.data) + *(.data*) + .data.SystemCoreClock + 0x0000000020000000 0x4 ./Core/Src/system_stm32f4xx.o + 0x0000000020000000 SystemCoreClock + .data.uwTickPrio + 0x0000000020000004 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0000000020000004 uwTickPrio + .data.uwTickFreq + 0x0000000020000008 0x1 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0000000020000008 uwTickFreq + *(.RamFunc) + *(.RamFunc*) + 0x000000002000000c . = ALIGN (0x4) + *fill* 0x0000000020000009 0x3 + 0x000000002000000c _edata = . + +.igot.plt 0x000000002000000c 0x0 load address 0x0000000008002088 + .igot.plt 0x000000002000000c 0x0 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x000000002000000c . = ALIGN (0x4) + +.bss 0x000000002000000c 0x70 load address 0x0000000008002088 + 0x000000002000000c _sbss = . + 0x000000002000000c __bss_start__ = _sbss + *(.bss) + .bss 0x000000002000000c 0x1c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + *(.bss*) + .bss.huart2 0x0000000020000028 0x44 ./Core/Src/main.o + 0x0000000020000028 huart2 + .bss.uart_buffer + 0x000000002000006c 0xa ./Core/Src/main.o + 0x000000002000006c uart_buffer + .bss.uart_index + 0x0000000020000076 0x1 ./Core/Src/main.o + 0x0000000020000076 uart_index + *fill* 0x0000000020000077 0x1 + .bss.uwTick 0x0000000020000078 0x4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x0000000020000078 uwTick + *(COMMON) + 0x000000002000007c . = ALIGN (0x4) + 0x000000002000007c _ebss = . + 0x000000002000007c __bss_end__ = _ebss + +._user_heap_stack + 0x000000002000007c 0x604 load address 0x0000000008002088 + 0x0000000020000080 . = ALIGN (0x8) + *fill* 0x000000002000007c 0x4 + [!provide] PROVIDE (end = .) + 0x0000000020000080 PROVIDE (_end = .) + 0x0000000020000280 . = (. + _Min_Heap_Size) + *fill* 0x0000000020000080 0x200 + 0x0000000020000680 . = (. + _Min_Stack_Size) + *fill* 0x0000000020000280 0x400 + 0x0000000020000680 . = ALIGN (0x8) + +/DISCARD/ + libc.a(*) + libm.a(*) + libgcc.a(*) + +.ARM.attributes + 0x0000000000000000 0x30 + *(.ARM.attributes) + .ARM.attributes + 0x0000000000000000 0x1e C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crti.o + .ARM.attributes + 0x000000000000001e 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .ARM.attributes + 0x0000000000000052 0x34 ./Core/Src/main.o + .ARM.attributes + 0x0000000000000086 0x34 ./Core/Src/stm32f4xx_hal_msp.o + .ARM.attributes + 0x00000000000000ba 0x34 ./Core/Src/stm32f4xx_it.o + .ARM.attributes + 0x00000000000000ee 0x34 ./Core/Src/system_stm32f4xx.o + .ARM.attributes + 0x0000000000000122 0x21 ./Core/Startup/startup_stm32f411retx.o + .ARM.attributes + 0x0000000000000143 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .ARM.attributes + 0x0000000000000177 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .ARM.attributes + 0x00000000000001ab 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .ARM.attributes + 0x00000000000001df 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .ARM.attributes + 0x0000000000000213 0x34 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .ARM.attributes + 0x0000000000000247 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .ARM.attributes + 0x000000000000027b 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .ARM.attributes + 0x00000000000002af 0x1e C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .ARM.attributes + 0x00000000000002cd 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .ARM.attributes + 0x0000000000000301 0x1e C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + .ARM.attributes + 0x000000000000031f 0x1e C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtn.o +OUTPUT(access_control_stm32.elf elf32-littlearm) +LOAD linker stubs +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libm.a +LOAD C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a + +.comment 0x0000000000000000 0x43 + .comment 0x0000000000000000 0x43 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x44 (size before relaxing) + .comment 0x0000000000000043 0x44 ./Core/Src/main.o + .comment 0x0000000000000043 0x44 ./Core/Src/stm32f4xx_hal_msp.o + .comment 0x0000000000000043 0x44 ./Core/Src/stm32f4xx_it.o + .comment 0x0000000000000043 0x44 ./Core/Src/system_stm32f4xx.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .comment 0x0000000000000043 0x44 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_info 0x0000000000000000 0x70cd + .debug_info 0x0000000000000000 0xc27 ./Core/Src/main.o + .debug_info 0x0000000000000c27 0x90f ./Core/Src/stm32f4xx_hal_msp.o + .debug_info 0x0000000000001536 0x112 ./Core/Src/stm32f4xx_it.o + .debug_info 0x0000000000001648 0x53e ./Core/Src/system_stm32f4xx.o + .debug_info 0x0000000000001b86 0x23 ./Core/Startup/startup_stm32f411retx.o + .debug_info 0x0000000000001ba9 0x8c4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_info 0x000000000000246d 0xcb6 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_info 0x0000000000003123 0x6f9 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_info 0x000000000000381c 0x8f2 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_info 0x000000000000410e 0x2fbf ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_abbrev 0x0000000000000000 0x12d3 + .debug_abbrev 0x0000000000000000 0x25e ./Core/Src/main.o + .debug_abbrev 0x000000000000025e 0x1c1 ./Core/Src/stm32f4xx_hal_msp.o + .debug_abbrev 0x000000000000041f 0x73 ./Core/Src/stm32f4xx_it.o + .debug_abbrev 0x0000000000000492 0x11a ./Core/Src/system_stm32f4xx.o + .debug_abbrev 0x00000000000005ac 0x12 ./Core/Startup/startup_stm32f411retx.o + .debug_abbrev 0x00000000000005be 0x24b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_abbrev 0x0000000000000809 0x327 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_abbrev 0x0000000000000b30 0x1d3 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_abbrev 0x0000000000000d03 0x2b5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_abbrev 0x0000000000000fb8 0x31b ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_aranges 0x0000000000000000 0x608 + .debug_aranges + 0x0000000000000000 0x40 ./Core/Src/main.o + .debug_aranges + 0x0000000000000040 0x30 ./Core/Src/stm32f4xx_hal_msp.o + .debug_aranges + 0x0000000000000070 0x60 ./Core/Src/stm32f4xx_it.o + .debug_aranges + 0x00000000000000d0 0x28 ./Core/Src/system_stm32f4xx.o + .debug_aranges + 0x00000000000000f8 0x28 ./Core/Startup/startup_stm32f411retx.o + .debug_aranges + 0x0000000000000120 0xf0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_aranges + 0x0000000000000210 0x118 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_aranges + 0x0000000000000328 0x58 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_aranges + 0x0000000000000380 0x88 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_aranges + 0x0000000000000408 0x200 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_rnglists + 0x0000000000000000 0x49d + .debug_rnglists + 0x0000000000000000 0x2e ./Core/Src/main.o + .debug_rnglists + 0x000000000000002e 0x20 ./Core/Src/stm32f4xx_hal_msp.o + .debug_rnglists + 0x000000000000004e 0x43 ./Core/Src/stm32f4xx_it.o + .debug_rnglists + 0x0000000000000091 0x1a ./Core/Src/system_stm32f4xx.o + .debug_rnglists + 0x00000000000000ab 0x19 ./Core/Startup/startup_stm32f411retx.o + .debug_rnglists + 0x00000000000000c4 0xaf ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_rnglists + 0x0000000000000173 0xce ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_rnglists + 0x0000000000000241 0x3f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_rnglists + 0x0000000000000280 0x66 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_rnglists + 0x00000000000002e6 0x1b7 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_macro 0x0000000000000000 0x152be + .debug_macro 0x0000000000000000 0x2cb ./Core/Src/main.o + .debug_macro 0x00000000000002cb 0xaa8 ./Core/Src/main.o + .debug_macro 0x0000000000000d73 0x295 ./Core/Src/main.o + .debug_macro 0x0000000000001008 0x2e ./Core/Src/main.o + .debug_macro 0x0000000000001036 0x28 ./Core/Src/main.o + .debug_macro 0x000000000000105e 0x22 ./Core/Src/main.o + .debug_macro 0x0000000000001080 0x8e ./Core/Src/main.o + .debug_macro 0x000000000000110e 0x51 ./Core/Src/main.o + .debug_macro 0x000000000000115f 0x103 ./Core/Src/main.o + .debug_macro 0x0000000000001262 0x6a ./Core/Src/main.o + .debug_macro 0x00000000000012cc 0x1df ./Core/Src/main.o + .debug_macro 0x00000000000014ab 0x1c ./Core/Src/main.o + .debug_macro 0x00000000000014c7 0x22 ./Core/Src/main.o + .debug_macro 0x00000000000014e9 0xd9 ./Core/Src/main.o + .debug_macro 0x00000000000015c2 0x102d ./Core/Src/main.o + .debug_macro 0x00000000000025ef 0x11f ./Core/Src/main.o + .debug_macro 0x000000000000270e 0xb953 ./Core/Src/main.o + .debug_macro 0x000000000000e061 0x6d ./Core/Src/main.o + .debug_macro 0x000000000000e0ce 0x367e ./Core/Src/main.o + .debug_macro 0x000000000001174c 0x174 ./Core/Src/main.o + .debug_macro 0x00000000000118c0 0x5c ./Core/Src/main.o + .debug_macro 0x000000000001191c 0x447 ./Core/Src/main.o + .debug_macro 0x0000000000011d63 0x9fe ./Core/Src/main.o + .debug_macro 0x0000000000012761 0x115 ./Core/Src/main.o + .debug_macro 0x0000000000012876 0x11b ./Core/Src/main.o + .debug_macro 0x0000000000012991 0xa5 ./Core/Src/main.o + .debug_macro 0x0000000000012a36 0x15f ./Core/Src/main.o + .debug_macro 0x0000000000012b95 0x287 ./Core/Src/main.o + .debug_macro 0x0000000000012e1c 0x5f ./Core/Src/main.o + .debug_macro 0x0000000000012e7b 0x236 ./Core/Src/main.o + .debug_macro 0x00000000000130b1 0x132 ./Core/Src/main.o + .debug_macro 0x00000000000131e3 0x264 ./Core/Src/main.o + .debug_macro 0x0000000000013447 0x2e ./Core/Src/main.o + .debug_macro 0x0000000000013475 0x11a ./Core/Src/main.o + .debug_macro 0x000000000001358f 0x85 ./Core/Src/main.o + .debug_macro 0x0000000000013614 0x89 ./Core/Src/main.o + .debug_macro 0x000000000001369d 0x295 ./Core/Src/main.o + .debug_macro 0x0000000000013932 0x126 ./Core/Src/main.o + .debug_macro 0x0000000000013a58 0x58 ./Core/Src/main.o + .debug_macro 0x0000000000013ab0 0x61 ./Core/Src/main.o + .debug_macro 0x0000000000013b11 0x2a ./Core/Src/main.o + .debug_macro 0x0000000000013b3b 0x43 ./Core/Src/main.o + .debug_macro 0x0000000000013b7e 0x34 ./Core/Src/main.o + .debug_macro 0x0000000000013bb2 0x16 ./Core/Src/main.o + .debug_macro 0x0000000000013bc8 0x43 ./Core/Src/main.o + .debug_macro 0x0000000000013c0b 0x34 ./Core/Src/main.o + .debug_macro 0x0000000000013c3f 0x10 ./Core/Src/main.o + .debug_macro 0x0000000000013c4f 0x58 ./Core/Src/main.o + .debug_macro 0x0000000000013ca7 0x8e ./Core/Src/main.o + .debug_macro 0x0000000000013d35 0x1c ./Core/Src/main.o + .debug_macro 0x0000000000013d51 0x177 ./Core/Src/main.o + .debug_macro 0x0000000000013ec8 0x369 ./Core/Src/main.o + .debug_macro 0x0000000000014231 0x10 ./Core/Src/main.o + .debug_macro 0x0000000000014241 0x35 ./Core/Src/main.o + .debug_macro 0x0000000000014276 0x20 ./Core/Src/main.o + .debug_macro 0x0000000000014296 0x1c ./Core/Src/main.o + .debug_macro 0x00000000000142b2 0x10 ./Core/Src/main.o + .debug_macro 0x00000000000142c2 0x1c ./Core/Src/main.o + .debug_macro 0x00000000000142de 0x16 ./Core/Src/main.o + .debug_macro 0x00000000000142f4 0x147 ./Core/Src/main.o + .debug_macro 0x000000000001443b 0x1c9 ./Core/Src/stm32f4xx_hal_msp.o + .debug_macro 0x0000000000014604 0x1d3 ./Core/Src/stm32f4xx_it.o + .debug_macro 0x00000000000147d7 0x1ba ./Core/Src/system_stm32f4xx.o + .debug_macro 0x0000000000014991 0x21a ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_macro 0x0000000000014bab 0x1ba ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_macro 0x0000000000014d65 0x1c0 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_macro 0x0000000000014f25 0x1de ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_macro 0x0000000000015103 0x1bb ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_line 0x0000000000000000 0x7ae1 + .debug_line 0x0000000000000000 0x9a1 ./Core/Src/main.o + .debug_line 0x00000000000009a1 0x764 ./Core/Src/stm32f4xx_hal_msp.o + .debug_line 0x0000000000001105 0x7d8 ./Core/Src/stm32f4xx_it.o + .debug_line 0x00000000000018dd 0x797 ./Core/Src/system_stm32f4xx.o + .debug_line 0x0000000000002074 0x7a ./Core/Startup/startup_stm32f411retx.o + .debug_line 0x00000000000020ee 0x9fd ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_line 0x0000000000002aeb 0xcac ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_line 0x0000000000003797 0xb35 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_line 0x00000000000042cc 0xd76 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_line 0x0000000000005042 0x2a9f ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + +.debug_str 0x0000000000000000 0x85048 + .debug_str 0x0000000000000000 0x83762 ./Core/Src/main.o + 0x83a3f (size before relaxing) + .debug_str 0x0000000000083762 0x83 ./Core/Src/stm32f4xx_hal_msp.o + 0x800a7 (size before relaxing) + .debug_str 0x00000000000837e5 0xc9 ./Core/Src/stm32f4xx_it.o + 0x7fb07 (size before relaxing) + .debug_str 0x00000000000838ae 0xdb ./Core/Src/system_stm32f4xx.o + 0x7fb1d (size before relaxing) + .debug_str 0x0000000000083989 0x34 ./Core/Startup/startup_stm32f411retx.o + 0x7e (size before relaxing) + .debug_str 0x00000000000839bd 0x9a5 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + 0x80549 (size before relaxing) + .debug_str 0x0000000000084362 0x354 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + 0x8026a (size before relaxing) + .debug_str 0x00000000000846b6 0x121 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + 0x7fc98 (size before relaxing) + .debug_str 0x00000000000847d7 0x233 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + 0x7ff51 (size before relaxing) + .debug_str 0x0000000000084a0a 0x63e ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + 0x804de (size before relaxing) + +.debug_frame 0x0000000000000000 0x17a4 + .debug_frame 0x0000000000000000 0xa8 ./Core/Src/main.o + .debug_frame 0x00000000000000a8 0x7c ./Core/Src/stm32f4xx_hal_msp.o + .debug_frame 0x0000000000000124 0x104 ./Core/Src/stm32f4xx_it.o + .debug_frame 0x0000000000000228 0x58 ./Core/Src/system_stm32f4xx.o + .debug_frame 0x0000000000000280 0x374 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o + .debug_frame 0x00000000000005f4 0x498 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o + .debug_frame 0x0000000000000a8c 0x14c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o + .debug_frame 0x0000000000000bd8 0x1f4 ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o + .debug_frame 0x0000000000000dcc 0x92c ./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o + .debug_frame 0x00000000000016f8 0x20 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-memset.o) + .debug_frame 0x0000000000001718 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(libc_a-init.o) + .debug_frame 0x0000000000001744 0x2c C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x0000000000001770 0x34 C:/ST/STM32CubeIDE_1.13.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/bin/../lib/gcc/arm-none-eabi/11.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + +.debug_line_str + 0x0000000000000000 0x72 + .debug_line_str + 0x0000000000000000 0x72 ./Core/Startup/startup_stm32f411retx.o + 0x8a (size before relaxing) diff --git a/access_control_stm32/Debug/makefile b/access_control_stm32/Debug/makefile new file mode 100644 index 0000000..4a99f5b --- /dev/null +++ b/access_control_stm32/Debug/makefile @@ -0,0 +1,94 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +-include ../makefile.init + +RM := rm -rf + +# All of the sources participating in the build are defined here +-include sources.mk +-include Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk +-include Core/Startup/subdir.mk +-include Core/Src/subdir.mk +-include objects.mk + +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(strip $(S_DEPS)),) +-include $(S_DEPS) +endif +ifneq ($(strip $(S_UPPER_DEPS)),) +-include $(S_UPPER_DEPS) +endif +ifneq ($(strip $(C_DEPS)),) +-include $(C_DEPS) +endif +endif + +-include ../makefile.defs + +OPTIONAL_TOOL_DEPS := \ +$(wildcard ../makefile.defs) \ +$(wildcard ../makefile.init) \ +$(wildcard ../makefile.targets) \ + + +BUILD_ARTIFACT_NAME := access_control_stm32 +BUILD_ARTIFACT_EXTENSION := elf +BUILD_ARTIFACT_PREFIX := +BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),) + +# Add inputs and outputs from these tool invocations to the build variables +EXECUTABLES += \ +access_control_stm32.elf \ + +MAP_FILES += \ +access_control_stm32.map \ + +SIZE_OUTPUT += \ +default.size.stdout \ + +OBJDUMP_LIST += \ +access_control_stm32.list \ + + +# All Target +all: main-build + +# Main-build Target +main-build: access_control_stm32.elf secondary-outputs + +# Tool invocations +access_control_stm32.elf access_control_stm32.map: $(OBJS) $(USER_OBJS) C:\Users\hamha\Documents\GitHub\stm32-fmt-code\access_control_stm32\STM32F411RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-gcc -o "access_control_stm32.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"C:\Users\hamha\Documents\GitHub\stm32-fmt-code\access_control_stm32\STM32F411RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="access_control_stm32.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group + @echo 'Finished building target: $@' + @echo ' ' + +default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-size $(EXECUTABLES) + @echo 'Finished building: $@' + @echo ' ' + +access_control_stm32.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS) + arm-none-eabi-objdump -h -S $(EXECUTABLES) > "access_control_stm32.list" + @echo 'Finished building: $@' + @echo ' ' + +# Other Targets +clean: + -$(RM) access_control_stm32.elf access_control_stm32.list access_control_stm32.map default.size.stdout + -@echo ' ' + +secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) + +fail-specified-linker-script-missing: + @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.' + @exit 2 + +warn-no-linker-script-specified: + @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.' + +.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified + +-include ../makefile.targets diff --git a/access_control_stm32/Debug/objects.list b/access_control_stm32/Debug/objects.list new file mode 100644 index 0000000..2156692 --- /dev/null +++ b/access_control_stm32/Debug/objects.list @@ -0,0 +1,23 @@ +"./Core/Src/main.o" +"./Core/Src/stm32f4xx_hal_msp.o" +"./Core/Src/stm32f4xx_it.o" +"./Core/Src/syscalls.o" +"./Core/Src/sysmem.o" +"./Core/Src/system_stm32f4xx.o" +"./Core/Startup/startup_stm32f411retx.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o" +"./Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o" diff --git a/access_control_stm32/Debug/objects.mk b/access_control_stm32/Debug/objects.mk new file mode 100644 index 0000000..820854b --- /dev/null +++ b/access_control_stm32/Debug/objects.mk @@ -0,0 +1,9 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +USER_OBJS := + +LIBS := + diff --git a/access_control_stm32/Debug/sources.mk b/access_control_stm32/Debug/sources.mk new file mode 100644 index 0000000..5899429 --- /dev/null +++ b/access_control_stm32/Debug/sources.mk @@ -0,0 +1,28 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +ELF_SRCS := +OBJ_SRCS := +S_SRCS := +C_SRCS := +S_UPPER_SRCS := +O_SRCS := +CYCLO_FILES := +SIZE_OUTPUT := +OBJDUMP_LIST := +SU_FILES := +EXECUTABLES := +OBJS := +MAP_FILES := +S_DEPS := +S_UPPER_DEPS := +C_DEPS := + +# Every subdirectory with source files must be described here +SUBDIRS := \ +Core/Src \ +Core/Startup \ +Drivers/STM32F4xx_HAL_Driver/Src \ + diff --git a/access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h b/access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h new file mode 100644 index 0000000..9962334 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h @@ -0,0 +1,8680 @@ +/** + ****************************************************************************** + * @file stm32f411xe.h + * @author MCD Application Team + * @brief CMSIS STM32F411xE Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - peripherals registers declarations and bits definition + * - Macros to access peripheral’s registers hardware + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f411xe + * @{ + */ + +#ifndef __STM32F411xE_H +#define __STM32F411xE_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001U /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1U /*!< STM32F4XX provides an MPU */ +#define __NVIC_PRIO_BITS 4U /*!< STM32F4XX uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 1U /*!< FPU present */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F4XX Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ + DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ + DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ + DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ + DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ + DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ + DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ + ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ + DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ + DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ + DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ + DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ + DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ + DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ + DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ + USART6_IRQn = 71, /*!< USART6 global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + FPU_IRQn = 81, /*!< FPU global interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ + SPI5_IRQn = 85 /*!< SPI5 global Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32f4xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ + __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ + __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ + __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ + __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ + __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ + __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ + __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1 base address + 0x308 */ +} ADC_Common_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ +} CRC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +}DBGMCU_TypeDef; + + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA stream x configuration register */ + __IO uint32_t NDTR; /*!< DMA stream x number of data register */ + __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ + __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ + __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ + __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ +} DMA_Stream_TypeDef; + +typedef struct +{ + __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ + __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ + __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ + __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ +} DMA_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ + __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ + __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ + __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ + __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ + __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ + __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ + __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ +} FLASH_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ +} GPIO_TypeDef; + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ + __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ +} SYSCFG_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ + __IO uint32_t DR; /*!< I2C Data register, Address offset: 0x10 */ + __IO uint32_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ + __IO uint32_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ + __IO uint32_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ + __IO uint32_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ + __IO uint32_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ +} IWDG_TypeDef; + + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ + __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ + uint32_t RESERVED0; /*!< Reserved, 0x1C */ + __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ + uint32_t RESERVED2; /*!< Reserved, 0x3C */ + __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ + uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ + __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ + __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ + __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ + uint32_t RESERVED4; /*!< Reserved, 0x5C */ + __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ + __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ + __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ + uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ + __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ + __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ + uint32_t RESERVED7[1]; /*!< Reserved, 0x88 */ + __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ + uint32_t RESERVED7; /*!< Reserved, 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ +} RTC_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ + __IO const uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ + __IO const uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ + __IO const uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ + __IO const uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ + __IO const uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ + __IO const uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ + __IO const uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __IO const uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ + __IO uint32_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ + __IO uint32_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ +} SPI_TypeDef; + + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ +} TIM_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ +} USART_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; +/** + * @brief USB_OTG_Core_Registers + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h */ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h */ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h */ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch */ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h */ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h */ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h */ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch */ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h */ + __IO uint32_t GRXFSIZ; /*!< Receive FIFO Size Register 024h */ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h */ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch */ + uint32_t Reserved30[2]; /*!< Reserved 030h */ + __IO uint32_t GCCFG; /*!< General Purpose IO Register 038h */ + __IO uint32_t CID; /*!< User ID Register 03Ch */ + uint32_t Reserved40[48]; /*!< Reserved 0x40-0xFF */ + __IO uint32_t HPTXFSIZ; /*!< Host Periodic Tx FIFO Size Reg 100h */ + __IO uint32_t DIEPTXF[0x0F]; /*!< dev Periodic Transmit FIFO */ +} USB_OTG_GlobalTypeDef; + +/** + * @brief USB_OTG_device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /*!< dev Configuration Register 800h */ + __IO uint32_t DCTL; /*!< dev Control Register 804h */ + __IO uint32_t DSTS; /*!< dev Status Register (RO) 808h */ + uint32_t Reserved0C; /*!< Reserved 80Ch */ + __IO uint32_t DIEPMSK; /*!< dev IN Endpoint Mask 810h */ + __IO uint32_t DOEPMSK; /*!< dev OUT Endpoint Mask 814h */ + __IO uint32_t DAINT; /*!< dev All Endpoints Itr Reg 818h */ + __IO uint32_t DAINTMSK; /*!< dev All Endpoints Itr Mask 81Ch */ + uint32_t Reserved20; /*!< Reserved 820h */ + uint32_t Reserved9; /*!< Reserved 824h */ + __IO uint32_t DVBUSDIS; /*!< dev VBUS discharge Register 828h */ + __IO uint32_t DVBUSPULSE; /*!< dev VBUS Pulse Register 82Ch */ + __IO uint32_t DTHRCTL; /*!< dev threshold 830h */ + __IO uint32_t DIEPEMPMSK; /*!< dev empty msk 834h */ + __IO uint32_t DEACHINT; /*!< dedicated EP interrupt 838h */ + __IO uint32_t DEACHMSK; /*!< dedicated EP msk 83Ch */ + uint32_t Reserved40; /*!< dedicated EP mask 840h */ + __IO uint32_t DINEP1MSK; /*!< dedicated EP mask 844h */ + uint32_t Reserved44[15]; /*!< Reserved 844-87Ch */ + __IO uint32_t DOUTEP1MSK; /*!< dedicated EP msk 884h */ +} USB_OTG_DeviceTypeDef; + +/** + * @brief USB_OTG_IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /*!< dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved 900h + (ep_num * 20h) + 04h */ + __IO uint32_t DIEPINT; /*!< dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved 900h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DIEPTSIZ; /*!< IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h */ + __IO uint32_t DIEPDMA; /*!< IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h */ + __IO uint32_t DTXFSTS; /*!< IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h */ + uint32_t Reserved18; /*!< Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch */ +} USB_OTG_INEndpointTypeDef; + +/** + * @brief USB_OTG_OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /*!< dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved B00h + (ep_num * 20h) + 04h */ + __IO uint32_t DOEPINT; /*!< dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved B00h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DOEPTSIZ; /*!< dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h */ + __IO uint32_t DOEPDMA; /*!< dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h */ + uint32_t Reserved18[2]; /*!< Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch */ +} USB_OTG_OUTEndpointTypeDef; + +/** + * @brief USB_OTG_Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /*!< Host Configuration Register 400h */ + __IO uint32_t HFIR; /*!< Host Frame Interval Register 404h */ + __IO uint32_t HFNUM; /*!< Host Frame Nbr/Frame Remaining 408h */ + uint32_t Reserved40C; /*!< Reserved 40Ch */ + __IO uint32_t HPTXSTS; /*!< Host Periodic Tx FIFO/ Queue Status 410h */ + __IO uint32_t HAINT; /*!< Host All Channels Interrupt Register 414h */ + __IO uint32_t HAINTMSK; /*!< Host All Channels Interrupt Mask 418h */ +} USB_OTG_HostTypeDef; + +/** + * @brief USB_OTG_Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; /*!< Host Channel Characteristics Register 500h */ + __IO uint32_t HCSPLT; /*!< Host Channel Split Control Register 504h */ + __IO uint32_t HCINT; /*!< Host Channel Interrupt Register 508h */ + __IO uint32_t HCINTMSK; /*!< Host Channel Interrupt Mask Register 50Ch */ + __IO uint32_t HCTSIZ; /*!< Host Channel Transfer Size Register 510h */ + __IO uint32_t HCDMA; /*!< Host Channel DMA Address Register 514h */ + uint32_t Reserved[2]; /*!< Reserved */ +} USB_OTG_HostChannelTypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define FLASH_BASE 0x08000000UL /*!< FLASH(up to 1 MB) base address in the alias region */ +#define SRAM1_BASE 0x20000000UL /*!< SRAM1(128 KB) base address in the alias region */ +#define PERIPH_BASE 0x40000000UL /*!< Peripheral base address in the alias region */ +#define SRAM1_BB_BASE 0x22000000UL /*!< SRAM1(128 KB) base address in the bit-band region */ +#define PERIPH_BB_BASE 0x42000000UL /*!< Peripheral base address in the bit-band region */ +#define BKPSRAM_BB_BASE 0x42480000UL /*!< Backup SRAM(4 KB) base address in the bit-band region */ +#define FLASH_END 0x0807FFFFUL /*!< FLASH end address */ +#define FLASH_OTP_BASE 0x1FFF7800UL /*!< Base address of : (up to 528 Bytes) embedded FLASH OTP Area */ +#define FLASH_OTP_END 0x1FFF7A0FUL /*!< End address of : (up to 528 Bytes) embedded FLASH OTP Area */ + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000UL) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000UL) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000UL) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400UL) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800UL) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00UL) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800UL) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00UL) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000UL) +#define I2S2ext_BASE (APB1PERIPH_BASE + 0x3400UL) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800UL) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00UL) +#define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000UL) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400UL) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400UL) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800UL) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00UL) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000UL) + +/*!< APB2 peripherals */ +#define TIM1_BASE (APB2PERIPH_BASE + 0x0000UL) +#define USART1_BASE (APB2PERIPH_BASE + 0x1000UL) +#define USART6_BASE (APB2PERIPH_BASE + 0x1400UL) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2000UL) +#define ADC1_COMMON_BASE (APB2PERIPH_BASE + 0x2300UL) +/* Legacy define */ +#define ADC_BASE ADC1_COMMON_BASE +#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00UL) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000UL) +#define SPI4_BASE (APB2PERIPH_BASE + 0x3400UL) +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800UL) +#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00UL) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4000UL) +#define TIM10_BASE (APB2PERIPH_BASE + 0x4400UL) +#define TIM11_BASE (APB2PERIPH_BASE + 0x4800UL) +#define SPI5_BASE (APB2PERIPH_BASE + 0x5000UL) + +/*!< AHB1 peripherals */ +#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000UL) +#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400UL) +#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800UL) +#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00UL) +#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000UL) +#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00UL) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000UL) +#define RCC_BASE (AHB1PERIPH_BASE + 0x3800UL) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00UL) +#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000UL) +#define DMA1_Stream0_BASE (DMA1_BASE + 0x010UL) +#define DMA1_Stream1_BASE (DMA1_BASE + 0x028UL) +#define DMA1_Stream2_BASE (DMA1_BASE + 0x040UL) +#define DMA1_Stream3_BASE (DMA1_BASE + 0x058UL) +#define DMA1_Stream4_BASE (DMA1_BASE + 0x070UL) +#define DMA1_Stream5_BASE (DMA1_BASE + 0x088UL) +#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0UL) +#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8UL) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400UL) +#define DMA2_Stream0_BASE (DMA2_BASE + 0x010UL) +#define DMA2_Stream1_BASE (DMA2_BASE + 0x028UL) +#define DMA2_Stream2_BASE (DMA2_BASE + 0x040UL) +#define DMA2_Stream3_BASE (DMA2_BASE + 0x058UL) +#define DMA2_Stream4_BASE (DMA2_BASE + 0x070UL) +#define DMA2_Stream5_BASE (DMA2_BASE + 0x088UL) +#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0UL) +#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8UL) + + +/*!< Debug MCU registers base address */ +#define DBGMCU_BASE 0xE0042000UL +/*!< USB registers base address */ +#define USB_OTG_FS_PERIPH_BASE 0x50000000UL + +#define USB_OTG_GLOBAL_BASE 0x000UL +#define USB_OTG_DEVICE_BASE 0x800UL +#define USB_OTG_IN_ENDPOINT_BASE 0x900UL +#define USB_OTG_OUT_ENDPOINT_BASE 0xB00UL +#define USB_OTG_EP_REG_SIZE 0x20UL +#define USB_OTG_HOST_BASE 0x400UL +#define USB_OTG_HOST_PORT_BASE 0x440UL +#define USB_OTG_HOST_CHANNEL_BASE 0x500UL +#define USB_OTG_HOST_CHANNEL_SIZE 0x20UL +#define USB_OTG_PCGCCTL_BASE 0xE00UL +#define USB_OTG_FIFO_BASE 0x1000UL +#define USB_OTG_FIFO_SIZE 0x1000UL + +#define UID_BASE 0x1FFF7A10UL /*!< Unique device ID register base address */ +#define FLASHSIZE_BASE 0x1FFF7A22UL /*!< FLASH Size register base address */ +#define PACKAGE_BASE 0x1FFF7BF0UL /*!< Package size register base address */ +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define I2S2ext ((SPI_TypeDef *) I2S2ext_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define I2S3ext ((SPI_TypeDef *) I2S3ext_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define USART6 ((USART_TypeDef *) USART6_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC1_COMMON ((ADC_Common_TypeDef *) ADC1_COMMON_BASE) +/* Legacy define */ +#define ADC ADC1_COMMON +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define SPI4 ((SPI_TypeDef *) SPI4_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SPI5 ((SPI_TypeDef *) SPI5_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 GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) +#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) +#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) +#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) +#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) +#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) +#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) +#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) +#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) +#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) +#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) +#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) +#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) +#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) +#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + +/** @addtogroup Hardware_Constant_Definition + * @{ + */ +#define LSI_STARTUP_TIME 40U /*!< LSI Maximum startup time in us */ +/** + * @} + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD_Pos (0U) +#define ADC_SR_AWD_Msk (0x1UL << ADC_SR_AWD_Pos) /*!< 0x00000001 */ +#define ADC_SR_AWD ADC_SR_AWD_Msk /*!>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ + return result; +} +#endif + + +/** + \brief Count leading zeros + \details 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 + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) +#else + #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) +#else + #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) +#else + #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (8 bit) + \details 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 + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXB(value, ptr) __strex(value, ptr) +#else + #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (16 bit) + \details 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 + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details 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 + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details 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 + \details 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 Rotate Right with Extend (32 bit) + \details 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) + \details 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) + \details 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) + \details 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) + \details 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) + \details 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) + \details 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) + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +#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) << 32U) ) >> 32U)) + +#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_H */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/cmsis_armclang.h b/access_control_stm32/Drivers/CMSIS/Include/cmsis_armclang.h new file mode 100644 index 0000000..162a400 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/cmsis_armclang.h @@ -0,0 +1,1869 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __ARM_COMPAT_H +#include /* Compatibility header for Arm Compiler 5 intrinsics */ +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); see arm_compat.h */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); see arm_compat.h */ + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "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 + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details 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 __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details 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() __builtin_arm_isb(0xF); + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF); + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF); + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __builtin_bswap32(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __ROR(__REV(value), 16) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) (int16_t)__builtin_bswap16(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details 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) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit + +/** + \brief Count leading zeros + \details 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 (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details 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 (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details 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 (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details 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 (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details 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 (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details 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 (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details 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 (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + +/** + \brief Signed Saturate + \details 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 __builtin_arm_ssat + + +/** + \brief Unsigned Saturate + \details 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 __builtin_arm_usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details 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 + */ +__STATIC_FORCEINLINE 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) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive 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 __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive 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 __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive 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 __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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) \ +({ \ + int32_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; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#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; \ + }) +#endif + +#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) ) + +__STATIC_FORCEINLINE int32_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); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/cmsis_compiler.h b/access_control_stm32/Drivers/CMSIS/Include/cmsis_compiler.h new file mode 100644 index 0000000..94212eb --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/cmsis_compiler.h @@ -0,0 +1,266 @@ +/**************************************************************************//** + * @file cmsis_compiler.h + * @brief CMSIS compiler generic header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler 4/5 + */ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + + +/* + * Arm Compiler 6 (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armclang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #include + + +/* + * TI Arm Compiler + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * 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. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __packed__ T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + @packed struct T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/access_control_stm32/Drivers/CMSIS/Include/cmsis_gcc.h b/access_control_stm32/Drivers/CMSIS/Include/cmsis_gcc.h new file mode 100644 index 0000000..2d9db15 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/cmsis_gcc.h @@ -0,0 +1,2085 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V5.0.4 + * @date 09. April 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory"); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi") + + +/** + \brief Wait For Event + \details 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() __ASM volatile ("wfe") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details 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. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE 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) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE 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 (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_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) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details 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) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; +} + + +/** + \brief Count leading zeros + \details 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 (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE 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) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE 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) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE 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) + \details 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 + */ +__STATIC_FORCEINLINE 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) + \details 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 + */ +__STATIC_FORCEINLINE 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) + \details 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 + */ +__STATIC_FORCEINLINE 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 + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ + __extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details 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 + */ +__STATIC_FORCEINLINE 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) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#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" (ptr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#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" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive 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 + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive 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 + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive 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 + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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) \ +({ \ + int32_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; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE 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); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#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; \ + }) +#endif + +#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) ) + +__STATIC_FORCEINLINE int32_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); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_H */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/cmsis_iccarm.h b/access_control_stm32/Drivers/CMSIS/Include/cmsis_iccarm.h new file mode 100644 index 0000000..11c4af0 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/cmsis_iccarm.h @@ -0,0 +1,935 @@ +/**************************************************************************//** + * @file cmsis_iccarm.h + * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file + * @version V5.0.7 + * @date 19. June 2018 + ******************************************************************************/ + +//------------------------------------------------------------------------------ +// +// Copyright (c) 2017-2018 IAR Systems +// +// Licensed under the Apache License, Version 2.0 (the "License") +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// 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. +// +//------------------------------------------------------------------------------ + + +#ifndef __CMSIS_ICCARM_H__ +#define __CMSIS_ICCARM_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#endif /* __CMSIS_ICCARM_H__ */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/cmsis_version.h b/access_control_stm32/Drivers/CMSIS/Include/cmsis_version.h new file mode 100644 index 0000000..660f612 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/cmsis_version.h @@ -0,0 +1,39 @@ +/**************************************************************************//** + * @file cmsis_version.h + * @brief CMSIS Core(M) Version definitions + * @version V5.0.2 + * @date 19. April 2017 + ******************************************************************************/ +/* + * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ +#endif diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_armv8mbl.h b/access_control_stm32/Drivers/CMSIS/Include/core_armv8mbl.h new file mode 100644 index 0000000..251e4ed --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_armv8mbl.h @@ -0,0 +1,1918 @@ +/**************************************************************************//** + * @file core_armv8mbl.h + * @brief CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MBL_H_GENERIC +#define __CORE_ARMV8MBL_H_GENERIC + +#include + +#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_ARMv8MBL + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __ARMv8MBL_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MBL_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MBL_CMSIS_VERSION ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MBL_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M ( 2U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MBL_H_DEPENDANT +#define __CORE_ARMV8MBL_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MBL_REV + #define __ARMv8MBL_REV 0x0000U + #warning "__ARMv8MBL_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT 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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MBL */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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_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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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_MASKINTS_Pos 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< 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_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< 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_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space 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 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 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, 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 TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_armv8mml.h b/access_control_stm32/Drivers/CMSIS/Include/core_armv8mml.h new file mode 100644 index 0000000..3a3148e --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_armv8mml.h @@ -0,0 +1,2927 @@ +/**************************************************************************//** + * @file core_armv8mml.h + * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MML_H_GENERIC +#define __CORE_ARMV8MML_H_GENERIC + +#include + +#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_ARMv8MML + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS Armv8MML definitions */ +#define __ARMv8MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MML_CMSIS_VERSION ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (81U) /*!< Cortex-M Core */ + +/** __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 defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MML_H_DEPENDANT +#define __CORE_ARMV8MML_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MML_REV + #define __ARMv8MML_REV 0x0000U + #warning "__ARMv8MML_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MML */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU 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 + { + 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 */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + 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 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< 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 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \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[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< 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 24U /*!< 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 20U /*!< 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 16U /*!< 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 12U /*!< 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 8U /*!< 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 4U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< 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 24U /*!< 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 4U /*!< 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 0U /*!< 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 */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state 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 TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, 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 TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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_ARMV8MML_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm0.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm0.h new file mode 100644 index 0000000..f929bba --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm0.h @@ -0,0 +1,949 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< 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 15U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm0plus.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm0plus.h new file mode 100644 index 0000000..424011a --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm0plus.h @@ -0,0 +1,1083 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#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+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ + __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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 _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< 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 15U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; + +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm1.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm1.h new file mode 100644 index 0000000..0ed678e --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm1.h @@ -0,0 +1,976 @@ +/**************************************************************************//** + * @file core_cm1.h + * @brief CMSIS Cortex-M1 Core Peripheral Access Layer Header File + * @version V1.0.0 + * @date 23. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM1_H_GENERIC +#define __CORE_CM1_H_GENERIC + +#include + +#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_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ +#define __CM1_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM1_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM1_CMSIS_VERSION ((__CM1_CMSIS_VERSION_MAIN << 16U) | \ + __CM1_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M1 */ + + + +/******************************************************************************* + * 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< 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 15U /*!< 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_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[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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-M1 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-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 */ + + +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm23.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm23.h new file mode 100644 index 0000000..acbc5df --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm23.h @@ -0,0 +1,1993 @@ +/**************************************************************************//** + * @file core_cm23.h + * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM23_H_GENERIC +#define __CORE_CM23_H_GENERIC + +#include + +#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_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __CM23_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM23_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM23_CMSIS_VERSION ((__CM23_CMSIS_VERSION_MAIN << 16U) | \ + __CM23_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT 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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M23 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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_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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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_MASKINTS_Pos 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< 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_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< 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_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space 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 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 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, 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 TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm3.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm3.h new file mode 100644 index 0000000..74bff64 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm3.h @@ -0,0 +1,1941 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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 _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< 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 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< 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 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< 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 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< 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 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* 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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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/access_control_stm32/Drivers/CMSIS/Include/core_cm33.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm33.h new file mode 100644 index 0000000..6cd2db7 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm33.h @@ -0,0 +1,3002 @@ +/**************************************************************************//** + * @file core_cm33.h + * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File + * @version V5.0.9 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM33_H_GENERIC +#define __CORE_CM33_H_GENERIC + +#include + +#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_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ +#define __CM33_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM33_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM33_CMSIS_VERSION ((__CM33_CMSIS_VERSION_MAIN << 16U) | \ + __CM33_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (33U) /*!< Cortex-M Core */ + +/** __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 defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_PCS_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M33 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU 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 + { + 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 */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + 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 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \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[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< 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 24U /*!< 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 20U /*!< 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 16U /*!< 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 12U /*!< 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 8U /*!< 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 4U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< 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 24U /*!< 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 4U /*!< 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 0U /*!< 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 */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state 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 TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, 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 TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_cm4.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm4.h new file mode 100644 index 0000000..7d56873 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm4.h @@ -0,0 +1,2129 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (4U) /*!< Cortex-M Core */ + +/** __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 defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + 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 */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< 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 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< 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 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< 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 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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 /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \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[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< 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 24U /*!< 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 20U /*!< 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 16U /*!< 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 12U /*!< 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 8U /*!< 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 4U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< 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 24U /*!< 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 4U /*!< 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 0U /*!< 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 */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< 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 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* 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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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/access_control_stm32/Drivers/CMSIS/Include/core_cm7.h b/access_control_stm32/Drivers/CMSIS/Include/core_cm7.h new file mode 100644 index 0000000..a14dc62 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_cm7.h @@ -0,0 +1,2671 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (7U) /*!< Cortex-M Core */ + +/** __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 defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + 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 */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< 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 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< 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 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< 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 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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 /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \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[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< 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 24U /*!< 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 20U /*!< 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 16U /*!< 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 12U /*!< 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 8U /*!< 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 4U /*!< 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 0U /*!< 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 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< 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 24U /*!< 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 4U /*!< 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 0U /*!< 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 Definitions */ + +/*@} end of group CMSIS_FPU */ + + +/** + \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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< 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 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * 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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = SCB->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## 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 ) + + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_INLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_INLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_INLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_INLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_INLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_INLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_INLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_INLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_InvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t)addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __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 defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* 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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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/access_control_stm32/Drivers/CMSIS/Include/core_sc000.h b/access_control_stm32/Drivers/CMSIS/Include/core_sc000.h new file mode 100644 index 0000000..9b67c92 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_sc000.h @@ -0,0 +1,1022 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (000U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< 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 15U /*!< 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_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[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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 SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/access_control_stm32/Drivers/CMSIS/Include/core_sc300.h b/access_control_stm32/Drivers/CMSIS/Include/core_sc300.h new file mode 100644 index 0000000..3e8a471 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/core_sc300.h @@ -0,0 +1,1915 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#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 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (300U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "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__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#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 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member 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 + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + 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; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \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; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \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 _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} 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 +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< 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 +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< 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 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< 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 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< 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 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< 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 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< 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 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< 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 4U /*!< 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 3U /*!< 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 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< 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 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< 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 8U /*!< 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 0U /*!< 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 */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< 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 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< 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[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1U]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< 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 +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< 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 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< 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 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< 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 +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 0U /*!< 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 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< 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 +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< 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 0U /*!< 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 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< 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 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< 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 0U /*!< 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 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< 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 27U /*!< 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 26U /*!< 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 24U /*!< 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 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< 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_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< 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 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \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 +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< 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 28U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 8U /*!< 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 1U /*!< 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 0U /*!< 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 +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< 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 25U /*!< 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 24U /*!< 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 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 5U /*!< 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 3U /*!< 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 2U /*!< 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 1U /*!< 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 0U /*!< 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 Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< 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 18U /*!< 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 17U /*!< 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 16U /*!< 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 10U /*!< 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 9U /*!< 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 8U /*!< 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 7U /*!< 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 6U /*!< 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 5U /*!< 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 4U /*!< 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 0U /*!< 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_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core 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 defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #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. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + + +/** + \brief Set Priority Grouping + \details 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)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details 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 ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \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 ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details 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 & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details 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* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details 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 - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* 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 (0UL); /* 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 ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details 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) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details 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 + \details 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/access_control_stm32/Drivers/CMSIS/Include/mpu_armv7.h b/access_control_stm32/Drivers/CMSIS/Include/mpu_armv7.h new file mode 100644 index 0000000..0142203 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/mpu_armv7.h @@ -0,0 +1,270 @@ +/****************************************************************************** + * @file mpu_armv7.h + * @brief CMSIS MPU API for Armv7-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField ) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable ) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable ) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable ) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec ) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) ) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if non-shareable) or 010b (if shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + orderedCpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + orderedCpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/access_control_stm32/Drivers/CMSIS/Include/mpu_armv8.h b/access_control_stm32/Drivers/CMSIS/Include/mpu_armv8.h new file mode 100644 index 0000000..62571da --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/mpu_armv8.h @@ -0,0 +1,333 @@ +/****************************************************************************** + * @file mpu_armv8.h + * @brief CMSIS MPU API for Armv8-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for normal memory (outer and inner) +* \param NT Non-Transient: Set to 1 for non-transient data. +* \param WB Write-Back: Set to 1 to use write-back update policy. +* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U))) + +/** \brief Normal memory non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. +* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + ((BASE & MPU_RBAR_BASE_Msk) | \ + ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + ((LIMIT & MPU_RLAR_LIMIT_Msk) | \ + ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + orderedCpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/access_control_stm32/Drivers/CMSIS/Include/tz_context.h b/access_control_stm32/Drivers/CMSIS/Include/tz_context.h new file mode 100644 index 0000000..0d09749 --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/Include/tz_context.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * @file tz_context.h + * @brief Context Management for Armv8-M TrustZone + * @version V1.0.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/access_control_stm32/Drivers/CMSIS/LICENSE.txt b/access_control_stm32/Drivers/CMSIS/LICENSE.txt new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/access_control_stm32/Drivers/CMSIS/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + 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. diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h new file mode 100644 index 0000000..934f1f9 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h @@ -0,0 +1,4014 @@ +/** + ****************************************************************************** + * @file stm32_hal_legacy.h + * @author MCD Application Team + * @brief This file contains aliases definition for the STM32Cube HAL constants + * macros and functions maintained for legacy purpose. + ****************************************************************************** + * @attention + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32_HAL_LEGACY +#define STM32_HAL_LEGACY + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose + * @{ + */ +#define AES_FLAG_RDERR CRYP_FLAG_RDERR +#define AES_FLAG_WRERR CRYP_FLAG_WRERR +#define AES_CLEARFLAG_CCF CRYP_CLEARFLAG_CCF +#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR +#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR +#if defined(STM32U5) || defined(STM32H7) || defined(STM32MP1) +#define CRYP_DATATYPE_32B CRYP_NO_SWAP +#define CRYP_DATATYPE_16B CRYP_HALFWORD_SWAP +#define CRYP_DATATYPE_8B CRYP_BYTE_SWAP +#define CRYP_DATATYPE_1B CRYP_BIT_SWAP +#if defined(STM32U5) +#define CRYP_CCF_CLEAR CRYP_CLEAR_CCF +#define CRYP_ERR_CLEAR CRYP_CLEAR_RWEIF +#endif /* STM32U5 */ +#endif /* STM32U5 || STM32H7 || STM32MP1 */ +/** + * @} + */ + +/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose + * @{ + */ +#define ADC_RESOLUTION12b ADC_RESOLUTION_12B +#define ADC_RESOLUTION10b ADC_RESOLUTION_10B +#define ADC_RESOLUTION8b ADC_RESOLUTION_8B +#define ADC_RESOLUTION6b ADC_RESOLUTION_6B +#define OVR_DATA_OVERWRITTEN ADC_OVR_DATA_OVERWRITTEN +#define OVR_DATA_PRESERVED ADC_OVR_DATA_PRESERVED +#define EOC_SINGLE_CONV ADC_EOC_SINGLE_CONV +#define EOC_SEQ_CONV ADC_EOC_SEQ_CONV +#define EOC_SINGLE_SEQ_CONV ADC_EOC_SINGLE_SEQ_CONV +#define REGULAR_GROUP ADC_REGULAR_GROUP +#define INJECTED_GROUP ADC_INJECTED_GROUP +#define REGULAR_INJECTED_GROUP ADC_REGULAR_INJECTED_GROUP +#define AWD_EVENT ADC_AWD_EVENT +#define AWD1_EVENT ADC_AWD1_EVENT +#define AWD2_EVENT ADC_AWD2_EVENT +#define AWD3_EVENT ADC_AWD3_EVENT +#define OVR_EVENT ADC_OVR_EVENT +#define JQOVF_EVENT ADC_JQOVF_EVENT +#define ALL_CHANNELS ADC_ALL_CHANNELS +#define REGULAR_CHANNELS ADC_REGULAR_CHANNELS +#define INJECTED_CHANNELS ADC_INJECTED_CHANNELS +#define SYSCFG_FLAG_SENSOR_ADC ADC_FLAG_SENSOR +#define SYSCFG_FLAG_VREF_ADC ADC_FLAG_VREFINT +#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 +#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 +#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 +#define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 +#define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO +#define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 +#define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 +#define ADC_EXTERNALTRIG_EDGE_NONE ADC_EXTERNALTRIGCONVEDGE_NONE +#define ADC_EXTERNALTRIG_EDGE_RISING ADC_EXTERNALTRIGCONVEDGE_RISING +#define ADC_EXTERNALTRIG_EDGE_FALLING ADC_EXTERNALTRIGCONVEDGE_FALLING +#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING +#define ADC_SAMPLETIME_2CYCLE_5 ADC_SAMPLETIME_2CYCLES_5 + +#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY +#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY +#define HAL_ADC_STATE_EOC_REG HAL_ADC_STATE_REG_EOC +#define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC +#define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL +#define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 + +#if defined(STM32H7) +#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT +#endif /* STM32H7 */ + +#if defined(STM32U5) +#define ADC_SAMPLETIME_5CYCLE ADC_SAMPLETIME_5CYCLES +#define ADC_SAMPLETIME_391CYCLES_5 ADC_SAMPLETIME_391CYCLES +#define ADC4_SAMPLETIME_160CYCLES_5 ADC4_SAMPLETIME_814CYCLES_5 +#endif /* STM32U5 */ + +/** + * @} + */ + +/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose + * @{ + */ +#define COMP_WINDOWMODE_DISABLED COMP_WINDOWMODE_DISABLE +#define COMP_WINDOWMODE_ENABLED COMP_WINDOWMODE_ENABLE +#define COMP_EXTI_LINE_COMP1_EVENT COMP_EXTI_LINE_COMP1 +#define COMP_EXTI_LINE_COMP2_EVENT COMP_EXTI_LINE_COMP2 +#define COMP_EXTI_LINE_COMP3_EVENT COMP_EXTI_LINE_COMP3 +#define COMP_EXTI_LINE_COMP4_EVENT COMP_EXTI_LINE_COMP4 +#define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5 +#define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6 +#define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7 +#if defined(STM32L0) +#define COMP_LPTIMCONNECTION_ENABLED ((uint32_t)0x00000003U) /*!< COMPX output generic naming: connected to LPTIM input 1 for COMP1, LPTIM input 2 for COMP2 */ +#endif +#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR +#if defined(STM32F373xC) || defined(STM32F378xx) +#define COMP_OUTPUT_TIM3IC1 COMP_OUTPUT_COMP1_TIM3IC1 +#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR +#endif /* STM32F373xC || STM32F378xx */ + +#if defined(STM32L0) || defined(STM32L4) +#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON + +#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1 +#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2 +#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3 +#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 +#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 +#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 + +#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT +#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT +#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT +#define COMP_INVERTINGINPUT_VREFINT COMP_INPUT_MINUS_VREFINT +#define COMP_INVERTINGINPUT_DAC1_CH1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC1_CH2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_DAC1 COMP_INPUT_MINUS_DAC1_CH1 +#define COMP_INVERTINGINPUT_DAC2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO1 COMP_INPUT_MINUS_IO1 +#if defined(STM32L0) +/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2), */ +/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding */ +/* to the second dedicated IO (only for COMP2). */ +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2 +#else +#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2 +#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3 +#endif +#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4 +#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5 + +#define COMP_OUTPUTLEVEL_LOW COMP_OUTPUT_LEVEL_LOW +#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH + +/* Note: Literal "COMP_FLAG_LOCK" kept for legacy purpose. */ +/* To check COMP lock state, use macro "__HAL_COMP_IS_LOCKED()". */ +#if defined(COMP_CSR_LOCK) +#define COMP_FLAG_LOCK COMP_CSR_LOCK +#elif defined(COMP_CSR_COMP1LOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK +#elif defined(COMP_CSR_COMPxLOCK) +#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK +#endif + +#if defined(STM32L4) +#define COMP_BLANKINGSRCE_TIM1OC5 COMP_BLANKINGSRC_TIM1_OC5_COMP1 +#define COMP_BLANKINGSRCE_TIM2OC3 COMP_BLANKINGSRC_TIM2_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC3 COMP_BLANKINGSRC_TIM3_OC3_COMP1 +#define COMP_BLANKINGSRCE_TIM3OC4 COMP_BLANKINGSRC_TIM3_OC4_COMP2 +#define COMP_BLANKINGSRCE_TIM8OC5 COMP_BLANKINGSRC_TIM8_OC5_COMP2 +#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2 +#define COMP_BLANKINGSRCE_NONE COMP_BLANKINGSRC_NONE +#endif + +#if defined(STM32L0) +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWSPEED COMP_POWERMODE_ULTRALOWPOWER +#else +#define COMP_MODE_HIGHSPEED COMP_POWERMODE_HIGHSPEED +#define COMP_MODE_MEDIUMSPEED COMP_POWERMODE_MEDIUMSPEED +#define COMP_MODE_LOWPOWER COMP_POWERMODE_LOWPOWER +#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER +#endif + +#endif +/** + * @} + */ + +/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose + * @{ + */ +#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig +#if defined(STM32U5) +#define MPU_DEVICE_nGnRnE MPU_DEVICE_NGNRNE +#define MPU_DEVICE_nGnRE MPU_DEVICE_NGNRE +#define MPU_DEVICE_nGRE MPU_DEVICE_NGRE +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup CRC_Aliases CRC API aliases + * @{ + */ +#if defined(STM32C0) +#else +#define HAL_CRC_Input_Data_Reverse HAL_CRCEx_Input_Data_Reverse /*!< Aliased to HAL_CRCEx_Input_Data_Reverse for inter STM32 series compatibility */ +#define HAL_CRC_Output_Data_Reverse HAL_CRCEx_Output_Data_Reverse /*!< Aliased to HAL_CRCEx_Output_Data_Reverse for inter STM32 series compatibility */ +#endif +/** + * @} + */ + +/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE +#define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define DAC1_CHANNEL_1 DAC_CHANNEL_1 +#define DAC1_CHANNEL_2 DAC_CHANNEL_2 +#define DAC2_CHANNEL_1 DAC_CHANNEL_1 +#define DAC_WAVE_NONE 0x00000000U +#define DAC_WAVE_NOISE DAC_CR_WAVE1_0 +#define DAC_WAVE_TRIANGLE DAC_CR_WAVE1_1 +#define DAC_WAVEGENERATION_NONE DAC_WAVE_NONE +#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE +#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE + +#if defined(STM32G4) || defined(STM32H7) || defined (STM32U5) +#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL +#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL +#endif + +#if defined(STM32U5) +#define DAC_TRIGGER_STOP_LPTIM1_OUT DAC_TRIGGER_STOP_LPTIM1_CH1 +#define DAC_TRIGGER_STOP_LPTIM3_OUT DAC_TRIGGER_STOP_LPTIM3_CH1 +#define DAC_TRIGGER_LPTIM1_OUT DAC_TRIGGER_LPTIM1_CH1 +#define DAC_TRIGGER_LPTIM3_OUT DAC_TRIGGER_LPTIM3_CH1 +#endif + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4) || defined(STM32G4) +#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID +#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID +#endif + +/** + * @} + */ + +/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 +#define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE +#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE + +#if defined(STM32L4) + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 HAL_DMAMUX1_REQ_GEN_EXTI1 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 HAL_DMAMUX1_REQ_GEN_EXTI2 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 HAL_DMAMUX1_REQ_GEN_EXTI3 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 HAL_DMAMUX1_REQ_GEN_EXTI4 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 HAL_DMAMUX1_REQ_GEN_EXTI5 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 HAL_DMAMUX1_REQ_GEN_EXTI6 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 HAL_DMAMUX1_REQ_GEN_EXTI7 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 HAL_DMAMUX1_REQ_GEN_EXTI8 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 HAL_DMAMUX1_REQ_GEN_EXTI9 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 HAL_DMAMUX1_REQ_GEN_EXTI10 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 HAL_DMAMUX1_REQ_GEN_EXTI11 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 HAL_DMAMUX1_REQ_GEN_EXTI12 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 HAL_DMAMUX1_REQ_GEN_EXTI13 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 HAL_DMAMUX1_REQ_GEN_EXTI14 +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 HAL_DMAMUX1_REQ_GEN_EXTI15 +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE HAL_DMAMUX1_REQ_GEN_DSI_TE +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT HAL_DMAMUX1_REQ_GEN_DSI_EOT +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT HAL_DMAMUX1_REQ_GEN_DMA2D_EOT +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT HAL_DMAMUX1_REQ_GEN_LTDC_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI +#endif + +#endif /* STM32L4 */ + +#if defined(STM32G0) +#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2 +#define DMA_REQUEST_TIM16_TRIG_COM DMA_REQUEST_TIM16_COM +#define DMA_REQUEST_TIM17_TRIG_COM DMA_REQUEST_TIM17_COM + +#define LL_DMAMUX_REQ_TIM16_TRIG_COM LL_DMAMUX_REQ_TIM16_COM +#define LL_DMAMUX_REQ_TIM17_TRIG_COM LL_DMAMUX_REQ_TIM17_COM +#endif + +#if defined(STM32H7) + +#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 +#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + +#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX +#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 +#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT +#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT +#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP +#define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 +#define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 +#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT +#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT +#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT +#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT +#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT +#define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING +#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + +#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT +#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT + +#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT +#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT + +#endif /* STM32H7 */ + +#if defined(STM32U5) +#define GPDMA1_REQUEST_DCMI GPDMA1_REQUEST_DCMI_PSSI +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD +#define TYPEPROGRAM_DOUBLEWORD FLASH_TYPEPROGRAM_DOUBLEWORD +#define TYPEERASE_SECTORS FLASH_TYPEERASE_SECTORS +#define TYPEERASE_PAGES FLASH_TYPEERASE_PAGES +#define TYPEERASE_PAGEERASE FLASH_TYPEERASE_PAGES +#define TYPEERASE_MASSERASE FLASH_TYPEERASE_MASSERASE +#define WRPSTATE_DISABLE OB_WRPSTATE_DISABLE +#define WRPSTATE_ENABLE OB_WRPSTATE_ENABLE +#define HAL_FLASH_TIMEOUT_VALUE FLASH_TIMEOUT_VALUE +#define OBEX_PCROP OPTIONBYTE_PCROP +#define OBEX_BOOTCONFIG OPTIONBYTE_BOOTCONFIG +#define PCROPSTATE_DISABLE OB_PCROP_STATE_DISABLE +#define PCROPSTATE_ENABLE OB_PCROP_STATE_ENABLE +#define TYPEERASEDATA_BYTE FLASH_TYPEERASEDATA_BYTE +#define TYPEERASEDATA_HALFWORD FLASH_TYPEERASEDATA_HALFWORD +#define TYPEERASEDATA_WORD FLASH_TYPEERASEDATA_WORD +#define TYPEPROGRAMDATA_BYTE FLASH_TYPEPROGRAMDATA_BYTE +#define TYPEPROGRAMDATA_HALFWORD FLASH_TYPEPROGRAMDATA_HALFWORD +#define TYPEPROGRAMDATA_WORD FLASH_TYPEPROGRAMDATA_WORD +#define TYPEPROGRAMDATA_FASTBYTE FLASH_TYPEPROGRAMDATA_FASTBYTE +#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD +#define TYPEPROGRAMDATA_FASTWORD FLASH_TYPEPROGRAMDATA_FASTWORD +#define PAGESIZE FLASH_PAGE_SIZE +#define TYPEPROGRAM_FASTBYTE FLASH_TYPEPROGRAM_BYTE +#define TYPEPROGRAM_FASTHALFWORD FLASH_TYPEPROGRAM_HALFWORD +#define TYPEPROGRAM_FASTWORD FLASH_TYPEPROGRAM_WORD +#define VOLTAGE_RANGE_1 FLASH_VOLTAGE_RANGE_1 +#define VOLTAGE_RANGE_2 FLASH_VOLTAGE_RANGE_2 +#define VOLTAGE_RANGE_3 FLASH_VOLTAGE_RANGE_3 +#define VOLTAGE_RANGE_4 FLASH_VOLTAGE_RANGE_4 +#define TYPEPROGRAM_FAST FLASH_TYPEPROGRAM_FAST +#define TYPEPROGRAM_FAST_AND_LAST FLASH_TYPEPROGRAM_FAST_AND_LAST +#define WRPAREA_BANK1_AREAA OB_WRPAREA_BANK1_AREAA +#define WRPAREA_BANK1_AREAB OB_WRPAREA_BANK1_AREAB +#define WRPAREA_BANK2_AREAA OB_WRPAREA_BANK2_AREAA +#define WRPAREA_BANK2_AREAB OB_WRPAREA_BANK2_AREAB +#define IWDG_STDBY_FREEZE OB_IWDG_STDBY_FREEZE +#define IWDG_STDBY_ACTIVE OB_IWDG_STDBY_RUN +#define IWDG_STOP_FREEZE OB_IWDG_STOP_FREEZE +#define IWDG_STOP_ACTIVE OB_IWDG_STOP_RUN +#define FLASH_ERROR_NONE HAL_FLASH_ERROR_NONE +#define FLASH_ERROR_RD HAL_FLASH_ERROR_RD +#define FLASH_ERROR_PG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_PGP HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_WRP HAL_FLASH_ERROR_WRP +#define FLASH_ERROR_OPTV HAL_FLASH_ERROR_OPTV +#define FLASH_ERROR_OPTVUSR HAL_FLASH_ERROR_OPTVUSR +#define FLASH_ERROR_PROG HAL_FLASH_ERROR_PROG +#define FLASH_ERROR_OP HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_PGA HAL_FLASH_ERROR_PGA +#define FLASH_ERROR_SIZE HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_SIZ HAL_FLASH_ERROR_SIZE +#define FLASH_ERROR_PGS HAL_FLASH_ERROR_PGS +#define FLASH_ERROR_MIS HAL_FLASH_ERROR_MIS +#define FLASH_ERROR_FAST HAL_FLASH_ERROR_FAST +#define FLASH_ERROR_FWWERR HAL_FLASH_ERROR_FWWERR +#define FLASH_ERROR_NOTZERO HAL_FLASH_ERROR_NOTZERO +#define FLASH_ERROR_OPERATION HAL_FLASH_ERROR_OPERATION +#define FLASH_ERROR_ERS HAL_FLASH_ERROR_ERS +#define OB_WDG_SW OB_IWDG_SW +#define OB_WDG_HW OB_IWDG_HW +#define OB_SDADC12_VDD_MONITOR_SET OB_SDACD_VDD_MONITOR_SET +#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET +#define OB_RAM_PARITY_CHECK_SET OB_SRAM_PARITY_SET +#define OB_RAM_PARITY_CHECK_RESET OB_SRAM_PARITY_RESET +#define IS_OB_SDADC12_VDD_MONITOR IS_OB_SDACD_VDD_MONITOR +#define OB_RDP_LEVEL0 OB_RDP_LEVEL_0 +#define OB_RDP_LEVEL1 OB_RDP_LEVEL_1 +#define OB_RDP_LEVEL2 OB_RDP_LEVEL_2 +#if defined(STM32G0) || defined(STM32C0) +#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE +#define OB_BOOT_LOCK_ENABLE OB_BOOT_ENTRY_FORCED_FLASH +#else +#define OB_BOOT_ENTRY_FORCED_NONE OB_BOOT_LOCK_DISABLE +#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE +#endif +#if defined(STM32H7) +#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1 +#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1 +#define FLASH_FLAG_STRBER_BANK1R FLASH_FLAG_STRBERR_BANK1 +#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2 +#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2 +#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2 +#define FLASH_FLAG_WDW FLASH_FLAG_WBNE +#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL +#endif /* STM32H7 */ +#if defined(STM32U5) +#define OB_USER_nRST_STOP OB_USER_NRST_STOP +#define OB_USER_nRST_STDBY OB_USER_NRST_STDBY +#define OB_USER_nRST_SHDW OB_USER_NRST_SHDW +#define OB_USER_nSWBOOT0 OB_USER_NSWBOOT0 +#define OB_USER_nBOOT0 OB_USER_NBOOT0 +#define OB_nBOOT0_RESET OB_NBOOT0_RESET +#define OB_nBOOT0_SET OB_NBOOT0_SET +#endif /* STM32U5 */ + +/** + * @} + */ + +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) +#define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE +#define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE +#define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET +#define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET +#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE +#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose + * @{ + */ + +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7 I2C_FASTMODEPLUS_PB7 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8 I2C_FASTMODEPLUS_PB8 +#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9 I2C_FASTMODEPLUS_PB9 +#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1 +#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2 +#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3 +#if defined(STM32G4) + +#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster +#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster +#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD +#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD +#endif /* STM32G4 */ + +/** + * @} + */ + + +/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose + * @{ + */ +#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) +#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE +#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE +#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8 +#define FMC_NAND_PCC_MEM_BUS_WIDTH_16 FMC_NAND_MEM_BUS_WIDTH_16 +#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) +#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE +#define FMC_NAND_WAIT_FEATURE_ENABLE FMC_NAND_PCC_WAIT_FEATURE_ENABLE +#define FMC_NAND_MEM_BUS_WIDTH_8 FMC_NAND_PCC_MEM_BUS_WIDTH_8 +#define FMC_NAND_MEM_BUS_WIDTH_16 FMC_NAND_PCC_MEM_BUS_WIDTH_16 +#endif +/** + * @} + */ + +/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef +#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef +/** + * @} + */ + +/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose + * @{ + */ +#define GET_GPIO_SOURCE GPIO_GET_INDEX +#define GET_GPIO_INDEX GPIO_GET_INDEX + +#if defined(STM32F4) +#define GPIO_AF12_SDMMC GPIO_AF12_SDIO +#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO +#endif + +#if defined(STM32F7) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32L4) +#define GPIO_AF12_SDIO GPIO_AF12_SDMMC1 +#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1 +#endif + +#if defined(STM32H7) +#define GPIO_AF7_SDIO1 GPIO_AF7_SDMMC1 +#define GPIO_AF8_SDIO1 GPIO_AF8_SDMMC1 +#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1 +#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2 +#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2 +#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2 + +#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \ + defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx) +#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS +#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS +#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS +#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */ +#endif /* STM32H7 */ + +#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1 +#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1 +#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1 + +#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7) || defined(STM32WB) || defined(STM32U5) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7 || STM32WB || STM32U5*/ + +#if defined(STM32L1) +#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L1 */ + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_HIGH +#endif /* STM32F0 || STM32F3 || STM32F1 */ + +#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1 + +#if defined(STM32U5) +#define GPIO_AF0_RTC_50Hz GPIO_AF0_RTC_50HZ +#endif /* STM32U5 */ +#if defined(STM32U5) +#define GPIO_AF0_S2DSTOP GPIO_AF0_SRDSTOP +#define GPIO_AF11_LPGPIO GPIO_AF11_LPGPIO1 +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_GTZC_Aliased_Defines HAL GTZC Aliased Defines maintained for legacy purpose + * @{ + */ +#if defined(STM32U5) +#define GTZC_PERIPH_DCMI GTZC_PERIPH_DCMI_PSSI +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define HRTIM_TIMDELAYEDPROTECTION_DISABLED HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 +#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 +#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 + +#define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER +#define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER +#define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD +#define __HAL_HRTIM_GetPeriod __HAL_HRTIM_GETPERIOD +#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER +#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER +#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE +#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE + +#if defined(STM32G4) +#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig +#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable +#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable +#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset +#define HRTIM_TIMEEVENT_A HRTIM_EVENTCOUNTER_A +#define HRTIM_TIMEEVENT_B HRTIM_EVENTCOUNTER_B +#define HRTIM_TIMEEVENTRESETMODE_UNCONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_UNCONDITIONAL +#define HRTIM_TIMEEVENTRESETMODE_CONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_CONDITIONAL +#endif /* STM32G4 */ + +#if defined(STM32H7) +#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 + +#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9 +#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1 +#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2 +#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3 +#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4 +#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5 +#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6 +#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7 +#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8 +#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9 +#endif /* STM32H7 */ + +#if defined(STM32F3) +/** @brief Constants defining available sources associated to external events. + */ +#define HRTIM_EVENTSRC_1 (0x00000000U) +#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0) +#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1) +#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0) + +/** @brief Constants defining the DLL calibration periods (in micro seconds) + */ +#define HRTIM_CALIBRATIONRATE_7300 0x00000000U +#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0) +#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1) +#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0) + +#endif /* STM32F3 */ +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2C_DUALADDRESS_DISABLED I2C_DUALADDRESS_DISABLE +#define I2C_DUALADDRESS_ENABLED I2C_DUALADDRESS_ENABLE +#define I2C_GENERALCALL_DISABLED I2C_GENERALCALL_DISABLE +#define I2C_GENERALCALL_ENABLED I2C_GENERALCALL_ENABLE +#define I2C_NOSTRETCH_DISABLED I2C_NOSTRETCH_DISABLE +#define I2C_NOSTRETCH_ENABLED I2C_NOSTRETCH_ENABLE +#define I2C_ANALOGFILTER_ENABLED I2C_ANALOGFILTER_ENABLE +#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE +#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7) +#define HAL_I2C_STATE_MEM_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MEM_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX +#define HAL_I2C_STATE_SLAVE_BUSY_TX HAL_I2C_STATE_BUSY_TX +#define HAL_I2C_STATE_SLAVE_BUSY_RX HAL_I2C_STATE_BUSY_RX +#endif +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose + * @{ + */ +#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE +#define IRDA_ONE_BIT_SAMPLE_ENABLED IRDA_ONE_BIT_SAMPLE_ENABLE + +/** + * @} + */ + +/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define KR_KEY_RELOAD IWDG_KEY_RELOAD +#define KR_KEY_ENABLE IWDG_KEY_ENABLE +#define KR_KEY_EWA IWDG_KEY_WRITE_ACCESS_ENABLE +#define KR_KEY_DWA IWDG_KEY_WRITE_ACCESS_DISABLE +/** + * @} + */ + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ + +#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION +#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS LPTIM_CLOCKSAMPLETIME_2TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS LPTIM_CLOCKSAMPLETIME_4TRANSITIONS +#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS LPTIM_CLOCKSAMPLETIME_8TRANSITIONS + +#define LPTIM_CLOCKPOLARITY_RISINGEDGE LPTIM_CLOCKPOLARITY_RISING +#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING +#define LPTIM_CLOCKPOLARITY_BOTHEDGES LPTIM_CLOCKPOLARITY_RISING_FALLING + +#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION +#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS + +/* The following 3 definition have also been present in a temporary version of lptim.h */ +/* They need to be renamed also to the right name, just in case */ +#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS + + +/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_LPTIM_ReadCompare HAL_LPTIM_ReadCapturedValue +/** + * @} + */ + +#if defined(STM32U5) +#define LPTIM_ISR_CC1 LPTIM_ISR_CC1IF +#define LPTIM_ISR_CC2 LPTIM_ISR_CC2IF +#define LPTIM_CHANNEL_ALL 0x00000000U +#endif /* STM32U5 */ +/** + * @} + */ + +/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_NAND_Read_Page HAL_NAND_Read_Page_8b +#define HAL_NAND_Write_Page HAL_NAND_Write_Page_8b +#define HAL_NAND_Read_SpareArea HAL_NAND_Read_SpareArea_8b +#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b + +#define NAND_AddressTypedef NAND_AddressTypeDef + +#define __ARRAY_ADDRESS ARRAY_ADDRESS +#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE +#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE +#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE +#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE +/** + * @} + */ + +/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose + * @{ + */ +#define NOR_StatusTypedef HAL_NOR_StatusTypeDef +#define NOR_SUCCESS HAL_NOR_STATUS_SUCCESS +#define NOR_ONGOING HAL_NOR_STATUS_ONGOING +#define NOR_ERROR HAL_NOR_STATUS_ERROR +#define NOR_TIMEOUT HAL_NOR_STATUS_TIMEOUT + +#define __NOR_WRITE NOR_WRITE +#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT +/** + * @} + */ + +/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose + * @{ + */ + +#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0 +#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 +#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 +#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 + +#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 +#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 +#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 + +#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 +#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 + +#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + +#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7) || defined(STM32G4) +#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID +#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID +#endif + +#if defined(STM32L4) || defined(STM32L5) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALPOWER +#elif defined(STM32G4) +#define OPAMP_POWERMODE_NORMAL OPAMP_POWERMODE_NORMALSPEED +#endif + +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose + * @{ + */ +#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS + +#if defined(STM32H7) +#define I2S_IT_TXE I2S_IT_TXP +#define I2S_IT_RXNE I2S_IT_RXP + +#define I2S_FLAG_TXE I2S_FLAG_TXP +#define I2S_FLAG_RXNE I2S_FLAG_RXP +#endif + +#if defined(STM32F7) +#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL +#endif +/** + * @} + */ + +/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose + * @{ + */ + +/* Compact Flash-ATA registers description */ +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA + +/* Compact Flash-ATA commands */ +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD +#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD +#define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD + +#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef +#define PCCARD_SUCCESS HAL_PCCARD_STATUS_SUCCESS +#define PCCARD_ONGOING HAL_PCCARD_STATUS_ONGOING +#define PCCARD_ERROR HAL_PCCARD_STATUS_ERROR +#define PCCARD_TIMEOUT HAL_PCCARD_STATUS_TIMEOUT +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose + * @{ + */ + +#define FORMAT_BIN RTC_FORMAT_BIN +#define FORMAT_BCD RTC_FORMAT_BCD + +#define RTC_ALARMSUBSECONDMASK_None RTC_ALARMSUBSECONDMASK_NONE +#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE +#define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE + +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT + +#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 + +#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE +#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 +#define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 + +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 + +#if defined(STM32F7) +#define RTC_TAMPCR_TAMPXE RTC_TAMPER_ENABLE_BITS_MASK +#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_IT_ENABLE_BITS_MASK +#endif /* STM32F7 */ + +#if defined(STM32H7) +#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X +#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT +#endif /* STM32H7 */ + +#if defined(STM32F7) || defined(STM32H7) +#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1 +#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2 +#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3 +#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMP +#endif /* STM32F7 || STM32H7 */ + +/** + * @} + */ + + +/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMARTCARD_NACK_ENABLED SMARTCARD_NACK_ENABLE +#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE + +#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLED SMARTCARD_ONE_BIT_SAMPLE_ENABLE +#define SMARTCARD_ONEBIT_SAMPLING_DISABLE SMARTCARD_ONE_BIT_SAMPLE_DISABLE +#define SMARTCARD_ONEBIT_SAMPLING_ENABLE SMARTCARD_ONE_BIT_SAMPLE_ENABLE + +#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE +#define SMARTCARD_TIMEOUT_ENABLED SMARTCARD_TIMEOUT_ENABLE + +#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE +#define SMARTCARD_LASTBIT_ENABLED SMARTCARD_LASTBIT_ENABLE +/** + * @} + */ + + +/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose + * @{ + */ +#define SMBUS_DUALADDRESS_DISABLED SMBUS_DUALADDRESS_DISABLE +#define SMBUS_DUALADDRESS_ENABLED SMBUS_DUALADDRESS_ENABLE +#define SMBUS_GENERALCALL_DISABLED SMBUS_GENERALCALL_DISABLE +#define SMBUS_GENERALCALL_ENABLED SMBUS_GENERALCALL_ENABLE +#define SMBUS_NOSTRETCH_DISABLED SMBUS_NOSTRETCH_DISABLE +#define SMBUS_NOSTRETCH_ENABLED SMBUS_NOSTRETCH_ENABLE +#define SMBUS_ANALOGFILTER_ENABLED SMBUS_ANALOGFILTER_ENABLE +#define SMBUS_ANALOGFILTER_DISABLED SMBUS_ANALOGFILTER_DISABLE +#define SMBUS_PEC_DISABLED SMBUS_PEC_DISABLE +#define SMBUS_PEC_ENABLED SMBUS_PEC_ENABLE +#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose + * @{ + */ +#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE +#define SPI_TIMODE_ENABLED SPI_TIMODE_ENABLE + +#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE +#define SPI_CRCCALCULATION_ENABLED SPI_CRCCALCULATION_ENABLE + +#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE +#define SPI_NSS_PULSE_ENABLED SPI_NSS_PULSE_ENABLE + +#if defined(STM32H7) + +#define SPI_FLAG_TXE SPI_FLAG_TXP +#define SPI_FLAG_RXNE SPI_FLAG_RXP + +#define SPI_IT_TXE SPI_IT_TXP +#define SPI_IT_RXNE SPI_IT_RXP + +#define SPI_FRLVL_EMPTY SPI_RX_FIFO_0PACKET +#define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET +#define SPI_FRLVL_HALF_FULL SPI_RX_FIFO_2PACKET +#define SPI_FRLVL_FULL SPI_RX_FIFO_3PACKET + +#endif /* STM32H7 */ + +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose + * @{ + */ +#define CCER_CCxE_MASK TIM_CCER_CCxE_MASK +#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK + +#define TIM_DMABase_CR1 TIM_DMABASE_CR1 +#define TIM_DMABase_CR2 TIM_DMABASE_CR2 +#define TIM_DMABase_SMCR TIM_DMABASE_SMCR +#define TIM_DMABase_DIER TIM_DMABASE_DIER +#define TIM_DMABase_SR TIM_DMABASE_SR +#define TIM_DMABase_EGR TIM_DMABASE_EGR +#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1 +#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2 +#define TIM_DMABase_CCER TIM_DMABASE_CCER +#define TIM_DMABase_CNT TIM_DMABASE_CNT +#define TIM_DMABase_PSC TIM_DMABASE_PSC +#define TIM_DMABase_ARR TIM_DMABASE_ARR +#define TIM_DMABase_RCR TIM_DMABASE_RCR +#define TIM_DMABase_CCR1 TIM_DMABASE_CCR1 +#define TIM_DMABase_CCR2 TIM_DMABASE_CCR2 +#define TIM_DMABase_CCR3 TIM_DMABASE_CCR3 +#define TIM_DMABase_CCR4 TIM_DMABASE_CCR4 +#define TIM_DMABase_BDTR TIM_DMABASE_BDTR +#define TIM_DMABase_DCR TIM_DMABASE_DCR +#define TIM_DMABase_DMAR TIM_DMABASE_DMAR +#define TIM_DMABase_OR1 TIM_DMABASE_OR1 +#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3 +#define TIM_DMABase_CCR5 TIM_DMABASE_CCR5 +#define TIM_DMABase_CCR6 TIM_DMABASE_CCR6 +#define TIM_DMABase_OR2 TIM_DMABASE_OR2 +#define TIM_DMABase_OR3 TIM_DMABASE_OR3 +#define TIM_DMABase_OR TIM_DMABASE_OR + +#define TIM_EventSource_Update TIM_EVENTSOURCE_UPDATE +#define TIM_EventSource_CC1 TIM_EVENTSOURCE_CC1 +#define TIM_EventSource_CC2 TIM_EVENTSOURCE_CC2 +#define TIM_EventSource_CC3 TIM_EVENTSOURCE_CC3 +#define TIM_EventSource_CC4 TIM_EVENTSOURCE_CC4 +#define TIM_EventSource_COM TIM_EVENTSOURCE_COM +#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER +#define TIM_EventSource_Break TIM_EVENTSOURCE_BREAK +#define TIM_EventSource_Break2 TIM_EVENTSOURCE_BREAK2 + +#define TIM_DMABurstLength_1Transfer TIM_DMABURSTLENGTH_1TRANSFER +#define TIM_DMABurstLength_2Transfers TIM_DMABURSTLENGTH_2TRANSFERS +#define TIM_DMABurstLength_3Transfers TIM_DMABURSTLENGTH_3TRANSFERS +#define TIM_DMABurstLength_4Transfers TIM_DMABURSTLENGTH_4TRANSFERS +#define TIM_DMABurstLength_5Transfers TIM_DMABURSTLENGTH_5TRANSFERS +#define TIM_DMABurstLength_6Transfers TIM_DMABURSTLENGTH_6TRANSFERS +#define TIM_DMABurstLength_7Transfers TIM_DMABURSTLENGTH_7TRANSFERS +#define TIM_DMABurstLength_8Transfers TIM_DMABURSTLENGTH_8TRANSFERS +#define TIM_DMABurstLength_9Transfers TIM_DMABURSTLENGTH_9TRANSFERS +#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS +#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS +#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS +#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS +#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS +#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS +#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS +#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS +#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS + +#if defined(STM32L0) +#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO +#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO +#endif + +#if defined(STM32F3) +#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE +#endif + +#if defined(STM32H7) +#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1 +#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2 +#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1 +#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2 +#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1 +#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2 +#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1 +#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1 +#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2 +#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1 +#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2 +#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2 +#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1 +#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2 +#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2 +#endif + +#if defined(STM32U5) || defined(STM32MP2) +#define OCREF_CLEAR_SELECT_Pos OCREF_CLEAR_SELECT_POS +#define OCREF_CLEAR_SELECT_Msk OCREF_CLEAR_SELECT_MSK +#endif +/** + * @} + */ + +/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose + * @{ + */ +#define TSC_SYNC_POL_FALL TSC_SYNC_POLARITY_FALLING +#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose + * @{ + */ +#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONEBIT_SAMPLING_ENABLED UART_ONE_BIT_SAMPLE_ENABLE +#define UART_ONE_BIT_SAMPLE_DISABLED UART_ONE_BIT_SAMPLE_DISABLE +#define UART_ONE_BIT_SAMPLE_ENABLED UART_ONE_BIT_SAMPLE_ENABLE + +#define __HAL_UART_ONEBIT_ENABLE __HAL_UART_ONE_BIT_SAMPLE_ENABLE +#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE + +#define __DIV_SAMPLING16 UART_DIV_SAMPLING16 +#define __DIVMANT_SAMPLING16 UART_DIVMANT_SAMPLING16 +#define __DIVFRAQ_SAMPLING16 UART_DIVFRAQ_SAMPLING16 +#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16 + +#define __DIV_SAMPLING8 UART_DIV_SAMPLING8 +#define __DIVMANT_SAMPLING8 UART_DIVMANT_SAMPLING8 +#define __DIVFRAQ_SAMPLING8 UART_DIVFRAQ_SAMPLING8 +#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8 + +#define __DIV_LPUART UART_DIV_LPUART + +#define UART_WAKEUPMETHODE_IDLELINE UART_WAKEUPMETHOD_IDLELINE +#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose + * @{ + */ + +#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE +#define USART_CLOCK_ENABLED USART_CLOCK_ENABLE + +#define USARTNACK_ENABLED USART_NACK_ENABLE +#define USARTNACK_DISABLED USART_NACK_DISABLE +/** + * @} + */ + +/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose + * @{ + */ +#define CFR_BASE WWDG_CFR_BASE + +/** + * @} + */ + +/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose + * @{ + */ +#define CAN_FilterFIFO0 CAN_FILTER_FIFO0 +#define CAN_FilterFIFO1 CAN_FILTER_FIFO1 +#define CAN_IT_RQCP0 CAN_IT_TME +#define CAN_IT_RQCP1 CAN_IT_TME +#define CAN_IT_RQCP2 CAN_IT_TME +#define INAK_TIMEOUT CAN_TIMEOUT_VALUE +#define SLAK_TIMEOUT CAN_TIMEOUT_VALUE +#define CAN_TXSTATUS_FAILED ((uint8_t)0x00U) +#define CAN_TXSTATUS_OK ((uint8_t)0x01U) +#define CAN_TXSTATUS_PENDING ((uint8_t)0x02U) + +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose + * @{ + */ + +#define VLAN_TAG ETH_VLAN_TAG +#define MIN_ETH_PAYLOAD ETH_MIN_ETH_PAYLOAD +#define MAX_ETH_PAYLOAD ETH_MAX_ETH_PAYLOAD +#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD +#define MACMIIAR_CR_MASK ETH_MACMIIAR_CR_MASK +#define MACCR_CLEAR_MASK ETH_MACCR_CLEAR_MASK +#define MACFCR_CLEAR_MASK ETH_MACFCR_CLEAR_MASK +#define DMAOMR_CLEAR_MASK ETH_DMAOMR_CLEAR_MASK + +#define ETH_MMCCR 0x00000100U +#define ETH_MMCRIR 0x00000104U +#define ETH_MMCTIR 0x00000108U +#define ETH_MMCRIMR 0x0000010CU +#define ETH_MMCTIMR 0x00000110U +#define ETH_MMCTGFSCCR 0x0000014CU +#define ETH_MMCTGFMSCCR 0x00000150U +#define ETH_MMCTGFCR 0x00000168U +#define ETH_MMCRFCECR 0x00000194U +#define ETH_MMCRFAECR 0x00000198U +#define ETH_MMCRGUFCR 0x000001C4U + +#define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ +#define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ +#define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ +#define ETH_MAC_TXFIFO_IDLE 0x00000000U /* Tx FIFO read status: Idle */ +#define ETH_MAC_TXFIFO_READ 0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */ +#define ETH_MAC_TXFIFO_WAITING 0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */ +#define ETH_MAC_TXFIFO_WRITING 0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */ +#define ETH_MAC_TRANSMISSION_PAUSE 0x00080000U /* MAC transmitter in pause */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE 0x00000000U /* MAC transmit frame controller: Idle */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING 0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */ +#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING 0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */ +#define ETH_MAC_MII_TRANSMIT_ACTIVE 0x00010000U /* MAC MII transmit engine active */ +#define ETH_MAC_RXFIFO_EMPTY 0x00000000U /* Rx FIFO fill level: empty */ +#define ETH_MAC_RXFIFO_BELOW_THRESHOLD 0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */ +#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD 0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */ +#define ETH_MAC_RXFIFO_FULL 0x00000300U /* Rx FIFO fill level: full */ +#if defined(STM32F1) +#else +#define ETH_MAC_READCONTROLLER_IDLE 0x00000000U /* Rx FIFO read controller IDLE state */ +#define ETH_MAC_READCONTROLLER_READING_DATA 0x00000020U /* Rx FIFO read controller Reading frame data */ +#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */ +#endif +#define ETH_MAC_READCONTROLLER_FLUSHING 0x00000060U /* Rx FIFO read controller Flushing the frame data and status */ +#define ETH_MAC_RXFIFO_WRITE_ACTIVE 0x00000010U /* Rx FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_NOTACTIVE 0x00000000U /* MAC small FIFO read / write controllers not active */ +#define ETH_MAC_SMALL_FIFO_READ_ACTIVE 0x00000002U /* MAC small FIFO read controller active */ +#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE 0x00000004U /* MAC small FIFO write controller active */ +#define ETH_MAC_SMALL_FIFO_RW_ACTIVE 0x00000006U /* MAC small FIFO read / write controllers active */ +#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */ + +/** + * @} + */ + +/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose + * @{ + */ +#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR +#define DCMI_IT_OVF DCMI_IT_OVR +#define DCMI_FLAG_OVFRI DCMI_FLAG_OVRRI +#define DCMI_FLAG_OVFMI DCMI_FLAG_OVRMI + +#define HAL_DCMI_ConfigCROP HAL_DCMI_ConfigCrop +#define HAL_DCMI_EnableCROP HAL_DCMI_EnableCrop +#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop + +/** + * @} + */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) +/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose + * @{ + */ +#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 +#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 + +#define CM_ARGB8888 DMA2D_INPUT_ARGB8888 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_ARGB1555 DMA2D_INPUT_ARGB1555 +#define CM_ARGB4444 DMA2D_INPUT_ARGB4444 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 +/** + * @} + */ +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 */ + +#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) \ + || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \ + || defined(STM32H7) || defined(STM32U5) +/** @defgroup DMA2D_Aliases DMA2D API Aliases + * @{ + */ +#define HAL_DMA2D_DisableCLUT HAL_DMA2D_CLUTLoading_Abort /*!< Aliased to HAL_DMA2D_CLUTLoading_Abort + for compatibility with legacy code */ +/** + * @} + */ + +#endif /* STM32L4 || STM32F7 || STM32F4 || STM32H7 || STM32U5 */ + +/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback +/** + * @} + */ + +/** @defgroup HAL_DCACHE_Aliased_Functions HAL DCACHE Aliased Functions maintained for legacy purpose + * @{ + */ + +#if defined(STM32U5) +#define HAL_DCACHE_CleanInvalidateByAddr HAL_DCACHE_CleanInvalidByAddr +#define HAL_DCACHE_CleanInvalidateByAddr_IT HAL_DCACHE_CleanInvalidByAddr_IT +#endif /* STM32U5 */ + +/** + * @} + */ + +#if !defined(STM32F2) +/** @defgroup HASH_alias HASH API alias + * @{ + */ +#define HAL_HASHEx_IRQHandler HAL_HASH_IRQHandler /*!< Redirection for compatibility with legacy code */ +/** + * + * @} + */ +#endif /* STM32F2 */ +/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef +#define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef +#define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish +#define HAL_HMAC_SHA1_Finish HAL_HASH_SHA1_Finish +#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish +#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish + +/*HASH Algorithm Selection*/ + +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 +#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 +#define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 + +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC + +#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY +#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY + +#if defined(STM32L4) || defined(STM32L5) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) + +#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt +#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End +#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT +#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT + +#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt +#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End +#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT +#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT + +#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt +#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End +#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT +#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT + +#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt +#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End +#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT +#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT + +#endif /* STM32L4 || STM32L5 || STM32F2 || STM32F4 || STM32F7 || STM32H7 */ +/** + * @} + */ + +/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_EnableDBGSleepMode HAL_DBGMCU_EnableDBGSleepMode +#define HAL_DisableDBGSleepMode HAL_DBGMCU_DisableDBGSleepMode +#define HAL_EnableDBGStopMode HAL_DBGMCU_EnableDBGStopMode +#define HAL_DisableDBGStopMode HAL_DBGMCU_DisableDBGStopMode +#define HAL_EnableDBGStandbyMode HAL_DBGMCU_EnableDBGStandbyMode +#define HAL_DisableDBGStandbyMode HAL_DBGMCU_DisableDBGStandbyMode +#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd\ + )==ENABLE)? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph)) +#define HAL_VREFINT_OutputSelect HAL_SYSCFG_VREFINT_OutputSelect +#define HAL_Lock_Cmd(cmd) (((cmd)==ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT()) +#if defined(STM32L0) +#else +#define HAL_VREFINT_Cmd(cmd) (((cmd)==ENABLE)? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT()) +#endif +#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT()) +#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd\ + )==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor()) +#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ) +#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode +#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode +#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode +#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode +#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */ + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose + * @{ + */ +#define FLASH_HalfPageProgram HAL_FLASHEx_HalfPageProgram +#define FLASH_EnableRunPowerDown HAL_FLASHEx_EnableRunPowerDown +#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown +#define HAL_DATA_EEPROMEx_Unlock HAL_FLASHEx_DATAEEPROM_Unlock +#define HAL_DATA_EEPROMEx_Lock HAL_FLASHEx_DATAEEPROM_Lock +#define HAL_DATA_EEPROMEx_Erase HAL_FLASHEx_DATAEEPROM_Erase +#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_I2CEx_AnalogFilter_Config HAL_I2CEx_ConfigAnalogFilter +#define HAL_I2CEx_DigitalFilter_Config HAL_I2CEx_ConfigDigitalFilter +#define HAL_FMPI2CEx_AnalogFilter_Config HAL_FMPI2CEx_ConfigAnalogFilter +#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter + +#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd\ + )==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus)) + +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4) || defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT +#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT +#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT +#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */ +#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)|| defined(STM32L1) +#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA +#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA +#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA +#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA +#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */ + +#if defined(STM32F4) +#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT +#define HAL_FMPI2C_Master_Sequential_Receive_IT HAL_FMPI2C_Master_Seq_Receive_IT +#define HAL_FMPI2C_Slave_Sequential_Transmit_IT HAL_FMPI2C_Slave_Seq_Transmit_IT +#define HAL_FMPI2C_Slave_Sequential_Receive_IT HAL_FMPI2C_Slave_Seq_Receive_IT +#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA +#define HAL_FMPI2C_Master_Sequential_Receive_DMA HAL_FMPI2C_Master_Seq_Receive_DMA +#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA HAL_FMPI2C_Slave_Seq_Transmit_DMA +#define HAL_FMPI2C_Slave_Sequential_Receive_DMA HAL_FMPI2C_Slave_Seq_Receive_DMA +#endif /* STM32F4 */ +/** + * @} + */ + +/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose + * @{ + */ + +#if defined(STM32G0) +#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD +#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD +#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD +#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler +#endif +#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD +#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg +#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown +#define HAL_PWR_DisableVddio2Monitor HAL_PWREx_DisableVddio2Monitor +#define HAL_PWR_EnableBkUpReg HAL_PWREx_EnableBkUpReg +#define HAL_PWR_EnableFlashPowerDown HAL_PWREx_EnableFlashPowerDown +#define HAL_PWR_EnableVddio2Monitor HAL_PWREx_EnableVddio2Monitor +#define HAL_PWR_PVD_PVM_IRQHandler HAL_PWREx_PVD_PVM_IRQHandler +#define HAL_PWR_PVDLevelConfig HAL_PWR_ConfigPVD +#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler +#define HAL_PWR_Vddio2MonitorCallback HAL_PWREx_Vddio2MonitorCallback +#define HAL_PWREx_ActivateOverDrive HAL_PWREx_EnableOverDrive +#define HAL_PWREx_DeactivateOverDrive HAL_PWREx_DisableOverDrive +#define HAL_PWREx_DisableSDADCAnalog HAL_PWREx_DisableSDADC +#define HAL_PWREx_EnableSDADCAnalog HAL_PWREx_EnableSDADC +#define HAL_PWREx_PVMConfig HAL_PWREx_ConfigPVM + +#define PWR_MODE_NORMAL PWR_PVD_MODE_NORMAL +#define PWR_MODE_IT_RISING PWR_PVD_MODE_IT_RISING +#define PWR_MODE_IT_FALLING PWR_PVD_MODE_IT_FALLING +#define PWR_MODE_IT_RISING_FALLING PWR_PVD_MODE_IT_RISING_FALLING +#define PWR_MODE_EVENT_RISING PWR_PVD_MODE_EVENT_RISING +#define PWR_MODE_EVENT_FALLING PWR_PVD_MODE_EVENT_FALLING +#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING + +#define CR_OFFSET_BB PWR_CR_OFFSET_BB +#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB + +#define DBP_BitNumber DBP_BIT_NUMBER +#define PVDE_BitNumber PVDE_BIT_NUMBER +#define PMODE_BitNumber PMODE_BIT_NUMBER +#define EWUP_BitNumber EWUP_BIT_NUMBER +#define FPDS_BitNumber FPDS_BIT_NUMBER +#define ODEN_BitNumber ODEN_BIT_NUMBER +#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER +#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER +#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER +#define BRE_BitNumber BRE_BIT_NUMBER + +#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL + +#if defined (STM32U5) +#define PWR_SRAM1_PAGE1_STOP_RETENTION PWR_SRAM1_PAGE1_STOP +#define PWR_SRAM1_PAGE2_STOP_RETENTION PWR_SRAM1_PAGE2_STOP +#define PWR_SRAM1_PAGE3_STOP_RETENTION PWR_SRAM1_PAGE3_STOP +#define PWR_SRAM1_PAGE4_STOP_RETENTION PWR_SRAM1_PAGE4_STOP +#define PWR_SRAM1_PAGE5_STOP_RETENTION PWR_SRAM1_PAGE5_STOP +#define PWR_SRAM1_PAGE6_STOP_RETENTION PWR_SRAM1_PAGE6_STOP +#define PWR_SRAM1_PAGE7_STOP_RETENTION PWR_SRAM1_PAGE7_STOP +#define PWR_SRAM1_PAGE8_STOP_RETENTION PWR_SRAM1_PAGE8_STOP +#define PWR_SRAM1_PAGE9_STOP_RETENTION PWR_SRAM1_PAGE9_STOP +#define PWR_SRAM1_PAGE10_STOP_RETENTION PWR_SRAM1_PAGE10_STOP +#define PWR_SRAM1_PAGE11_STOP_RETENTION PWR_SRAM1_PAGE11_STOP +#define PWR_SRAM1_PAGE12_STOP_RETENTION PWR_SRAM1_PAGE12_STOP +#define PWR_SRAM1_FULL_STOP_RETENTION PWR_SRAM1_FULL_STOP + +#define PWR_SRAM2_PAGE1_STOP_RETENTION PWR_SRAM2_PAGE1_STOP +#define PWR_SRAM2_PAGE2_STOP_RETENTION PWR_SRAM2_PAGE2_STOP +#define PWR_SRAM2_FULL_STOP_RETENTION PWR_SRAM2_FULL_STOP + +#define PWR_SRAM3_PAGE1_STOP_RETENTION PWR_SRAM3_PAGE1_STOP +#define PWR_SRAM3_PAGE2_STOP_RETENTION PWR_SRAM3_PAGE2_STOP +#define PWR_SRAM3_PAGE3_STOP_RETENTION PWR_SRAM3_PAGE3_STOP +#define PWR_SRAM3_PAGE4_STOP_RETENTION PWR_SRAM3_PAGE4_STOP +#define PWR_SRAM3_PAGE5_STOP_RETENTION PWR_SRAM3_PAGE5_STOP +#define PWR_SRAM3_PAGE6_STOP_RETENTION PWR_SRAM3_PAGE6_STOP +#define PWR_SRAM3_PAGE7_STOP_RETENTION PWR_SRAM3_PAGE7_STOP +#define PWR_SRAM3_PAGE8_STOP_RETENTION PWR_SRAM3_PAGE8_STOP +#define PWR_SRAM3_PAGE9_STOP_RETENTION PWR_SRAM3_PAGE9_STOP +#define PWR_SRAM3_PAGE10_STOP_RETENTION PWR_SRAM3_PAGE10_STOP +#define PWR_SRAM3_PAGE11_STOP_RETENTION PWR_SRAM3_PAGE11_STOP +#define PWR_SRAM3_PAGE12_STOP_RETENTION PWR_SRAM3_PAGE12_STOP +#define PWR_SRAM3_PAGE13_STOP_RETENTION PWR_SRAM3_PAGE13_STOP +#define PWR_SRAM3_FULL_STOP_RETENTION PWR_SRAM3_FULL_STOP + +#define PWR_SRAM4_FULL_STOP_RETENTION PWR_SRAM4_FULL_STOP + +#define PWR_SRAM5_PAGE1_STOP_RETENTION PWR_SRAM5_PAGE1_STOP +#define PWR_SRAM5_PAGE2_STOP_RETENTION PWR_SRAM5_PAGE2_STOP +#define PWR_SRAM5_PAGE3_STOP_RETENTION PWR_SRAM5_PAGE3_STOP +#define PWR_SRAM5_PAGE4_STOP_RETENTION PWR_SRAM5_PAGE4_STOP +#define PWR_SRAM5_PAGE5_STOP_RETENTION PWR_SRAM5_PAGE5_STOP +#define PWR_SRAM5_PAGE6_STOP_RETENTION PWR_SRAM5_PAGE6_STOP +#define PWR_SRAM5_PAGE7_STOP_RETENTION PWR_SRAM5_PAGE7_STOP +#define PWR_SRAM5_PAGE8_STOP_RETENTION PWR_SRAM5_PAGE8_STOP +#define PWR_SRAM5_PAGE9_STOP_RETENTION PWR_SRAM5_PAGE9_STOP +#define PWR_SRAM5_PAGE10_STOP_RETENTION PWR_SRAM5_PAGE10_STOP +#define PWR_SRAM5_PAGE11_STOP_RETENTION PWR_SRAM5_PAGE11_STOP +#define PWR_SRAM5_PAGE12_STOP_RETENTION PWR_SRAM5_PAGE12_STOP +#define PWR_SRAM5_PAGE13_STOP_RETENTION PWR_SRAM5_PAGE13_STOP +#define PWR_SRAM5_FULL_STOP_RETENTION PWR_SRAM5_FULL_STOP + +#define PWR_ICACHE_FULL_STOP_RETENTION PWR_ICACHE_FULL_STOP +#define PWR_DCACHE1_FULL_STOP_RETENTION PWR_DCACHE1_FULL_STOP +#define PWR_DCACHE2_FULL_STOP_RETENTION PWR_DCACHE2_FULL_STOP +#define PWR_DMA2DRAM_FULL_STOP_RETENTION PWR_DMA2DRAM_FULL_STOP +#define PWR_PERIPHRAM_FULL_STOP_RETENTION PWR_PERIPHRAM_FULL_STOP +#define PWR_PKA32RAM_FULL_STOP_RETENTION PWR_PKA32RAM_FULL_STOP +#define PWR_GRAPHICPRAM_FULL_STOP_RETENTION PWR_GRAPHICPRAM_FULL_STOP +#define PWR_DSIRAM_FULL_STOP_RETENTION PWR_DSIRAM_FULL_STOP + +#define PWR_SRAM2_PAGE1_STANDBY_RETENTION PWR_SRAM2_PAGE1_STANDBY +#define PWR_SRAM2_PAGE2_STANDBY_RETENTION PWR_SRAM2_PAGE2_STANDBY +#define PWR_SRAM2_FULL_STANDBY_RETENTION PWR_SRAM2_FULL_STANDBY + +#define PWR_SRAM1_FULL_RUN_RETENTION PWR_SRAM1_FULL_RUN +#define PWR_SRAM2_FULL_RUN_RETENTION PWR_SRAM2_FULL_RUN +#define PWR_SRAM3_FULL_RUN_RETENTION PWR_SRAM3_FULL_RUN +#define PWR_SRAM4_FULL_RUN_RETENTION PWR_SRAM4_FULL_RUN +#define PWR_SRAM5_FULL_RUN_RETENTION PWR_SRAM5_FULL_RUN + +#define PWR_ALL_RAM_RUN_RETENTION_MASK PWR_ALL_RAM_RUN_MASK +#endif + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_TIM_DMADelayPulseCplt TIM_DMADelayPulseCplt +#define HAL_TIM_DMAError TIM_DMAError +#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt +#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt +#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) +#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro +#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT +#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback +#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent +#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT +#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA +#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */ +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig +/** + * @} + */ + + +/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +/* Exported macros ------------------------------------------------------------*/ + +/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose + * @{ + */ +#define AES_IT_CC CRYP_IT_CC +#define AES_IT_ERR CRYP_IT_ERR +#define AES_FLAG_CCF CRYP_FLAG_CCF +/** + * @} + */ + +/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_GET_BOOT_MODE __HAL_SYSCFG_GET_BOOT_MODE +#define __HAL_REMAPMEMORY_FLASH __HAL_SYSCFG_REMAPMEMORY_FLASH +#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH +#define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM +#define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC +#define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI +#define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK +#define __HAL_GET_FLAG __HAL_SYSCFG_GET_FLAG +#define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG +#define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE +#define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE + +#define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY +#define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 +#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS +#define UFB_MODE_BitNumber UFB_MODE_BIT_NUMBER +#define CMP_PD_BitNumber CMP_PD_BIT_NUMBER + +/** + * @} + */ + + +/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __ADC_ENABLE __HAL_ADC_ENABLE +#define __ADC_DISABLE __HAL_ADC_DISABLE +#define __HAL_ADC_ENABLING_CONDITIONS ADC_ENABLING_CONDITIONS +#define __HAL_ADC_DISABLING_CONDITIONS ADC_DISABLING_CONDITIONS +#define __HAL_ADC_IS_ENABLED ADC_IS_ENABLE +#define __ADC_IS_ENABLED ADC_IS_ENABLE +#define __HAL_ADC_IS_SOFTWARE_START_REGULAR ADC_IS_SOFTWARE_START_REGULAR +#define __HAL_ADC_IS_SOFTWARE_START_INJECTED ADC_IS_SOFTWARE_START_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR ADC_IS_CONVERSION_ONGOING_REGULAR +#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED ADC_IS_CONVERSION_ONGOING_INJECTED +#define __HAL_ADC_IS_CONVERSION_ONGOING ADC_IS_CONVERSION_ONGOING +#define __HAL_ADC_CLEAR_ERRORCODE ADC_CLEAR_ERRORCODE + +#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION +#define __HAL_ADC_JSQR_RK ADC_JSQR_RK +#define __HAL_ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_SHIFT +#define __HAL_ADC_CFGR_AWD23CR ADC_CFGR_AWD23CR +#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION +#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE ADC_CFGR_INJECT_CONTEXT_QUEUE +#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS ADC_CFGR_INJECT_DISCCONTINUOUS +#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS ADC_CFGR_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM ADC_CFGR_DISCONTINUOUS_NUM +#define __HAL_ADC_CFGR_AUTOWAIT ADC_CFGR_AUTOWAIT +#define __HAL_ADC_CFGR_CONTINUOUS ADC_CFGR_CONTINUOUS +#define __HAL_ADC_CFGR_OVERRUN ADC_CFGR_OVERRUN +#define __HAL_ADC_CFGR_DMACONTREQ ADC_CFGR_DMACONTREQ +#define __HAL_ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_SET +#define __HAL_ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_SET +#define __HAL_ADC_OFR_CHANNEL ADC_OFR_CHANNEL +#define __HAL_ADC_DIFSEL_CHANNEL ADC_DIFSEL_CHANNEL +#define __HAL_ADC_CALFACT_DIFF_SET ADC_CALFACT_DIFF_SET +#define __HAL_ADC_CALFACT_DIFF_GET ADC_CALFACT_DIFF_GET +#define __HAL_ADC_TRX_HIGHTHRESHOLD ADC_TRX_HIGHTHRESHOLD + +#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION ADC_OFFSET_SHIFT_RESOLUTION +#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION ADC_AWD1THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION +#define __HAL_ADC_COMMON_REGISTER ADC_COMMON_REGISTER +#define __HAL_ADC_COMMON_CCR_MULTI ADC_COMMON_CCR_MULTI +#define __HAL_ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __ADC_MULTIMODE_IS_ENABLED ADC_MULTIMODE_IS_ENABLE +#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER +#define __HAL_ADC_COMMON_ADC_OTHER ADC_COMMON_ADC_OTHER +#define __HAL_ADC_MULTI_SLAVE ADC_MULTI_SLAVE + +#define __HAL_ADC_SQR1_L ADC_SQR1_L_SHIFT +#define __HAL_ADC_JSQR_JL ADC_JSQR_JL_SHIFT +#define __HAL_ADC_JSQR_RK_JL ADC_JSQR_RK_JL +#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM +#define __HAL_ADC_CR1_SCAN ADC_CR1_SCAN_SET +#define __HAL_ADC_CONVCYCLES_MAX_RANGE ADC_CONVCYCLES_MAX_RANGE +#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE +#define __HAL_ADC_GET_CLOCK_PRESCALER ADC_GET_CLOCK_PRESCALER + +#define __HAL_ADC_SQR1 ADC_SQR1 +#define __HAL_ADC_SMPR1 ADC_SMPR1 +#define __HAL_ADC_SMPR2 ADC_SMPR2 +#define __HAL_ADC_SQR3_RK ADC_SQR3_RK +#define __HAL_ADC_SQR2_RK ADC_SQR2_RK +#define __HAL_ADC_SQR1_RK ADC_SQR1_RK +#define __HAL_ADC_CR2_CONTINUOUS ADC_CR2_CONTINUOUS +#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS +#define __HAL_ADC_CR1_SCANCONV ADC_CR1_SCANCONV +#define __HAL_ADC_CR2_EOCSelection ADC_CR2_EOCSelection +#define __HAL_ADC_CR2_DMAContReq ADC_CR2_DMAContReq +#define __HAL_ADC_JSQR ADC_JSQR + +#define __HAL_ADC_CHSELR_CHANNEL ADC_CHSELR_CHANNEL +#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS +#define __HAL_ADC_CFGR1_AUTOOFF ADC_CFGR1_AUTOOFF +#define __HAL_ADC_CFGR1_AUTOWAIT ADC_CFGR1_AUTOWAIT +#define __HAL_ADC_CFGR1_CONTINUOUS ADC_CFGR1_CONTINUOUS +#define __HAL_ADC_CFGR1_OVERRUN ADC_CFGR1_OVERRUN +#define __HAL_ADC_CFGR1_SCANDIR ADC_CFGR1_SCANDIR +#define __HAL_ADC_CFGR1_DMACONTREQ ADC_CFGR1_DMACONTREQ + +/** + * @} + */ + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT +#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT +#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT +#define IS_DAC_GENERATE_WAVE IS_DAC_WAVE + +/** + * @} + */ + +/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_FREEZE_TIM1_DBGMCU __HAL_DBGMCU_FREEZE_TIM1 +#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1 +#define __HAL_FREEZE_TIM2_DBGMCU __HAL_DBGMCU_FREEZE_TIM2 +#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2 +#define __HAL_FREEZE_TIM3_DBGMCU __HAL_DBGMCU_FREEZE_TIM3 +#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3 +#define __HAL_FREEZE_TIM4_DBGMCU __HAL_DBGMCU_FREEZE_TIM4 +#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4 +#define __HAL_FREEZE_TIM5_DBGMCU __HAL_DBGMCU_FREEZE_TIM5 +#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5 +#define __HAL_FREEZE_TIM6_DBGMCU __HAL_DBGMCU_FREEZE_TIM6 +#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6 +#define __HAL_FREEZE_TIM7_DBGMCU __HAL_DBGMCU_FREEZE_TIM7 +#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7 +#define __HAL_FREEZE_TIM8_DBGMCU __HAL_DBGMCU_FREEZE_TIM8 +#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8 + +#define __HAL_FREEZE_TIM9_DBGMCU __HAL_DBGMCU_FREEZE_TIM9 +#define __HAL_UNFREEZE_TIM9_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM9 +#define __HAL_FREEZE_TIM10_DBGMCU __HAL_DBGMCU_FREEZE_TIM10 +#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10 +#define __HAL_FREEZE_TIM11_DBGMCU __HAL_DBGMCU_FREEZE_TIM11 +#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11 +#define __HAL_FREEZE_TIM12_DBGMCU __HAL_DBGMCU_FREEZE_TIM12 +#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12 +#define __HAL_FREEZE_TIM13_DBGMCU __HAL_DBGMCU_FREEZE_TIM13 +#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13 +#define __HAL_FREEZE_TIM14_DBGMCU __HAL_DBGMCU_FREEZE_TIM14 +#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14 +#define __HAL_FREEZE_CAN2_DBGMCU __HAL_DBGMCU_FREEZE_CAN2 +#define __HAL_UNFREEZE_CAN2_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN2 + + +#define __HAL_FREEZE_TIM15_DBGMCU __HAL_DBGMCU_FREEZE_TIM15 +#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15 +#define __HAL_FREEZE_TIM16_DBGMCU __HAL_DBGMCU_FREEZE_TIM16 +#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16 +#define __HAL_FREEZE_TIM17_DBGMCU __HAL_DBGMCU_FREEZE_TIM17 +#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17 +#define __HAL_FREEZE_RTC_DBGMCU __HAL_DBGMCU_FREEZE_RTC +#define __HAL_UNFREEZE_RTC_DBGMCU __HAL_DBGMCU_UNFREEZE_RTC +#if defined(STM32H7) +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG1 +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1 +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG1 +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1 +#else +#define __HAL_FREEZE_WWDG_DBGMCU __HAL_DBGMCU_FREEZE_WWDG +#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG +#define __HAL_FREEZE_IWDG_DBGMCU __HAL_DBGMCU_FREEZE_IWDG +#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG +#endif /* STM32H7 */ +#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT +#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT +#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT +#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT +#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT +#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT +#define __HAL_FREEZE_CAN1_DBGMCU __HAL_DBGMCU_FREEZE_CAN1 +#define __HAL_UNFREEZE_CAN1_DBGMCU __HAL_DBGMCU_UNFREEZE_CAN1 +#define __HAL_FREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM1 +#define __HAL_UNFREEZE_LPTIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM1 +#define __HAL_FREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_FREEZE_LPTIM2 +#define __HAL_UNFREEZE_LPTIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_LPTIM2 + +/** + * @} + */ + +/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32F3) +#define COMP_START __HAL_COMP_ENABLE +#define COMP_STOP __HAL_COMP_DISABLE +#define COMP_LOCK __HAL_COMP_LOCK + +#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F302xE) || defined(STM32F302xC) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP6_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP6_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP6_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() : \ + ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP7_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP7_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() : \ + ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP7_EXTI_CLEAR_FLAG()) +# endif +# if defined(STM32F373xC) ||defined(STM32F378xx) +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +# endif +#else +#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE()) +#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_ENABLE_IT()) +#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : \ + __HAL_COMP_COMP2_EXTI_DISABLE_IT()) +#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : \ + __HAL_COMP_COMP2_EXTI_GET_FLAG()) +#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : \ + __HAL_COMP_COMP2_EXTI_CLEAR_FLAG()) +#endif + +#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE + +#if defined(STM32L0) || defined(STM32L4) +/* Note: On these STM32 families, the only argument of this macro */ +/* is COMP_FLAG_LOCK. */ +/* This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle */ +/* argument. */ +#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__)) +#endif +/** + * @} + */ + +#if defined(STM32L0) || defined(STM32L4) +/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose + * @{ + */ +#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +#define HAL_COMP_Stop_IT HAL_COMP_Stop /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */ +/** + * @} + */ +#endif + +/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ + ((WAVE) == DAC_WAVE_NOISE)|| \ + ((WAVE) == DAC_WAVE_TRIANGLE)) + +/** + * @} + */ + +/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_WRPAREA IS_OB_WRPAREA +#define IS_TYPEPROGRAM IS_FLASH_TYPEPROGRAM +#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM +#define IS_TYPEERASE IS_FLASH_TYPEERASE +#define IS_NBSECTORS IS_FLASH_NBSECTORS +#define IS_OB_WDG_SOURCE IS_OB_IWDG_SOURCE + +/** + * @} + */ + +/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 +#define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else +#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ +#define __HAL_I2C_RISE_TIME I2C_RISE_TIME +#define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD +#define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST +#define __HAL_I2C_SPEED I2C_SPEED +#define __HAL_I2C_7BIT_ADD_WRITE I2C_7BIT_ADD_WRITE +#define __HAL_I2C_7BIT_ADD_READ I2C_7BIT_ADD_READ +#define __HAL_I2C_10BIT_ADDRESS I2C_10BIT_ADDRESS +#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE +#define __HAL_I2C_10BIT_HEADER_READ I2C_10BIT_HEADER_READ +#define __HAL_I2C_MEM_ADD_MSB I2C_MEM_ADD_MSB +#define __HAL_I2C_MEM_ADD_LSB I2C_MEM_ADD_LSB +#define __HAL_I2C_FREQRANGE I2C_FREQRANGE +/** + * @} + */ + +/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose + * @{ + */ + +#define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE +#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT + +#if defined(STM32H7) +#define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG +#endif + +/** + * @} + */ + +/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __IRDA_DISABLE __HAL_IRDA_DISABLE +#define __IRDA_ENABLE __HAL_IRDA_ENABLE + +#define __HAL_IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION +#define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE +#define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION + +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE + + +/** + * @} + */ + + +/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_IWDG_ENABLE_WRITE_ACCESS IWDG_ENABLE_WRITE_ACCESS +#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS +/** + * @} + */ + + +/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_LPTIM_ENABLE_INTERRUPT __HAL_LPTIM_ENABLE_IT +#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT +#define __HAL_LPTIM_GET_ITSTATUS __HAL_LPTIM_GET_IT_SOURCE + +/** + * @} + */ + + +/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose + * @{ + */ +#define __OPAMP_CSR_OPAXPD OPAMP_CSR_OPAXPD +#define __OPAMP_CSR_S3SELX OPAMP_CSR_S3SELX +#define __OPAMP_CSR_S4SELX OPAMP_CSR_S4SELX +#define __OPAMP_CSR_S5SELX OPAMP_CSR_S5SELX +#define __OPAMP_CSR_S6SELX OPAMP_CSR_S6SELX +#define __OPAMP_CSR_OPAXCAL_L OPAMP_CSR_OPAXCAL_L +#define __OPAMP_CSR_OPAXCAL_H OPAMP_CSR_OPAXCAL_H +#define __OPAMP_CSR_OPAXLPM OPAMP_CSR_OPAXLPM +#define __OPAMP_CSR_ALL_SWITCHES OPAMP_CSR_ALL_SWITCHES +#define __OPAMP_CSR_ANAWSELX OPAMP_CSR_ANAWSELX +#define __OPAMP_CSR_OPAXCALOUT OPAMP_CSR_OPAXCALOUT +#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION +#define __OPAMP_OFFSET_TRIM_SET OPAMP_OFFSET_TRIM_SET + +/** + * @} + */ + + +/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_PVD_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PVD_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PVM_EVENT_DISABLE __HAL_PWR_PVM_EVENT_DISABLE +#define __HAL_PVM_EVENT_ENABLE __HAL_PWR_PVM_EVENT_ENABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE +#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE +#define __HAL_PWR_INTERNALWAKEUP_DISABLE HAL_PWREx_DisableInternalWakeUpLine +#define __HAL_PWR_INTERNALWAKEUP_ENABLE HAL_PWREx_EnableInternalWakeUpLine +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig +#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE HAL_PWREx_EnablePullUpPullDownConfig +#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() do { __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); } while(0) +#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_EVENT +#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_EVENT +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE +#define __HAL_PWR_PVM_DISABLE() do { HAL_PWREx_DisablePVM1();HAL_PWREx_DisablePVM2();HAL_PWREx_DisablePVM3();HAL_PWREx_DisablePVM4(); } while(0) +#define __HAL_PWR_PVM_ENABLE() do { HAL_PWREx_EnablePVM1();HAL_PWREx_EnablePVM2();HAL_PWREx_EnablePVM3();HAL_PWREx_EnablePVM4(); } while(0) +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE HAL_PWREx_DisableSRAM2ContentRetention +#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE HAL_PWREx_EnableSRAM2ContentRetention +#define __HAL_PWR_VDDIO2_DISABLE HAL_PWREx_DisableVddIO2 +#define __HAL_PWR_VDDIO2_ENABLE HAL_PWREx_EnableVddIO2 +#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE +#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE +#define __HAL_PWR_VDDUSB_DISABLE HAL_PWREx_DisableVddUSB +#define __HAL_PWR_VDDUSB_ENABLE HAL_PWREx_EnableVddUSB + +#if defined (STM32F4) +#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() +#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() +#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() +#else +#define __HAL_PVD_EXTI_CLEAR_FLAG __HAL_PWR_PVD_EXTI_CLEAR_FLAG +#define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT +#define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT +#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#endif /* STM32F4 */ +/** + * @} + */ + + +/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose + * @{ + */ + +#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI +#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI + +#define HAL_RCC_CCSCallback HAL_RCC_CSSCallback +#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd\ + )==ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT()) + +#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE +#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE +#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE +#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE +#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET +#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET +#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE +#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE +#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET +#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE +#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE +#define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET +#define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET +#define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE +#define __ADC3_CLK_ENABLE __HAL_RCC_ADC3_CLK_ENABLE +#define __ADC3_FORCE_RESET __HAL_RCC_ADC3_FORCE_RESET +#define __ADC3_RELEASE_RESET __HAL_RCC_ADC3_RELEASE_RESET +#define __AES_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __AES_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __AES_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __AES_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __AES_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __AES_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#define __CRYP_CLK_SLEEP_ENABLE __HAL_RCC_CRYP_CLK_SLEEP_ENABLE +#define __CRYP_CLK_SLEEP_DISABLE __HAL_RCC_CRYP_CLK_SLEEP_DISABLE +#define __CRYP_CLK_ENABLE __HAL_RCC_CRYP_CLK_ENABLE +#define __CRYP_CLK_DISABLE __HAL_RCC_CRYP_CLK_DISABLE +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __CRYP_RELEASE_RESET __HAL_RCC_CRYP_RELEASE_RESET +#define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE +#define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE +#define __AFIO_FORCE_RESET __HAL_RCC_AFIO_FORCE_RESET +#define __AFIO_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET +#define __AHB_FORCE_RESET __HAL_RCC_AHB_FORCE_RESET +#define __AHB_RELEASE_RESET __HAL_RCC_AHB_RELEASE_RESET +#define __AHB1_FORCE_RESET __HAL_RCC_AHB1_FORCE_RESET +#define __AHB1_RELEASE_RESET __HAL_RCC_AHB1_RELEASE_RESET +#define __AHB2_FORCE_RESET __HAL_RCC_AHB2_FORCE_RESET +#define __AHB2_RELEASE_RESET __HAL_RCC_AHB2_RELEASE_RESET +#define __AHB3_FORCE_RESET __HAL_RCC_AHB3_FORCE_RESET +#define __AHB3_RELEASE_RESET __HAL_RCC_AHB3_RELEASE_RESET +#define __APB1_FORCE_RESET __HAL_RCC_APB1_FORCE_RESET +#define __APB1_RELEASE_RESET __HAL_RCC_APB1_RELEASE_RESET +#define __APB2_FORCE_RESET __HAL_RCC_APB2_FORCE_RESET +#define __APB2_RELEASE_RESET __HAL_RCC_APB2_RELEASE_RESET +#define __BKP_CLK_DISABLE __HAL_RCC_BKP_CLK_DISABLE +#define __BKP_CLK_ENABLE __HAL_RCC_BKP_CLK_ENABLE +#define __BKP_FORCE_RESET __HAL_RCC_BKP_FORCE_RESET +#define __BKP_RELEASE_RESET __HAL_RCC_BKP_RELEASE_RESET +#define __CAN1_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN1_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN1_CLK_SLEEP_DISABLE __HAL_RCC_CAN1_CLK_SLEEP_DISABLE +#define __CAN1_CLK_SLEEP_ENABLE __HAL_RCC_CAN1_CLK_SLEEP_ENABLE +#define __CAN1_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN1_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN_CLK_DISABLE __HAL_RCC_CAN1_CLK_DISABLE +#define __CAN_CLK_ENABLE __HAL_RCC_CAN1_CLK_ENABLE +#define __CAN_FORCE_RESET __HAL_RCC_CAN1_FORCE_RESET +#define __CAN_RELEASE_RESET __HAL_RCC_CAN1_RELEASE_RESET +#define __CAN2_CLK_DISABLE __HAL_RCC_CAN2_CLK_DISABLE +#define __CAN2_CLK_ENABLE __HAL_RCC_CAN2_CLK_ENABLE +#define __CAN2_FORCE_RESET __HAL_RCC_CAN2_FORCE_RESET +#define __CAN2_RELEASE_RESET __HAL_RCC_CAN2_RELEASE_RESET +#define __CEC_CLK_DISABLE __HAL_RCC_CEC_CLK_DISABLE +#define __CEC_CLK_ENABLE __HAL_RCC_CEC_CLK_ENABLE +#define __COMP_CLK_DISABLE __HAL_RCC_COMP_CLK_DISABLE +#define __COMP_CLK_ENABLE __HAL_RCC_COMP_CLK_ENABLE +#define __COMP_FORCE_RESET __HAL_RCC_COMP_FORCE_RESET +#define __COMP_RELEASE_RESET __HAL_RCC_COMP_RELEASE_RESET +#define __COMP_CLK_SLEEP_ENABLE __HAL_RCC_COMP_CLK_SLEEP_ENABLE +#define __COMP_CLK_SLEEP_DISABLE __HAL_RCC_COMP_CLK_SLEEP_DISABLE +#define __CEC_FORCE_RESET __HAL_RCC_CEC_FORCE_RESET +#define __CEC_RELEASE_RESET __HAL_RCC_CEC_RELEASE_RESET +#define __CRC_CLK_DISABLE __HAL_RCC_CRC_CLK_DISABLE +#define __CRC_CLK_ENABLE __HAL_RCC_CRC_CLK_ENABLE +#define __CRC_CLK_SLEEP_DISABLE __HAL_RCC_CRC_CLK_SLEEP_DISABLE +#define __CRC_CLK_SLEEP_ENABLE __HAL_RCC_CRC_CLK_SLEEP_ENABLE +#define __CRC_FORCE_RESET __HAL_RCC_CRC_FORCE_RESET +#define __CRC_RELEASE_RESET __HAL_RCC_CRC_RELEASE_RESET +#define __DAC_CLK_DISABLE __HAL_RCC_DAC_CLK_DISABLE +#define __DAC_CLK_ENABLE __HAL_RCC_DAC_CLK_ENABLE +#define __DAC_FORCE_RESET __HAL_RCC_DAC_FORCE_RESET +#define __DAC_RELEASE_RESET __HAL_RCC_DAC_RELEASE_RESET +#define __DAC1_CLK_DISABLE __HAL_RCC_DAC1_CLK_DISABLE +#define __DAC1_CLK_ENABLE __HAL_RCC_DAC1_CLK_ENABLE +#define __DAC1_CLK_SLEEP_DISABLE __HAL_RCC_DAC1_CLK_SLEEP_DISABLE +#define __DAC1_CLK_SLEEP_ENABLE __HAL_RCC_DAC1_CLK_SLEEP_ENABLE +#define __DAC1_FORCE_RESET __HAL_RCC_DAC1_FORCE_RESET +#define __DAC1_RELEASE_RESET __HAL_RCC_DAC1_RELEASE_RESET +#define __DBGMCU_CLK_ENABLE __HAL_RCC_DBGMCU_CLK_ENABLE +#define __DBGMCU_CLK_DISABLE __HAL_RCC_DBGMCU_CLK_DISABLE +#define __DBGMCU_FORCE_RESET __HAL_RCC_DBGMCU_FORCE_RESET +#define __DBGMCU_RELEASE_RESET __HAL_RCC_DBGMCU_RELEASE_RESET +#define __DFSDM_CLK_DISABLE __HAL_RCC_DFSDM_CLK_DISABLE +#define __DFSDM_CLK_ENABLE __HAL_RCC_DFSDM_CLK_ENABLE +#define __DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE +#define __DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE +#define __DFSDM_FORCE_RESET __HAL_RCC_DFSDM_FORCE_RESET +#define __DFSDM_RELEASE_RESET __HAL_RCC_DFSDM_RELEASE_RESET +#define __DMA1_CLK_DISABLE __HAL_RCC_DMA1_CLK_DISABLE +#define __DMA1_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE +#define __DMA1_CLK_SLEEP_DISABLE __HAL_RCC_DMA1_CLK_SLEEP_DISABLE +#define __DMA1_CLK_SLEEP_ENABLE __HAL_RCC_DMA1_CLK_SLEEP_ENABLE +#define __DMA1_FORCE_RESET __HAL_RCC_DMA1_FORCE_RESET +#define __DMA1_RELEASE_RESET __HAL_RCC_DMA1_RELEASE_RESET +#define __DMA2_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE +#define __DMA2_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE +#define __DMA2_CLK_SLEEP_DISABLE __HAL_RCC_DMA2_CLK_SLEEP_DISABLE +#define __DMA2_CLK_SLEEP_ENABLE __HAL_RCC_DMA2_CLK_SLEEP_ENABLE +#define __DMA2_FORCE_RESET __HAL_RCC_DMA2_FORCE_RESET +#define __DMA2_RELEASE_RESET __HAL_RCC_DMA2_RELEASE_RESET +#define __ETHMAC_CLK_DISABLE __HAL_RCC_ETHMAC_CLK_DISABLE +#define __ETHMAC_CLK_ENABLE __HAL_RCC_ETHMAC_CLK_ENABLE +#define __ETHMAC_FORCE_RESET __HAL_RCC_ETHMAC_FORCE_RESET +#define __ETHMAC_RELEASE_RESET __HAL_RCC_ETHMAC_RELEASE_RESET +#define __ETHMACRX_CLK_DISABLE __HAL_RCC_ETHMACRX_CLK_DISABLE +#define __ETHMACRX_CLK_ENABLE __HAL_RCC_ETHMACRX_CLK_ENABLE +#define __ETHMACTX_CLK_DISABLE __HAL_RCC_ETHMACTX_CLK_DISABLE +#define __ETHMACTX_CLK_ENABLE __HAL_RCC_ETHMACTX_CLK_ENABLE +#define __FIREWALL_CLK_DISABLE __HAL_RCC_FIREWALL_CLK_DISABLE +#define __FIREWALL_CLK_ENABLE __HAL_RCC_FIREWALL_CLK_ENABLE +#define __FLASH_CLK_DISABLE __HAL_RCC_FLASH_CLK_DISABLE +#define __FLASH_CLK_ENABLE __HAL_RCC_FLASH_CLK_ENABLE +#define __FLASH_CLK_SLEEP_DISABLE __HAL_RCC_FLASH_CLK_SLEEP_DISABLE +#define __FLASH_CLK_SLEEP_ENABLE __HAL_RCC_FLASH_CLK_SLEEP_ENABLE +#define __FLASH_FORCE_RESET __HAL_RCC_FLASH_FORCE_RESET +#define __FLASH_RELEASE_RESET __HAL_RCC_FLASH_RELEASE_RESET +#define __FLITF_CLK_DISABLE __HAL_RCC_FLITF_CLK_DISABLE +#define __FLITF_CLK_ENABLE __HAL_RCC_FLITF_CLK_ENABLE +#define __FLITF_FORCE_RESET __HAL_RCC_FLITF_FORCE_RESET +#define __FLITF_RELEASE_RESET __HAL_RCC_FLITF_RELEASE_RESET +#define __FLITF_CLK_SLEEP_ENABLE __HAL_RCC_FLITF_CLK_SLEEP_ENABLE +#define __FLITF_CLK_SLEEP_DISABLE __HAL_RCC_FLITF_CLK_SLEEP_DISABLE +#define __FMC_CLK_DISABLE __HAL_RCC_FMC_CLK_DISABLE +#define __FMC_CLK_ENABLE __HAL_RCC_FMC_CLK_ENABLE +#define __FMC_CLK_SLEEP_DISABLE __HAL_RCC_FMC_CLK_SLEEP_DISABLE +#define __FMC_CLK_SLEEP_ENABLE __HAL_RCC_FMC_CLK_SLEEP_ENABLE +#define __FMC_FORCE_RESET __HAL_RCC_FMC_FORCE_RESET +#define __FMC_RELEASE_RESET __HAL_RCC_FMC_RELEASE_RESET +#define __FSMC_CLK_DISABLE __HAL_RCC_FSMC_CLK_DISABLE +#define __FSMC_CLK_ENABLE __HAL_RCC_FSMC_CLK_ENABLE +#define __GPIOA_CLK_DISABLE __HAL_RCC_GPIOA_CLK_DISABLE +#define __GPIOA_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE +#define __GPIOA_CLK_SLEEP_DISABLE __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE +#define __GPIOA_CLK_SLEEP_ENABLE __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE +#define __GPIOA_FORCE_RESET __HAL_RCC_GPIOA_FORCE_RESET +#define __GPIOA_RELEASE_RESET __HAL_RCC_GPIOA_RELEASE_RESET +#define __GPIOB_CLK_DISABLE __HAL_RCC_GPIOB_CLK_DISABLE +#define __GPIOB_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE +#define __GPIOB_CLK_SLEEP_DISABLE __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE +#define __GPIOB_CLK_SLEEP_ENABLE __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE +#define __GPIOB_FORCE_RESET __HAL_RCC_GPIOB_FORCE_RESET +#define __GPIOB_RELEASE_RESET __HAL_RCC_GPIOB_RELEASE_RESET +#define __GPIOC_CLK_DISABLE __HAL_RCC_GPIOC_CLK_DISABLE +#define __GPIOC_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE +#define __GPIOC_CLK_SLEEP_DISABLE __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE +#define __GPIOC_CLK_SLEEP_ENABLE __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE +#define __GPIOC_FORCE_RESET __HAL_RCC_GPIOC_FORCE_RESET +#define __GPIOC_RELEASE_RESET __HAL_RCC_GPIOC_RELEASE_RESET +#define __GPIOD_CLK_DISABLE __HAL_RCC_GPIOD_CLK_DISABLE +#define __GPIOD_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE +#define __GPIOD_CLK_SLEEP_DISABLE __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE +#define __GPIOD_CLK_SLEEP_ENABLE __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE +#define __GPIOD_FORCE_RESET __HAL_RCC_GPIOD_FORCE_RESET +#define __GPIOD_RELEASE_RESET __HAL_RCC_GPIOD_RELEASE_RESET +#define __GPIOE_CLK_DISABLE __HAL_RCC_GPIOE_CLK_DISABLE +#define __GPIOE_CLK_ENABLE __HAL_RCC_GPIOE_CLK_ENABLE +#define __GPIOE_CLK_SLEEP_DISABLE __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE +#define __GPIOE_CLK_SLEEP_ENABLE __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE +#define __GPIOE_FORCE_RESET __HAL_RCC_GPIOE_FORCE_RESET +#define __GPIOE_RELEASE_RESET __HAL_RCC_GPIOE_RELEASE_RESET +#define __GPIOF_CLK_DISABLE __HAL_RCC_GPIOF_CLK_DISABLE +#define __GPIOF_CLK_ENABLE __HAL_RCC_GPIOF_CLK_ENABLE +#define __GPIOF_CLK_SLEEP_DISABLE __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE +#define __GPIOF_CLK_SLEEP_ENABLE __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE +#define __GPIOF_FORCE_RESET __HAL_RCC_GPIOF_FORCE_RESET +#define __GPIOF_RELEASE_RESET __HAL_RCC_GPIOF_RELEASE_RESET +#define __GPIOG_CLK_DISABLE __HAL_RCC_GPIOG_CLK_DISABLE +#define __GPIOG_CLK_ENABLE __HAL_RCC_GPIOG_CLK_ENABLE +#define __GPIOG_CLK_SLEEP_DISABLE __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE +#define __GPIOG_CLK_SLEEP_ENABLE __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE +#define __GPIOG_FORCE_RESET __HAL_RCC_GPIOG_FORCE_RESET +#define __GPIOG_RELEASE_RESET __HAL_RCC_GPIOG_RELEASE_RESET +#define __GPIOH_CLK_DISABLE __HAL_RCC_GPIOH_CLK_DISABLE +#define __GPIOH_CLK_ENABLE __HAL_RCC_GPIOH_CLK_ENABLE +#define __GPIOH_CLK_SLEEP_DISABLE __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE +#define __GPIOH_CLK_SLEEP_ENABLE __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE +#define __GPIOH_FORCE_RESET __HAL_RCC_GPIOH_FORCE_RESET +#define __GPIOH_RELEASE_RESET __HAL_RCC_GPIOH_RELEASE_RESET +#define __I2C1_CLK_DISABLE __HAL_RCC_I2C1_CLK_DISABLE +#define __I2C1_CLK_ENABLE __HAL_RCC_I2C1_CLK_ENABLE +#define __I2C1_CLK_SLEEP_DISABLE __HAL_RCC_I2C1_CLK_SLEEP_DISABLE +#define __I2C1_CLK_SLEEP_ENABLE __HAL_RCC_I2C1_CLK_SLEEP_ENABLE +#define __I2C1_FORCE_RESET __HAL_RCC_I2C1_FORCE_RESET +#define __I2C1_RELEASE_RESET __HAL_RCC_I2C1_RELEASE_RESET +#define __I2C2_CLK_DISABLE __HAL_RCC_I2C2_CLK_DISABLE +#define __I2C2_CLK_ENABLE __HAL_RCC_I2C2_CLK_ENABLE +#define __I2C2_CLK_SLEEP_DISABLE __HAL_RCC_I2C2_CLK_SLEEP_DISABLE +#define __I2C2_CLK_SLEEP_ENABLE __HAL_RCC_I2C2_CLK_SLEEP_ENABLE +#define __I2C2_FORCE_RESET __HAL_RCC_I2C2_FORCE_RESET +#define __I2C2_RELEASE_RESET __HAL_RCC_I2C2_RELEASE_RESET +#define __I2C3_CLK_DISABLE __HAL_RCC_I2C3_CLK_DISABLE +#define __I2C3_CLK_ENABLE __HAL_RCC_I2C3_CLK_ENABLE +#define __I2C3_CLK_SLEEP_DISABLE __HAL_RCC_I2C3_CLK_SLEEP_DISABLE +#define __I2C3_CLK_SLEEP_ENABLE __HAL_RCC_I2C3_CLK_SLEEP_ENABLE +#define __I2C3_FORCE_RESET __HAL_RCC_I2C3_FORCE_RESET +#define __I2C3_RELEASE_RESET __HAL_RCC_I2C3_RELEASE_RESET +#define __LCD_CLK_DISABLE __HAL_RCC_LCD_CLK_DISABLE +#define __LCD_CLK_ENABLE __HAL_RCC_LCD_CLK_ENABLE +#define __LCD_CLK_SLEEP_DISABLE __HAL_RCC_LCD_CLK_SLEEP_DISABLE +#define __LCD_CLK_SLEEP_ENABLE __HAL_RCC_LCD_CLK_SLEEP_ENABLE +#define __LCD_FORCE_RESET __HAL_RCC_LCD_FORCE_RESET +#define __LCD_RELEASE_RESET __HAL_RCC_LCD_RELEASE_RESET +#define __LPTIM1_CLK_DISABLE __HAL_RCC_LPTIM1_CLK_DISABLE +#define __LPTIM1_CLK_ENABLE __HAL_RCC_LPTIM1_CLK_ENABLE +#define __LPTIM1_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE +#define __LPTIM1_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE +#define __LPTIM1_FORCE_RESET __HAL_RCC_LPTIM1_FORCE_RESET +#define __LPTIM1_RELEASE_RESET __HAL_RCC_LPTIM1_RELEASE_RESET +#define __LPTIM2_CLK_DISABLE __HAL_RCC_LPTIM2_CLK_DISABLE +#define __LPTIM2_CLK_ENABLE __HAL_RCC_LPTIM2_CLK_ENABLE +#define __LPTIM2_CLK_SLEEP_DISABLE __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE +#define __LPTIM2_CLK_SLEEP_ENABLE __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE +#define __LPTIM2_FORCE_RESET __HAL_RCC_LPTIM2_FORCE_RESET +#define __LPTIM2_RELEASE_RESET __HAL_RCC_LPTIM2_RELEASE_RESET +#define __LPUART1_CLK_DISABLE __HAL_RCC_LPUART1_CLK_DISABLE +#define __LPUART1_CLK_ENABLE __HAL_RCC_LPUART1_CLK_ENABLE +#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE +#define __LPUART1_CLK_SLEEP_ENABLE __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE +#define __LPUART1_FORCE_RESET __HAL_RCC_LPUART1_FORCE_RESET +#define __LPUART1_RELEASE_RESET __HAL_RCC_LPUART1_RELEASE_RESET +#define __OPAMP_CLK_DISABLE __HAL_RCC_OPAMP_CLK_DISABLE +#define __OPAMP_CLK_ENABLE __HAL_RCC_OPAMP_CLK_ENABLE +#define __OPAMP_CLK_SLEEP_DISABLE __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE +#define __OPAMP_CLK_SLEEP_ENABLE __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE +#define __OPAMP_FORCE_RESET __HAL_RCC_OPAMP_FORCE_RESET +#define __OPAMP_RELEASE_RESET __HAL_RCC_OPAMP_RELEASE_RESET +#define __OTGFS_CLK_DISABLE __HAL_RCC_OTGFS_CLK_DISABLE +#define __OTGFS_CLK_ENABLE __HAL_RCC_OTGFS_CLK_ENABLE +#define __OTGFS_CLK_SLEEP_DISABLE __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE +#define __OTGFS_CLK_SLEEP_ENABLE __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE +#define __OTGFS_FORCE_RESET __HAL_RCC_OTGFS_FORCE_RESET +#define __OTGFS_RELEASE_RESET __HAL_RCC_OTGFS_RELEASE_RESET +#define __PWR_CLK_DISABLE __HAL_RCC_PWR_CLK_DISABLE +#define __PWR_CLK_ENABLE __HAL_RCC_PWR_CLK_ENABLE +#define __PWR_CLK_SLEEP_DISABLE __HAL_RCC_PWR_CLK_SLEEP_DISABLE +#define __PWR_CLK_SLEEP_ENABLE __HAL_RCC_PWR_CLK_SLEEP_ENABLE +#define __PWR_FORCE_RESET __HAL_RCC_PWR_FORCE_RESET +#define __PWR_RELEASE_RESET __HAL_RCC_PWR_RELEASE_RESET +#define __QSPI_CLK_DISABLE __HAL_RCC_QSPI_CLK_DISABLE +#define __QSPI_CLK_ENABLE __HAL_RCC_QSPI_CLK_ENABLE +#define __QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QSPI_CLK_SLEEP_DISABLE +#define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE +#define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET +#define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + +#define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE +#define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE +#define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE +#define __RNG_CLK_SLEEP_ENABLE __HAL_RCC_RNG_CLK_SLEEP_ENABLE +#define __RNG_FORCE_RESET __HAL_RCC_RNG_FORCE_RESET +#define __RNG_RELEASE_RESET __HAL_RCC_RNG_RELEASE_RESET +#define __SAI1_CLK_DISABLE __HAL_RCC_SAI1_CLK_DISABLE +#define __SAI1_CLK_ENABLE __HAL_RCC_SAI1_CLK_ENABLE +#define __SAI1_CLK_SLEEP_DISABLE __HAL_RCC_SAI1_CLK_SLEEP_DISABLE +#define __SAI1_CLK_SLEEP_ENABLE __HAL_RCC_SAI1_CLK_SLEEP_ENABLE +#define __SAI1_FORCE_RESET __HAL_RCC_SAI1_FORCE_RESET +#define __SAI1_RELEASE_RESET __HAL_RCC_SAI1_RELEASE_RESET +#define __SAI2_CLK_DISABLE __HAL_RCC_SAI2_CLK_DISABLE +#define __SAI2_CLK_ENABLE __HAL_RCC_SAI2_CLK_ENABLE +#define __SAI2_CLK_SLEEP_DISABLE __HAL_RCC_SAI2_CLK_SLEEP_DISABLE +#define __SAI2_CLK_SLEEP_ENABLE __HAL_RCC_SAI2_CLK_SLEEP_ENABLE +#define __SAI2_FORCE_RESET __HAL_RCC_SAI2_FORCE_RESET +#define __SAI2_RELEASE_RESET __HAL_RCC_SAI2_RELEASE_RESET +#define __SDIO_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __SDIO_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __SDMMC_CLK_DISABLE __HAL_RCC_SDMMC_CLK_DISABLE +#define __SDMMC_CLK_ENABLE __HAL_RCC_SDMMC_CLK_ENABLE +#define __SDMMC_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE +#define __SDMMC_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE +#define __SDMMC_FORCE_RESET __HAL_RCC_SDMMC_FORCE_RESET +#define __SDMMC_RELEASE_RESET __HAL_RCC_SDMMC_RELEASE_RESET +#define __SPI1_CLK_DISABLE __HAL_RCC_SPI1_CLK_DISABLE +#define __SPI1_CLK_ENABLE __HAL_RCC_SPI1_CLK_ENABLE +#define __SPI1_CLK_SLEEP_DISABLE __HAL_RCC_SPI1_CLK_SLEEP_DISABLE +#define __SPI1_CLK_SLEEP_ENABLE __HAL_RCC_SPI1_CLK_SLEEP_ENABLE +#define __SPI1_FORCE_RESET __HAL_RCC_SPI1_FORCE_RESET +#define __SPI1_RELEASE_RESET __HAL_RCC_SPI1_RELEASE_RESET +#define __SPI2_CLK_DISABLE __HAL_RCC_SPI2_CLK_DISABLE +#define __SPI2_CLK_ENABLE __HAL_RCC_SPI2_CLK_ENABLE +#define __SPI2_CLK_SLEEP_DISABLE __HAL_RCC_SPI2_CLK_SLEEP_DISABLE +#define __SPI2_CLK_SLEEP_ENABLE __HAL_RCC_SPI2_CLK_SLEEP_ENABLE +#define __SPI2_FORCE_RESET __HAL_RCC_SPI2_FORCE_RESET +#define __SPI2_RELEASE_RESET __HAL_RCC_SPI2_RELEASE_RESET +#define __SPI3_CLK_DISABLE __HAL_RCC_SPI3_CLK_DISABLE +#define __SPI3_CLK_ENABLE __HAL_RCC_SPI3_CLK_ENABLE +#define __SPI3_CLK_SLEEP_DISABLE __HAL_RCC_SPI3_CLK_SLEEP_DISABLE +#define __SPI3_CLK_SLEEP_ENABLE __HAL_RCC_SPI3_CLK_SLEEP_ENABLE +#define __SPI3_FORCE_RESET __HAL_RCC_SPI3_FORCE_RESET +#define __SPI3_RELEASE_RESET __HAL_RCC_SPI3_RELEASE_RESET +#define __SRAM_CLK_DISABLE __HAL_RCC_SRAM_CLK_DISABLE +#define __SRAM_CLK_ENABLE __HAL_RCC_SRAM_CLK_ENABLE +#define __SRAM1_CLK_SLEEP_DISABLE __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE +#define __SRAM1_CLK_SLEEP_ENABLE __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE +#define __SRAM2_CLK_SLEEP_DISABLE __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE +#define __SRAM2_CLK_SLEEP_ENABLE __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE +#define __SWPMI1_CLK_DISABLE __HAL_RCC_SWPMI1_CLK_DISABLE +#define __SWPMI1_CLK_ENABLE __HAL_RCC_SWPMI1_CLK_ENABLE +#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE +#define __SWPMI1_CLK_SLEEP_ENABLE __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE +#define __SWPMI1_FORCE_RESET __HAL_RCC_SWPMI1_FORCE_RESET +#define __SWPMI1_RELEASE_RESET __HAL_RCC_SWPMI1_RELEASE_RESET +#define __SYSCFG_CLK_DISABLE __HAL_RCC_SYSCFG_CLK_DISABLE +#define __SYSCFG_CLK_ENABLE __HAL_RCC_SYSCFG_CLK_ENABLE +#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE +#define __SYSCFG_CLK_SLEEP_ENABLE __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE +#define __SYSCFG_FORCE_RESET __HAL_RCC_SYSCFG_FORCE_RESET +#define __SYSCFG_RELEASE_RESET __HAL_RCC_SYSCFG_RELEASE_RESET +#define __TIM1_CLK_DISABLE __HAL_RCC_TIM1_CLK_DISABLE +#define __TIM1_CLK_ENABLE __HAL_RCC_TIM1_CLK_ENABLE +#define __TIM1_CLK_SLEEP_DISABLE __HAL_RCC_TIM1_CLK_SLEEP_DISABLE +#define __TIM1_CLK_SLEEP_ENABLE __HAL_RCC_TIM1_CLK_SLEEP_ENABLE +#define __TIM1_FORCE_RESET __HAL_RCC_TIM1_FORCE_RESET +#define __TIM1_RELEASE_RESET __HAL_RCC_TIM1_RELEASE_RESET +#define __TIM10_CLK_DISABLE __HAL_RCC_TIM10_CLK_DISABLE +#define __TIM10_CLK_ENABLE __HAL_RCC_TIM10_CLK_ENABLE +#define __TIM10_FORCE_RESET __HAL_RCC_TIM10_FORCE_RESET +#define __TIM10_RELEASE_RESET __HAL_RCC_TIM10_RELEASE_RESET +#define __TIM11_CLK_DISABLE __HAL_RCC_TIM11_CLK_DISABLE +#define __TIM11_CLK_ENABLE __HAL_RCC_TIM11_CLK_ENABLE +#define __TIM11_FORCE_RESET __HAL_RCC_TIM11_FORCE_RESET +#define __TIM11_RELEASE_RESET __HAL_RCC_TIM11_RELEASE_RESET +#define __TIM12_CLK_DISABLE __HAL_RCC_TIM12_CLK_DISABLE +#define __TIM12_CLK_ENABLE __HAL_RCC_TIM12_CLK_ENABLE +#define __TIM12_FORCE_RESET __HAL_RCC_TIM12_FORCE_RESET +#define __TIM12_RELEASE_RESET __HAL_RCC_TIM12_RELEASE_RESET +#define __TIM13_CLK_DISABLE __HAL_RCC_TIM13_CLK_DISABLE +#define __TIM13_CLK_ENABLE __HAL_RCC_TIM13_CLK_ENABLE +#define __TIM13_FORCE_RESET __HAL_RCC_TIM13_FORCE_RESET +#define __TIM13_RELEASE_RESET __HAL_RCC_TIM13_RELEASE_RESET +#define __TIM14_CLK_DISABLE __HAL_RCC_TIM14_CLK_DISABLE +#define __TIM14_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE +#define __TIM14_FORCE_RESET __HAL_RCC_TIM14_FORCE_RESET +#define __TIM14_RELEASE_RESET __HAL_RCC_TIM14_RELEASE_RESET +#define __TIM15_CLK_DISABLE __HAL_RCC_TIM15_CLK_DISABLE +#define __TIM15_CLK_ENABLE __HAL_RCC_TIM15_CLK_ENABLE +#define __TIM15_CLK_SLEEP_DISABLE __HAL_RCC_TIM15_CLK_SLEEP_DISABLE +#define __TIM15_CLK_SLEEP_ENABLE __HAL_RCC_TIM15_CLK_SLEEP_ENABLE +#define __TIM15_FORCE_RESET __HAL_RCC_TIM15_FORCE_RESET +#define __TIM15_RELEASE_RESET __HAL_RCC_TIM15_RELEASE_RESET +#define __TIM16_CLK_DISABLE __HAL_RCC_TIM16_CLK_DISABLE +#define __TIM16_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE +#define __TIM16_CLK_SLEEP_DISABLE __HAL_RCC_TIM16_CLK_SLEEP_DISABLE +#define __TIM16_CLK_SLEEP_ENABLE __HAL_RCC_TIM16_CLK_SLEEP_ENABLE +#define __TIM16_FORCE_RESET __HAL_RCC_TIM16_FORCE_RESET +#define __TIM16_RELEASE_RESET __HAL_RCC_TIM16_RELEASE_RESET +#define __TIM17_CLK_DISABLE __HAL_RCC_TIM17_CLK_DISABLE +#define __TIM17_CLK_ENABLE __HAL_RCC_TIM17_CLK_ENABLE +#define __TIM17_CLK_SLEEP_DISABLE __HAL_RCC_TIM17_CLK_SLEEP_DISABLE +#define __TIM17_CLK_SLEEP_ENABLE __HAL_RCC_TIM17_CLK_SLEEP_ENABLE +#define __TIM17_FORCE_RESET __HAL_RCC_TIM17_FORCE_RESET +#define __TIM17_RELEASE_RESET __HAL_RCC_TIM17_RELEASE_RESET +#define __TIM2_CLK_DISABLE __HAL_RCC_TIM2_CLK_DISABLE +#define __TIM2_CLK_ENABLE __HAL_RCC_TIM2_CLK_ENABLE +#define __TIM2_CLK_SLEEP_DISABLE __HAL_RCC_TIM2_CLK_SLEEP_DISABLE +#define __TIM2_CLK_SLEEP_ENABLE __HAL_RCC_TIM2_CLK_SLEEP_ENABLE +#define __TIM2_FORCE_RESET __HAL_RCC_TIM2_FORCE_RESET +#define __TIM2_RELEASE_RESET __HAL_RCC_TIM2_RELEASE_RESET +#define __TIM3_CLK_DISABLE __HAL_RCC_TIM3_CLK_DISABLE +#define __TIM3_CLK_ENABLE __HAL_RCC_TIM3_CLK_ENABLE +#define __TIM3_CLK_SLEEP_DISABLE __HAL_RCC_TIM3_CLK_SLEEP_DISABLE +#define __TIM3_CLK_SLEEP_ENABLE __HAL_RCC_TIM3_CLK_SLEEP_ENABLE +#define __TIM3_FORCE_RESET __HAL_RCC_TIM3_FORCE_RESET +#define __TIM3_RELEASE_RESET __HAL_RCC_TIM3_RELEASE_RESET +#define __TIM4_CLK_DISABLE __HAL_RCC_TIM4_CLK_DISABLE +#define __TIM4_CLK_ENABLE __HAL_RCC_TIM4_CLK_ENABLE +#define __TIM4_CLK_SLEEP_DISABLE __HAL_RCC_TIM4_CLK_SLEEP_DISABLE +#define __TIM4_CLK_SLEEP_ENABLE __HAL_RCC_TIM4_CLK_SLEEP_ENABLE +#define __TIM4_FORCE_RESET __HAL_RCC_TIM4_FORCE_RESET +#define __TIM4_RELEASE_RESET __HAL_RCC_TIM4_RELEASE_RESET +#define __TIM5_CLK_DISABLE __HAL_RCC_TIM5_CLK_DISABLE +#define __TIM5_CLK_ENABLE __HAL_RCC_TIM5_CLK_ENABLE +#define __TIM5_CLK_SLEEP_DISABLE __HAL_RCC_TIM5_CLK_SLEEP_DISABLE +#define __TIM5_CLK_SLEEP_ENABLE __HAL_RCC_TIM5_CLK_SLEEP_ENABLE +#define __TIM5_FORCE_RESET __HAL_RCC_TIM5_FORCE_RESET +#define __TIM5_RELEASE_RESET __HAL_RCC_TIM5_RELEASE_RESET +#define __TIM6_CLK_DISABLE __HAL_RCC_TIM6_CLK_DISABLE +#define __TIM6_CLK_ENABLE __HAL_RCC_TIM6_CLK_ENABLE +#define __TIM6_CLK_SLEEP_DISABLE __HAL_RCC_TIM6_CLK_SLEEP_DISABLE +#define __TIM6_CLK_SLEEP_ENABLE __HAL_RCC_TIM6_CLK_SLEEP_ENABLE +#define __TIM6_FORCE_RESET __HAL_RCC_TIM6_FORCE_RESET +#define __TIM6_RELEASE_RESET __HAL_RCC_TIM6_RELEASE_RESET +#define __TIM7_CLK_DISABLE __HAL_RCC_TIM7_CLK_DISABLE +#define __TIM7_CLK_ENABLE __HAL_RCC_TIM7_CLK_ENABLE +#define __TIM7_CLK_SLEEP_DISABLE __HAL_RCC_TIM7_CLK_SLEEP_DISABLE +#define __TIM7_CLK_SLEEP_ENABLE __HAL_RCC_TIM7_CLK_SLEEP_ENABLE +#define __TIM7_FORCE_RESET __HAL_RCC_TIM7_FORCE_RESET +#define __TIM7_RELEASE_RESET __HAL_RCC_TIM7_RELEASE_RESET +#define __TIM8_CLK_DISABLE __HAL_RCC_TIM8_CLK_DISABLE +#define __TIM8_CLK_ENABLE __HAL_RCC_TIM8_CLK_ENABLE +#define __TIM8_CLK_SLEEP_DISABLE __HAL_RCC_TIM8_CLK_SLEEP_DISABLE +#define __TIM8_CLK_SLEEP_ENABLE __HAL_RCC_TIM8_CLK_SLEEP_ENABLE +#define __TIM8_FORCE_RESET __HAL_RCC_TIM8_FORCE_RESET +#define __TIM8_RELEASE_RESET __HAL_RCC_TIM8_RELEASE_RESET +#define __TIM9_CLK_DISABLE __HAL_RCC_TIM9_CLK_DISABLE +#define __TIM9_CLK_ENABLE __HAL_RCC_TIM9_CLK_ENABLE +#define __TIM9_FORCE_RESET __HAL_RCC_TIM9_FORCE_RESET +#define __TIM9_RELEASE_RESET __HAL_RCC_TIM9_RELEASE_RESET +#define __TSC_CLK_DISABLE __HAL_RCC_TSC_CLK_DISABLE +#define __TSC_CLK_ENABLE __HAL_RCC_TSC_CLK_ENABLE +#define __TSC_CLK_SLEEP_DISABLE __HAL_RCC_TSC_CLK_SLEEP_DISABLE +#define __TSC_CLK_SLEEP_ENABLE __HAL_RCC_TSC_CLK_SLEEP_ENABLE +#define __TSC_FORCE_RESET __HAL_RCC_TSC_FORCE_RESET +#define __TSC_RELEASE_RESET __HAL_RCC_TSC_RELEASE_RESET +#define __UART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __UART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __UART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __UART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __UART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __UART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __UART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __UART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __UART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __UART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __UART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __UART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART1_CLK_DISABLE __HAL_RCC_USART1_CLK_DISABLE +#define __USART1_CLK_ENABLE __HAL_RCC_USART1_CLK_ENABLE +#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE +#define __USART1_CLK_SLEEP_ENABLE __HAL_RCC_USART1_CLK_SLEEP_ENABLE +#define __USART1_FORCE_RESET __HAL_RCC_USART1_FORCE_RESET +#define __USART1_RELEASE_RESET __HAL_RCC_USART1_RELEASE_RESET +#define __USART2_CLK_DISABLE __HAL_RCC_USART2_CLK_DISABLE +#define __USART2_CLK_ENABLE __HAL_RCC_USART2_CLK_ENABLE +#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE +#define __USART2_CLK_SLEEP_ENABLE __HAL_RCC_USART2_CLK_SLEEP_ENABLE +#define __USART2_FORCE_RESET __HAL_RCC_USART2_FORCE_RESET +#define __USART2_RELEASE_RESET __HAL_RCC_USART2_RELEASE_RESET +#define __USART3_CLK_DISABLE __HAL_RCC_USART3_CLK_DISABLE +#define __USART3_CLK_ENABLE __HAL_RCC_USART3_CLK_ENABLE +#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE +#define __USART3_CLK_SLEEP_ENABLE __HAL_RCC_USART3_CLK_SLEEP_ENABLE +#define __USART3_FORCE_RESET __HAL_RCC_USART3_FORCE_RESET +#define __USART3_RELEASE_RESET __HAL_RCC_USART3_RELEASE_RESET +#define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE +#define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE +#define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET +#define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET +#define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE +#define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE +#define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET +#define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET +#define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __USART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __USART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __USART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __USART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __USART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __USART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __USART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __USB_CLK_DISABLE __HAL_RCC_USB_CLK_DISABLE +#define __USB_CLK_ENABLE __HAL_RCC_USB_CLK_ENABLE +#define __USB_FORCE_RESET __HAL_RCC_USB_FORCE_RESET +#define __USB_CLK_SLEEP_ENABLE __HAL_RCC_USB_CLK_SLEEP_ENABLE +#define __USB_CLK_SLEEP_DISABLE __HAL_RCC_USB_CLK_SLEEP_DISABLE +#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE +#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE +#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET + +#if defined(STM32H7) +#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE +#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE +#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE + +#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/ +#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/ + + +#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED +#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED +#endif + +#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE +#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE +#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE +#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE +#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET +#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET + +#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE +#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE +#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET +#define __TIM21_RELEASE_RESET __HAL_RCC_TIM21_RELEASE_RESET +#define __TIM21_CLK_SLEEP_ENABLE __HAL_RCC_TIM21_CLK_SLEEP_ENABLE +#define __TIM21_CLK_SLEEP_DISABLE __HAL_RCC_TIM21_CLK_SLEEP_DISABLE +#define __TIM22_CLK_ENABLE __HAL_RCC_TIM22_CLK_ENABLE +#define __TIM22_CLK_DISABLE __HAL_RCC_TIM22_CLK_DISABLE +#define __TIM22_FORCE_RESET __HAL_RCC_TIM22_FORCE_RESET +#define __TIM22_RELEASE_RESET __HAL_RCC_TIM22_RELEASE_RESET +#define __TIM22_CLK_SLEEP_ENABLE __HAL_RCC_TIM22_CLK_SLEEP_ENABLE +#define __TIM22_CLK_SLEEP_DISABLE __HAL_RCC_TIM22_CLK_SLEEP_DISABLE +#define __CRS_CLK_DISABLE __HAL_RCC_CRS_CLK_DISABLE +#define __CRS_CLK_ENABLE __HAL_RCC_CRS_CLK_ENABLE +#define __CRS_CLK_SLEEP_DISABLE __HAL_RCC_CRS_CLK_SLEEP_DISABLE +#define __CRS_CLK_SLEEP_ENABLE __HAL_RCC_CRS_CLK_SLEEP_ENABLE +#define __CRS_FORCE_RESET __HAL_RCC_CRS_FORCE_RESET +#define __CRS_RELEASE_RESET __HAL_RCC_CRS_RELEASE_RESET +#define __RCC_BACKUPRESET_FORCE __HAL_RCC_BACKUPRESET_FORCE +#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE + +#define __USB_OTG_FS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __USB_OTG_FS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET +#define __USB_OTG_FS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE +#define __USB_OTG_FS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE +#define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE +#define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE +#define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE +#define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE +#define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET +#define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET +#define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE +#define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE +#define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE +#define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET +#define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET +#define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE +#define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE +#define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET +#define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET +#define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE +#define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE +#define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET +#define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE +#define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE +#define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE +#define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE +#define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET +#define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET +#define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE +#define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE +#define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET +#define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET +#define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE +#define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE +#define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET +#define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET +#define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE +#define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE +#define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET +#define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET +#define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE +#define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE +#define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET +#define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE +#define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE +#define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET +#define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET +#define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE +#define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE +#define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET +#define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET +#define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE +#define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE +#define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET +#define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET +#define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED +#define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET +#define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET +#define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE +#define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE +#define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET +#define __DMA2D_RELEASE_RESET __HAL_RCC_DMA2D_RELEASE_RESET +#define __DMA2D_CLK_SLEEP_ENABLE __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE +#define __DMA2D_CLK_SLEEP_DISABLE __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE + +/* alias define maintained for legacy */ +#define __HAL_RCC_OTGFS_FORCE_RESET __HAL_RCC_USB_OTG_FS_FORCE_RESET +#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET + +#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __ADC34_CLK_ENABLE __HAL_RCC_ADC34_CLK_ENABLE +#define __ADC34_CLK_DISABLE __HAL_RCC_ADC34_CLK_DISABLE +#define __DAC2_CLK_ENABLE __HAL_RCC_DAC2_CLK_ENABLE +#define __DAC2_CLK_DISABLE __HAL_RCC_DAC2_CLK_DISABLE +#define __TIM18_CLK_ENABLE __HAL_RCC_TIM18_CLK_ENABLE +#define __TIM18_CLK_DISABLE __HAL_RCC_TIM18_CLK_DISABLE +#define __TIM19_CLK_ENABLE __HAL_RCC_TIM19_CLK_ENABLE +#define __TIM19_CLK_DISABLE __HAL_RCC_TIM19_CLK_DISABLE +#define __TIM20_CLK_ENABLE __HAL_RCC_TIM20_CLK_ENABLE +#define __TIM20_CLK_DISABLE __HAL_RCC_TIM20_CLK_DISABLE +#define __HRTIM1_CLK_ENABLE __HAL_RCC_HRTIM1_CLK_ENABLE +#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE +#define __SDADC1_CLK_ENABLE __HAL_RCC_SDADC1_CLK_ENABLE +#define __SDADC2_CLK_ENABLE __HAL_RCC_SDADC2_CLK_ENABLE +#define __SDADC3_CLK_ENABLE __HAL_RCC_SDADC3_CLK_ENABLE +#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE +#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE +#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE + +#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __ADC34_FORCE_RESET __HAL_RCC_ADC34_FORCE_RESET +#define __ADC34_RELEASE_RESET __HAL_RCC_ADC34_RELEASE_RESET +#define __DAC2_FORCE_RESET __HAL_RCC_DAC2_FORCE_RESET +#define __DAC2_RELEASE_RESET __HAL_RCC_DAC2_RELEASE_RESET +#define __TIM18_FORCE_RESET __HAL_RCC_TIM18_FORCE_RESET +#define __TIM18_RELEASE_RESET __HAL_RCC_TIM18_RELEASE_RESET +#define __TIM19_FORCE_RESET __HAL_RCC_TIM19_FORCE_RESET +#define __TIM19_RELEASE_RESET __HAL_RCC_TIM19_RELEASE_RESET +#define __TIM20_FORCE_RESET __HAL_RCC_TIM20_FORCE_RESET +#define __TIM20_RELEASE_RESET __HAL_RCC_TIM20_RELEASE_RESET +#define __HRTIM1_FORCE_RESET __HAL_RCC_HRTIM1_FORCE_RESET +#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET +#define __SDADC1_FORCE_RESET __HAL_RCC_SDADC1_FORCE_RESET +#define __SDADC2_FORCE_RESET __HAL_RCC_SDADC2_FORCE_RESET +#define __SDADC3_FORCE_RESET __HAL_RCC_SDADC3_FORCE_RESET +#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET +#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET +#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET + +#define __ADC1_IS_CLK_ENABLED __HAL_RCC_ADC1_IS_CLK_ENABLED +#define __ADC1_IS_CLK_DISABLED __HAL_RCC_ADC1_IS_CLK_DISABLED +#define __ADC12_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __ADC12_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __ADC34_IS_CLK_ENABLED __HAL_RCC_ADC34_IS_CLK_ENABLED +#define __ADC34_IS_CLK_DISABLED __HAL_RCC_ADC34_IS_CLK_DISABLED +#define __CEC_IS_CLK_ENABLED __HAL_RCC_CEC_IS_CLK_ENABLED +#define __CEC_IS_CLK_DISABLED __HAL_RCC_CEC_IS_CLK_DISABLED +#define __CRC_IS_CLK_ENABLED __HAL_RCC_CRC_IS_CLK_ENABLED +#define __CRC_IS_CLK_DISABLED __HAL_RCC_CRC_IS_CLK_DISABLED +#define __DAC1_IS_CLK_ENABLED __HAL_RCC_DAC1_IS_CLK_ENABLED +#define __DAC1_IS_CLK_DISABLED __HAL_RCC_DAC1_IS_CLK_DISABLED +#define __DAC2_IS_CLK_ENABLED __HAL_RCC_DAC2_IS_CLK_ENABLED +#define __DAC2_IS_CLK_DISABLED __HAL_RCC_DAC2_IS_CLK_DISABLED +#define __DMA1_IS_CLK_ENABLED __HAL_RCC_DMA1_IS_CLK_ENABLED +#define __DMA1_IS_CLK_DISABLED __HAL_RCC_DMA1_IS_CLK_DISABLED +#define __DMA2_IS_CLK_ENABLED __HAL_RCC_DMA2_IS_CLK_ENABLED +#define __DMA2_IS_CLK_DISABLED __HAL_RCC_DMA2_IS_CLK_DISABLED +#define __FLITF_IS_CLK_ENABLED __HAL_RCC_FLITF_IS_CLK_ENABLED +#define __FLITF_IS_CLK_DISABLED __HAL_RCC_FLITF_IS_CLK_DISABLED +#define __FMC_IS_CLK_ENABLED __HAL_RCC_FMC_IS_CLK_ENABLED +#define __FMC_IS_CLK_DISABLED __HAL_RCC_FMC_IS_CLK_DISABLED +#define __GPIOA_IS_CLK_ENABLED __HAL_RCC_GPIOA_IS_CLK_ENABLED +#define __GPIOA_IS_CLK_DISABLED __HAL_RCC_GPIOA_IS_CLK_DISABLED +#define __GPIOB_IS_CLK_ENABLED __HAL_RCC_GPIOB_IS_CLK_ENABLED +#define __GPIOB_IS_CLK_DISABLED __HAL_RCC_GPIOB_IS_CLK_DISABLED +#define __GPIOC_IS_CLK_ENABLED __HAL_RCC_GPIOC_IS_CLK_ENABLED +#define __GPIOC_IS_CLK_DISABLED __HAL_RCC_GPIOC_IS_CLK_DISABLED +#define __GPIOD_IS_CLK_ENABLED __HAL_RCC_GPIOD_IS_CLK_ENABLED +#define __GPIOD_IS_CLK_DISABLED __HAL_RCC_GPIOD_IS_CLK_DISABLED +#define __GPIOE_IS_CLK_ENABLED __HAL_RCC_GPIOE_IS_CLK_ENABLED +#define __GPIOE_IS_CLK_DISABLED __HAL_RCC_GPIOE_IS_CLK_DISABLED +#define __GPIOF_IS_CLK_ENABLED __HAL_RCC_GPIOF_IS_CLK_ENABLED +#define __GPIOF_IS_CLK_DISABLED __HAL_RCC_GPIOF_IS_CLK_DISABLED +#define __GPIOG_IS_CLK_ENABLED __HAL_RCC_GPIOG_IS_CLK_ENABLED +#define __GPIOG_IS_CLK_DISABLED __HAL_RCC_GPIOG_IS_CLK_DISABLED +#define __GPIOH_IS_CLK_ENABLED __HAL_RCC_GPIOH_IS_CLK_ENABLED +#define __GPIOH_IS_CLK_DISABLED __HAL_RCC_GPIOH_IS_CLK_DISABLED +#define __HRTIM1_IS_CLK_ENABLED __HAL_RCC_HRTIM1_IS_CLK_ENABLED +#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED +#define __I2C1_IS_CLK_ENABLED __HAL_RCC_I2C1_IS_CLK_ENABLED +#define __I2C1_IS_CLK_DISABLED __HAL_RCC_I2C1_IS_CLK_DISABLED +#define __I2C2_IS_CLK_ENABLED __HAL_RCC_I2C2_IS_CLK_ENABLED +#define __I2C2_IS_CLK_DISABLED __HAL_RCC_I2C2_IS_CLK_DISABLED +#define __I2C3_IS_CLK_ENABLED __HAL_RCC_I2C3_IS_CLK_ENABLED +#define __I2C3_IS_CLK_DISABLED __HAL_RCC_I2C3_IS_CLK_DISABLED +#define __PWR_IS_CLK_ENABLED __HAL_RCC_PWR_IS_CLK_ENABLED +#define __PWR_IS_CLK_DISABLED __HAL_RCC_PWR_IS_CLK_DISABLED +#define __SYSCFG_IS_CLK_ENABLED __HAL_RCC_SYSCFG_IS_CLK_ENABLED +#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED +#define __SPI1_IS_CLK_ENABLED __HAL_RCC_SPI1_IS_CLK_ENABLED +#define __SPI1_IS_CLK_DISABLED __HAL_RCC_SPI1_IS_CLK_DISABLED +#define __SPI2_IS_CLK_ENABLED __HAL_RCC_SPI2_IS_CLK_ENABLED +#define __SPI2_IS_CLK_DISABLED __HAL_RCC_SPI2_IS_CLK_DISABLED +#define __SPI3_IS_CLK_ENABLED __HAL_RCC_SPI3_IS_CLK_ENABLED +#define __SPI3_IS_CLK_DISABLED __HAL_RCC_SPI3_IS_CLK_DISABLED +#define __SPI4_IS_CLK_ENABLED __HAL_RCC_SPI4_IS_CLK_ENABLED +#define __SPI4_IS_CLK_DISABLED __HAL_RCC_SPI4_IS_CLK_DISABLED +#define __SDADC1_IS_CLK_ENABLED __HAL_RCC_SDADC1_IS_CLK_ENABLED +#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED +#define __SDADC2_IS_CLK_ENABLED __HAL_RCC_SDADC2_IS_CLK_ENABLED +#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED +#define __SDADC3_IS_CLK_ENABLED __HAL_RCC_SDADC3_IS_CLK_ENABLED +#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED +#define __SRAM_IS_CLK_ENABLED __HAL_RCC_SRAM_IS_CLK_ENABLED +#define __SRAM_IS_CLK_DISABLED __HAL_RCC_SRAM_IS_CLK_DISABLED +#define __TIM1_IS_CLK_ENABLED __HAL_RCC_TIM1_IS_CLK_ENABLED +#define __TIM1_IS_CLK_DISABLED __HAL_RCC_TIM1_IS_CLK_DISABLED +#define __TIM2_IS_CLK_ENABLED __HAL_RCC_TIM2_IS_CLK_ENABLED +#define __TIM2_IS_CLK_DISABLED __HAL_RCC_TIM2_IS_CLK_DISABLED +#define __TIM3_IS_CLK_ENABLED __HAL_RCC_TIM3_IS_CLK_ENABLED +#define __TIM3_IS_CLK_DISABLED __HAL_RCC_TIM3_IS_CLK_DISABLED +#define __TIM4_IS_CLK_ENABLED __HAL_RCC_TIM4_IS_CLK_ENABLED +#define __TIM4_IS_CLK_DISABLED __HAL_RCC_TIM4_IS_CLK_DISABLED +#define __TIM5_IS_CLK_ENABLED __HAL_RCC_TIM5_IS_CLK_ENABLED +#define __TIM5_IS_CLK_DISABLED __HAL_RCC_TIM5_IS_CLK_DISABLED +#define __TIM6_IS_CLK_ENABLED __HAL_RCC_TIM6_IS_CLK_ENABLED +#define __TIM6_IS_CLK_DISABLED __HAL_RCC_TIM6_IS_CLK_DISABLED +#define __TIM7_IS_CLK_ENABLED __HAL_RCC_TIM7_IS_CLK_ENABLED +#define __TIM7_IS_CLK_DISABLED __HAL_RCC_TIM7_IS_CLK_DISABLED +#define __TIM8_IS_CLK_ENABLED __HAL_RCC_TIM8_IS_CLK_ENABLED +#define __TIM8_IS_CLK_DISABLED __HAL_RCC_TIM8_IS_CLK_DISABLED +#define __TIM12_IS_CLK_ENABLED __HAL_RCC_TIM12_IS_CLK_ENABLED +#define __TIM12_IS_CLK_DISABLED __HAL_RCC_TIM12_IS_CLK_DISABLED +#define __TIM13_IS_CLK_ENABLED __HAL_RCC_TIM13_IS_CLK_ENABLED +#define __TIM13_IS_CLK_DISABLED __HAL_RCC_TIM13_IS_CLK_DISABLED +#define __TIM14_IS_CLK_ENABLED __HAL_RCC_TIM14_IS_CLK_ENABLED +#define __TIM14_IS_CLK_DISABLED __HAL_RCC_TIM14_IS_CLK_DISABLED +#define __TIM15_IS_CLK_ENABLED __HAL_RCC_TIM15_IS_CLK_ENABLED +#define __TIM15_IS_CLK_DISABLED __HAL_RCC_TIM15_IS_CLK_DISABLED +#define __TIM16_IS_CLK_ENABLED __HAL_RCC_TIM16_IS_CLK_ENABLED +#define __TIM16_IS_CLK_DISABLED __HAL_RCC_TIM16_IS_CLK_DISABLED +#define __TIM17_IS_CLK_ENABLED __HAL_RCC_TIM17_IS_CLK_ENABLED +#define __TIM17_IS_CLK_DISABLED __HAL_RCC_TIM17_IS_CLK_DISABLED +#define __TIM18_IS_CLK_ENABLED __HAL_RCC_TIM18_IS_CLK_ENABLED +#define __TIM18_IS_CLK_DISABLED __HAL_RCC_TIM18_IS_CLK_DISABLED +#define __TIM19_IS_CLK_ENABLED __HAL_RCC_TIM19_IS_CLK_ENABLED +#define __TIM19_IS_CLK_DISABLED __HAL_RCC_TIM19_IS_CLK_DISABLED +#define __TIM20_IS_CLK_ENABLED __HAL_RCC_TIM20_IS_CLK_ENABLED +#define __TIM20_IS_CLK_DISABLED __HAL_RCC_TIM20_IS_CLK_DISABLED +#define __TSC_IS_CLK_ENABLED __HAL_RCC_TSC_IS_CLK_ENABLED +#define __TSC_IS_CLK_DISABLED __HAL_RCC_TSC_IS_CLK_DISABLED +#define __UART4_IS_CLK_ENABLED __HAL_RCC_UART4_IS_CLK_ENABLED +#define __UART4_IS_CLK_DISABLED __HAL_RCC_UART4_IS_CLK_DISABLED +#define __UART5_IS_CLK_ENABLED __HAL_RCC_UART5_IS_CLK_ENABLED +#define __UART5_IS_CLK_DISABLED __HAL_RCC_UART5_IS_CLK_DISABLED +#define __USART1_IS_CLK_ENABLED __HAL_RCC_USART1_IS_CLK_ENABLED +#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED +#define __USART2_IS_CLK_ENABLED __HAL_RCC_USART2_IS_CLK_ENABLED +#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED +#define __USART3_IS_CLK_ENABLED __HAL_RCC_USART3_IS_CLK_ENABLED +#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED +#define __USB_IS_CLK_ENABLED __HAL_RCC_USB_IS_CLK_ENABLED +#define __USB_IS_CLK_DISABLED __HAL_RCC_USB_IS_CLK_DISABLED +#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED +#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED + +#if defined(STM32L1) +#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE +#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE +#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET +#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET +#endif /* STM32L1 */ + +#if defined(STM32F4) +#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET +#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET +#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDMMC1_CLK_ENABLE __HAL_RCC_SDIO_CLK_ENABLE +#define __HAL_RCC_SDMMC1_CLK_DISABLE __HAL_RCC_SDIO_CLK_DISABLE +#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED __HAL_RCC_SDIO_IS_CLK_ENABLED +#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED __HAL_RCC_SDIO_IS_CLK_DISABLED +#define Sdmmc1ClockSelection SdioClockSelection +#define RCC_PERIPHCLK_SDMMC1 RCC_PERIPHCLK_SDIO +#define RCC_SDMMC1CLKSOURCE_CLK48 RCC_SDIOCLKSOURCE_CK48 +#define RCC_SDMMC1CLKSOURCE_SYSCLK RCC_SDIOCLKSOURCE_SYSCLK +#define __HAL_RCC_SDMMC1_CONFIG __HAL_RCC_SDIO_CONFIG +#define __HAL_RCC_GET_SDMMC1_SOURCE __HAL_RCC_GET_SDIO_SOURCE +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define __HAL_RCC_SDIO_FORCE_RESET __HAL_RCC_SDMMC1_FORCE_RESET +#define __HAL_RCC_SDIO_RELEASE_RESET __HAL_RCC_SDMMC1_RELEASE_RESET +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE +#define __HAL_RCC_SDIO_CLK_ENABLE __HAL_RCC_SDMMC1_CLK_ENABLE +#define __HAL_RCC_SDIO_CLK_DISABLE __HAL_RCC_SDMMC1_CLK_DISABLE +#define __HAL_RCC_SDIO_IS_CLK_ENABLED __HAL_RCC_SDMMC1_IS_CLK_ENABLED +#define __HAL_RCC_SDIO_IS_CLK_DISABLED __HAL_RCC_SDMMC1_IS_CLK_DISABLED +#define SdioClockSelection Sdmmc1ClockSelection +#define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 +#define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#endif + +#if defined(STM32F7) +#define RCC_SDIOCLKSOURCE_CLK48 RCC_SDMMC1CLKSOURCE_CLK48 +#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK +#endif + +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + +#define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG +#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG + +#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE + +#define IS_RCC_MSIRANGE IS_RCC_MSI_CLOCK_RANGE +#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE +#define IS_RCC_SYSCLK_DIV IS_RCC_HCLK +#define IS_RCC_HCLK_DIV IS_RCC_PCLK +#define IS_RCC_PERIPHCLK IS_RCC_PERIPHCLOCK + +#define RCC_IT_HSI14 RCC_IT_HSI14RDY + +#define RCC_IT_CSSLSE RCC_IT_LSECSS +#define RCC_IT_CSSHSE RCC_IT_CSS + +#define RCC_PLLMUL_3 RCC_PLL_MUL3 +#define RCC_PLLMUL_4 RCC_PLL_MUL4 +#define RCC_PLLMUL_6 RCC_PLL_MUL6 +#define RCC_PLLMUL_8 RCC_PLL_MUL8 +#define RCC_PLLMUL_12 RCC_PLL_MUL12 +#define RCC_PLLMUL_16 RCC_PLL_MUL16 +#define RCC_PLLMUL_24 RCC_PLL_MUL24 +#define RCC_PLLMUL_32 RCC_PLL_MUL32 +#define RCC_PLLMUL_48 RCC_PLL_MUL48 + +#define RCC_PLLDIV_2 RCC_PLL_DIV2 +#define RCC_PLLDIV_3 RCC_PLL_DIV3 +#define RCC_PLLDIV_4 RCC_PLL_DIV4 + +#define IS_RCC_MCOSOURCE IS_RCC_MCO1SOURCE +#define __HAL_RCC_MCO_CONFIG __HAL_RCC_MCO1_CONFIG +#define RCC_MCO_NODIV RCC_MCODIV_1 +#define RCC_MCO_DIV1 RCC_MCODIV_1 +#define RCC_MCO_DIV2 RCC_MCODIV_2 +#define RCC_MCO_DIV4 RCC_MCODIV_4 +#define RCC_MCO_DIV8 RCC_MCODIV_8 +#define RCC_MCO_DIV16 RCC_MCODIV_16 +#define RCC_MCO_DIV32 RCC_MCODIV_32 +#define RCC_MCO_DIV64 RCC_MCODIV_64 +#define RCC_MCO_DIV128 RCC_MCODIV_128 +#define RCC_MCOSOURCE_NONE RCC_MCO1SOURCE_NOCLOCK +#define RCC_MCOSOURCE_LSI RCC_MCO1SOURCE_LSI +#define RCC_MCOSOURCE_LSE RCC_MCO1SOURCE_LSE +#define RCC_MCOSOURCE_SYSCLK RCC_MCO1SOURCE_SYSCLK +#define RCC_MCOSOURCE_HSI RCC_MCO1SOURCE_HSI +#define RCC_MCOSOURCE_HSI14 RCC_MCO1SOURCE_HSI14 +#define RCC_MCOSOURCE_HSI48 RCC_MCO1SOURCE_HSI48 +#define RCC_MCOSOURCE_HSE RCC_MCO1SOURCE_HSE +#define RCC_MCOSOURCE_PLLCLK_DIV1 RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK +#define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 + +#if defined(STM32L4) || defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5) || defined(STM32WL) || defined(STM32C0) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#else +#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK +#endif + +#define RCC_USBCLK_PLLSAI1 RCC_USBCLKSOURCE_PLLSAI1 +#define RCC_USBCLK_PLL RCC_USBCLKSOURCE_PLL +#define RCC_USBCLK_MSI RCC_USBCLKSOURCE_MSI +#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1 RCC_USBCLKSOURCE_PLL +#define RCC_USBPLLCLK_DIV1_5 RCC_USBCLKSOURCE_PLL_DIV1_5 +#define RCC_USBPLLCLK_DIV2 RCC_USBCLKSOURCE_PLL_DIV2 +#define RCC_USBPLLCLK_DIV3 RCC_USBCLKSOURCE_PLL_DIV3 + +#define HSION_BitNumber RCC_HSION_BIT_NUMBER +#define HSION_BITNUMBER RCC_HSION_BIT_NUMBER +#define HSEON_BitNumber RCC_HSEON_BIT_NUMBER +#define HSEON_BITNUMBER RCC_HSEON_BIT_NUMBER +#define MSION_BITNUMBER RCC_MSION_BIT_NUMBER +#define CSSON_BitNumber RCC_CSSON_BIT_NUMBER +#define CSSON_BITNUMBER RCC_CSSON_BIT_NUMBER +#define PLLON_BitNumber RCC_PLLON_BIT_NUMBER +#define PLLON_BITNUMBER RCC_PLLON_BIT_NUMBER +#define PLLI2SON_BitNumber RCC_PLLI2SON_BIT_NUMBER +#define I2SSRC_BitNumber RCC_I2SSRC_BIT_NUMBER +#define RTCEN_BitNumber RCC_RTCEN_BIT_NUMBER +#define RTCEN_BITNUMBER RCC_RTCEN_BIT_NUMBER +#define BDRST_BitNumber RCC_BDRST_BIT_NUMBER +#define BDRST_BITNUMBER RCC_BDRST_BIT_NUMBER +#define RTCRST_BITNUMBER RCC_RTCRST_BIT_NUMBER +#define LSION_BitNumber RCC_LSION_BIT_NUMBER +#define LSION_BITNUMBER RCC_LSION_BIT_NUMBER +#define LSEON_BitNumber RCC_LSEON_BIT_NUMBER +#define LSEON_BITNUMBER RCC_LSEON_BIT_NUMBER +#define LSEBYP_BITNUMBER RCC_LSEBYP_BIT_NUMBER +#define PLLSAION_BitNumber RCC_PLLSAION_BIT_NUMBER +#define TIMPRE_BitNumber RCC_TIMPRE_BIT_NUMBER +#define RMVF_BitNumber RCC_RMVF_BIT_NUMBER +#define RMVF_BITNUMBER RCC_RMVF_BIT_NUMBER +#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER +#define CR_BYTE2_ADDRESS RCC_CR_BYTE2_ADDRESS +#define CIR_BYTE1_ADDRESS RCC_CIR_BYTE1_ADDRESS +#define CIR_BYTE2_ADDRESS RCC_CIR_BYTE2_ADDRESS +#define BDCR_BYTE0_ADDRESS RCC_BDCR_BYTE0_ADDRESS +#define DBP_TIMEOUT_VALUE RCC_DBP_TIMEOUT_VALUE +#define LSE_TIMEOUT_VALUE RCC_LSE_TIMEOUT_VALUE + +#define CR_HSION_BB RCC_CR_HSION_BB +#define CR_CSSON_BB RCC_CR_CSSON_BB +#define CR_PLLON_BB RCC_CR_PLLON_BB +#define CR_PLLI2SON_BB RCC_CR_PLLI2SON_BB +#define CR_MSION_BB RCC_CR_MSION_BB +#define CSR_LSION_BB RCC_CSR_LSION_BB +#define CSR_LSEON_BB RCC_CSR_LSEON_BB +#define CSR_LSEBYP_BB RCC_CSR_LSEBYP_BB +#define CSR_RTCEN_BB RCC_CSR_RTCEN_BB +#define CSR_RTCRST_BB RCC_CSR_RTCRST_BB +#define CFGR_I2SSRC_BB RCC_CFGR_I2SSRC_BB +#define BDCR_RTCEN_BB RCC_BDCR_RTCEN_BB +#define BDCR_BDRST_BB RCC_BDCR_BDRST_BB +#define CR_HSEON_BB RCC_CR_HSEON_BB +#define CSR_RMVF_BB RCC_CSR_RMVF_BB +#define CR_PLLSAION_BB RCC_CR_PLLSAION_BB +#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB + +#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE +#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE +#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE +#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE +#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE __HAL_RCC_CRS_RELOADVALUE_CALCULATE + +#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT + +#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN +#define RCC_CRS_TRIMOV RCC_CRS_TRIMOVF + +#define RCC_PERIPHCLK_CK48 RCC_PERIPHCLK_CLK48 +#define RCC_CK48CLKSOURCE_PLLQ RCC_CLK48CLKSOURCE_PLLQ +#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP +#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ +#define IS_RCC_CK48CLKSOURCE IS_RCC_CLK48CLKSOURCE +#define RCC_SDIOCLKSOURCE_CK48 RCC_SDIOCLKSOURCE_CLK48 + +#define __HAL_RCC_DFSDM_CLK_ENABLE __HAL_RCC_DFSDM1_CLK_ENABLE +#define __HAL_RCC_DFSDM_CLK_DISABLE __HAL_RCC_DFSDM1_CLK_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_ENABLED __HAL_RCC_DFSDM1_IS_CLK_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_DISABLED __HAL_RCC_DFSDM1_IS_CLK_DISABLED +#define __HAL_RCC_DFSDM_FORCE_RESET __HAL_RCC_DFSDM1_FORCE_RESET +#define __HAL_RCC_DFSDM_RELEASE_RESET __HAL_RCC_DFSDM1_RELEASE_RESET +#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE +#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED +#define DfsdmClockSelection Dfsdm1ClockSelection +#define RCC_PERIPHCLK_DFSDM RCC_PERIPHCLK_DFSDM1 +#define RCC_DFSDMCLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDMCLKSOURCE_SYSCLK RCC_DFSDM1CLKSOURCE_SYSCLK +#define __HAL_RCC_DFSDM_CONFIG __HAL_RCC_DFSDM1_CONFIG +#define __HAL_RCC_GET_DFSDM_SOURCE __HAL_RCC_GET_DFSDM1_SOURCE +#define RCC_DFSDM1CLKSOURCE_PCLK RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 +#define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 +#define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 +#if defined(STM32U5) +#define MSIKPLLModeSEL RCC_MSIKPLL_MODE_SEL +#define MSISPLLModeSEL RCC_MSISPLL_MODE_SEL +#define __HAL_RCC_AHB21_CLK_DISABLE __HAL_RCC_AHB2_1_CLK_DISABLE +#define __HAL_RCC_AHB22_CLK_DISABLE __HAL_RCC_AHB2_2_CLK_DISABLE +#define __HAL_RCC_AHB1_CLK_Disable_Clear __HAL_RCC_AHB1_CLK_ENABLE +#define __HAL_RCC_AHB21_CLK_Disable_Clear __HAL_RCC_AHB2_1_CLK_ENABLE +#define __HAL_RCC_AHB22_CLK_Disable_Clear __HAL_RCC_AHB2_2_CLK_ENABLE +#define __HAL_RCC_AHB3_CLK_Disable_Clear __HAL_RCC_AHB3_CLK_ENABLE +#define __HAL_RCC_APB1_CLK_Disable_Clear __HAL_RCC_APB1_CLK_ENABLE +#define __HAL_RCC_APB2_CLK_Disable_Clear __HAL_RCC_APB2_CLK_ENABLE +#define __HAL_RCC_APB3_CLK_Disable_Clear __HAL_RCC_APB3_CLK_ENABLE +#define IS_RCC_MSIPLLModeSelection IS_RCC_MSIPLLMODE_SELECT +#define RCC_PERIPHCLK_CLK48 RCC_PERIPHCLK_ICLK +#define RCC_CLK48CLKSOURCE_HSI48 RCC_ICLK_CLKSOURCE_HSI48 +#define RCC_CLK48CLKSOURCE_PLL2 RCC_ICLK_CLKSOURCE_PLL2 +#define RCC_CLK48CLKSOURCE_PLL1 RCC_ICLK_CLKSOURCE_PLL1 +#define RCC_CLK48CLKSOURCE_MSIK RCC_ICLK_CLKSOURCE_MSIK +#define __HAL_RCC_ADC1_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE +#define __HAL_RCC_ADC1_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE +#define __HAL_RCC_ADC1_IS_CLK_ENABLED __HAL_RCC_ADC12_IS_CLK_ENABLED +#define __HAL_RCC_ADC1_IS_CLK_DISABLED __HAL_RCC_ADC12_IS_CLK_DISABLED +#define __HAL_RCC_ADC1_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET +#define __HAL_RCC_ADC1_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET +#define __HAL_RCC_ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC12_CLK_SLEEP_ENABLE +#define __HAL_RCC_ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC12_CLK_SLEEP_DISABLE +#define __HAL_RCC_GET_CLK48_SOURCE __HAL_RCC_GET_ICLK_SOURCE +#define __HAL_RCC_PLLFRACN_ENABLE __HAL_RCC_PLL_FRACN_ENABLE +#define __HAL_RCC_PLLFRACN_DISABLE __HAL_RCC_PLL_FRACN_DISABLE +#define __HAL_RCC_PLLFRACN_CONFIG __HAL_RCC_PLL_FRACN_CONFIG +#define IS_RCC_PLLFRACN_VALUE IS_RCC_PLL_FRACN_VALUE +#endif /* STM32U5 */ + +/** + * @} + */ + +/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose + * @{ + */ +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) + +/** + * @} + */ + +/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx)|| \ + defined (STM32L4Q5xx) || defined (STM32G4) || defined (STM32WL) || defined (STM32U5) || \ + defined (STM32C0) +#else +#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif +#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT +#define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT + +#if defined (STM32F1) +#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() + +#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT() + +#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT() + +#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG() + +#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() +#else +#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG())) +#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT())) +#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT())) +#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG())) +#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() : \ + (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : \ + __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT())) +#endif /* STM32F1 */ + +#define IS_ALARM IS_RTC_ALARM +#define IS_ALARM_MASK IS_RTC_ALARM_MASK +#define IS_TAMPER IS_RTC_TAMPER +#define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT +#define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE +#define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION +#define IS_TAMPER_PULLUP_STATE IS_RTC_TAMPER_PULLUP_STATE +#define IS_TAMPER_SAMPLING_FREQ IS_RTC_TAMPER_SAMPLING_FREQ +#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION +#define IS_TAMPER_TRIGGER IS_RTC_TAMPER_TRIGGER +#define IS_WAKEUP_CLOCK IS_RTC_WAKEUP_CLOCK +#define IS_WAKEUP_COUNTER IS_RTC_WAKEUP_COUNTER + +#define __RTC_WRITEPROTECTION_ENABLE __HAL_RTC_WRITEPROTECTION_ENABLE +#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE + +/** + * @} + */ + +/** @defgroup HAL_SD_Aliased_Macros HAL SD/MMC Aliased Macros maintained for legacy purpose + * @{ + */ + +#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE +#define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS + +#if !defined(STM32F1) && !defined(STM32F2) && !defined(STM32F4) && !defined(STM32L1) +#define eMMC_HIGH_VOLTAGE_RANGE EMMC_HIGH_VOLTAGE_RANGE +#define eMMC_DUAL_VOLTAGE_RANGE EMMC_DUAL_VOLTAGE_RANGE +#define eMMC_LOW_VOLTAGE_RANGE EMMC_LOW_VOLTAGE_RANGE + +#define SDMMC_NSpeed_CLK_DIV SDMMC_NSPEED_CLK_DIV +#define SDMMC_HSpeed_CLK_DIV SDMMC_HSPEED_CLK_DIV +#endif + +#if defined(STM32F4) || defined(STM32F2) +#define SD_SDMMC_DISABLED SD_SDIO_DISABLED +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND +/* alias CMSIS */ +#define SDMMC1_IRQn SDIO_IRQn +#define SDMMC1_IRQHandler SDIO_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32L4) +#define SD_SDIO_DISABLED SD_SDMMC_DISABLED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION +#define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND +#define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT +#define SD_CMD_SDIO_RW_EXTENDED SD_CMD_SDMMC_RW_EXTENDED +#define __HAL_SD_SDIO_ENABLE __HAL_SD_SDMMC_ENABLE +#define __HAL_SD_SDIO_DISABLE __HAL_SD_SDMMC_DISABLE +#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE +#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE +#define __HAL_SD_SDIO_ENABLE_IT __HAL_SD_SDMMC_ENABLE_IT +#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT +#define __HAL_SD_SDIO_GET_FLAG __HAL_SD_SDMMC_GET_FLAG +#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG +#define __HAL_SD_SDIO_GET_IT __HAL_SD_SDMMC_GET_IT +#define __HAL_SD_SDIO_CLEAR_IT __HAL_SD_SDMMC_CLEAR_IT +#define SDIO_STATIC_FLAGS SDMMC_STATIC_FLAGS +#define SDIO_CMD0TIMEOUT SDMMC_CMD0TIMEOUT +#define SD_SDIO_SEND_IF_COND SD_SDMMC_SEND_IF_COND +/* alias CMSIS for compatibilities */ +#define SDIO_IRQn SDMMC1_IRQn +#define SDIO_IRQHandler SDMMC1_IRQHandler +#endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7) +#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef +#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef +#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef +#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef +#endif + +#if defined(STM32H7) || defined(STM32L5) +#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SD_DriveTransciver_1_8V_Callback HAL_SD_DriveTransceiver_1_8V_Callback +#endif +/** + * @} + */ + +/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __SMARTCARD_ENABLE_IT __HAL_SMARTCARD_ENABLE_IT +#define __SMARTCARD_DISABLE_IT __HAL_SMARTCARD_DISABLE_IT +#define __SMARTCARD_ENABLE __HAL_SMARTCARD_ENABLE +#define __SMARTCARD_DISABLE __HAL_SMARTCARD_DISABLE +#define __SMARTCARD_DMA_REQUEST_ENABLE __HAL_SMARTCARD_DMA_REQUEST_ENABLE +#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE + +#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE +#define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE + +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE + +/** + * @} + */ + +/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_SMBUS_RESET_CR1 SMBUS_RESET_CR1 +#define __HAL_SMBUS_RESET_CR2 SMBUS_RESET_CR2 +#define __HAL_SMBUS_GENERATE_START SMBUS_GENERATE_START +#define __HAL_SMBUS_GET_ADDR_MATCH SMBUS_GET_ADDR_MATCH +#define __HAL_SMBUS_GET_DIR SMBUS_GET_DIR +#define __HAL_SMBUS_GET_STOP_MODE SMBUS_GET_STOP_MODE +#define __HAL_SMBUS_GET_PEC_MODE SMBUS_GET_PEC_MODE +#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED +/** + * @} + */ + +/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_SPI_1LINE_TX SPI_1LINE_TX +#define __HAL_SPI_1LINE_RX SPI_1LINE_RX +#define __HAL_SPI_RESET_CRC SPI_RESET_CRC + +/** + * @} + */ + +/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION +#define __UART_GETCLOCKSOURCE UART_GETCLOCKSOURCE +#define __UART_MASK_COMPUTATION UART_MASK_COMPUTATION + +#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD + +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE + +/** + * @} + */ + + +/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __USART_ENABLE_IT __HAL_USART_ENABLE_IT +#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT +#define __USART_ENABLE __HAL_USART_ENABLE +#define __USART_DISABLE __HAL_USART_DISABLE + +#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE +#define __USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE + +#if defined(STM32F0) || defined(STM32F3) || defined(STM32F7) +#define USART_OVERSAMPLING_16 0x00000000U +#define USART_OVERSAMPLING_8 USART_CR1_OVER8 + +#define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \ + ((__SAMPLING__) == USART_OVERSAMPLING_8)) +#endif /* STM32F0 || STM32F3 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose + * @{ + */ +#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE + +#define USB_FS_EXTI_TRIGGER_RISING_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE +#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE +#define USB_FS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_FS_EXTI_LINE_WAKEUP USB_OTG_FS_WAKEUP_EXTI_LINE + +#define USB_HS_EXTI_TRIGGER_RISING_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE +#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE +#define USB_HS_EXTI_TRIGGER_BOTH_EDGE USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE +#define USB_HS_EXTI_LINE_WAKEUP USB_OTG_HS_WAKEUP_EXTI_LINE + +#define __HAL_USB_EXTI_ENABLE_IT __HAL_USB_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_EXTI_DISABLE_IT __HAL_USB_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_EXTI_GET_FLAG __HAL_USB_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_EXTI_CLEAR_FLAG __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE + +#define __HAL_USB_FS_EXTI_ENABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_FS_EXTI_DISABLE_IT __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_FS_EXTI_GET_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_FS_EXTI_CLEAR_FLAG __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_FS_EXTI_GENERATE_SWIT __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT + +#define __HAL_USB_HS_EXTI_ENABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT +#define __HAL_USB_HS_EXTI_DISABLE_IT __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT +#define __HAL_USB_HS_EXTI_GET_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG +#define __HAL_USB_HS_EXTI_CLEAR_FLAG __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE +#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE +#define __HAL_USB_HS_EXTI_GENERATE_SWIT __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT + +#define HAL_PCD_ActiveRemoteWakeup HAL_PCD_ActivateRemoteWakeup +#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup + +#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo +#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo +/** + * @} + */ + +/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_TIM_SetICPrescalerValue TIM_SET_ICPRESCALERVALUE +#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE + +#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE +#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT + +#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE + +#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN +#define __HAL_TIM_PRESCALER __HAL_TIM_SET_PRESCALER +#define __HAL_TIM_SetCounter __HAL_TIM_SET_COUNTER +#define __HAL_TIM_GetCounter __HAL_TIM_GET_COUNTER +#define __HAL_TIM_SetAutoreload __HAL_TIM_SET_AUTORELOAD +#define __HAL_TIM_GetAutoreload __HAL_TIM_GET_AUTORELOAD +#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION +#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION +#define __HAL_TIM_SetICPrescaler __HAL_TIM_SET_ICPRESCALER +#define __HAL_TIM_GetICPrescaler __HAL_TIM_GET_ICPRESCALER +#define __HAL_TIM_SetCompare __HAL_TIM_SET_COMPARE +#define __HAL_TIM_GetCompare __HAL_TIM_GET_COMPARE + +#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1 +/** + * @} + */ + +/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose + * @{ + */ + +#define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT +#define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT +#define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG +#define __HAL_ETH_EXTI_CLEAR_FLAG __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG +#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER +#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER + +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE +#define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE +/** + * @} + */ + +/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose + * @{ + */ +#define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG +/** + * @} + */ + +/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose + * @{ + */ +#define SAI_OUTPUTDRIVE_DISABLED SAI_OUTPUTDRIVE_DISABLE +#define SAI_OUTPUTDRIVE_ENABLED SAI_OUTPUTDRIVE_ENABLE +#define SAI_MASTERDIVIDER_ENABLED SAI_MASTERDIVIDER_ENABLE +#define SAI_MASTERDIVIDER_DISABLED SAI_MASTERDIVIDER_DISABLE +#define SAI_STREOMODE SAI_STEREOMODE +#define SAI_FIFOStatus_Empty SAI_FIFOSTATUS_EMPTY +#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL +#define SAI_FIFOStatus_1QuarterFull SAI_FIFOSTATUS_1QUARTERFULL +#define SAI_FIFOStatus_HalfFull SAI_FIFOSTATUS_HALFFULL +#define SAI_FIFOStatus_3QuartersFull SAI_FIFOSTATUS_3QUARTERFULL +#define SAI_FIFOStatus_Full SAI_FIFOSTATUS_FULL +#define IS_SAI_BLOCK_MONO_STREO_MODE IS_SAI_BLOCK_MONO_STEREO_MODE +#define SAI_SYNCHRONOUS_EXT SAI_SYNCHRONOUS_EXT_SAI1 +#define SAI_SYNCEXT_IN_ENABLE SAI_SYNCEXT_OUTBLOCKA_ENABLE +/** + * @} + */ + +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ + +/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose + * @{ + */ +#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3) +#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT +#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA +#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart +#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT +#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA +#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop +#endif +/** + * @} + */ + +/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7) || defined(STM32H7) +#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE +#endif /* STM32L4 || STM32F4 || STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_Generic_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined (STM32F7) +#define ART_ACCLERATOR_ENABLE ART_ACCELERATOR_ENABLE +#endif /* STM32F7 */ +/** + * @} + */ + +/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose + * @{ + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32_HAL_LEGACY */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h new file mode 100644 index 0000000..f7eb847 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h @@ -0,0 +1,297 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the HAL + * module driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_H +#define __STM32F4xx_HAL_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_conf.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup HAL + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Constants HAL Exported Constants + * @{ + */ + +/** @defgroup HAL_TICK_FREQ Tick Frequency + * @{ + */ +typedef enum +{ + HAL_TICK_FREQ_10HZ = 100U, + HAL_TICK_FREQ_100HZ = 10U, + HAL_TICK_FREQ_1KHZ = 1U, + HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ +} HAL_TickFreqTypeDef; +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup HAL_Exported_Macros HAL Exported Macros + * @{ + */ + +/** @brief Freeze/Unfreeze Peripherals in Debug mode + */ +#define __HAL_DBGMCU_FREEZE_TIM2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM3() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM4() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM5() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM6() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM7() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM12() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM13() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM14() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_FREEZE_RTC() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_FREEZE_WWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_FREEZE_IWDG() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_FREEZE_CAN1() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN1_STOP)) +#define __HAL_DBGMCU_FREEZE_CAN2() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN2_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM1() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM8() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM9() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM9_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM10() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM10_STOP)) +#define __HAL_DBGMCU_FREEZE_TIM11() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM11_STOP)) + +#define __HAL_DBGMCU_UNFREEZE_TIM2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM3() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM4() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM4_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM5() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM5_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM6() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM7() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM12() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM12_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM13() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM13_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM14() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP)) +#define __HAL_DBGMCU_UNFREEZE_RTC() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP)) +#define __HAL_DBGMCU_UNFREEZE_WWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_IWDG() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP)) +#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) +#define __HAL_DBGMCU_UNFREEZE_CAN1() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_CAN2() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN2_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM1() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM8() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM8_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM9() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM9_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM10() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM10_STOP)) +#define __HAL_DBGMCU_UNFREEZE_TIM11() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM11_STOP)) + +/** @brief Main Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FLASH() (SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE)) + +/** @brief System Flash memory mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;\ + }while(0); + +/** @brief Embedded SRAM mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_SRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_0 | SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +/** @brief FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FSMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** @brief FMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ + }while(0); + +/** @brief FMC/SDRAM Bank 1 and 2 mapped at 0x00000000 + */ +#define __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ + SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_2);\ + }while(0); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup Cortex_Lockup_Enable Cortex Lockup Enable + * @{ + */ +/** @brief SYSCFG Break Lockup lock + * Enables and locks the connection of Cortex-M4 LOCKUP (Hardfault) output to TIM1/8 input + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_PVD_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_PVD_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_PVD_LOCK; \ + }while(0) +/** + * @} + */ + +/** @defgroup PVD_Lock_Enable PVD Lock + * @{ + */ +/** @brief SYSCFG Break PVD lock + * Enables and locks the PVD connection with Timer1/8 Break Input, , as well as the PVDE and PLS[2:0] in the PWR_CR register + * @note The selected configuration is locked and can be unlocked by system reset + */ +#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK() do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_LOCKUP_LOCK); \ + SYSCFG->CFGR2 |= SYSCFG_CFGR2_LOCKUP_LOCK; \ + }while(0) +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup HAL_Private_Macros HAL Private Macros + * @{ + */ +#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || \ + ((FREQ) == HAL_TICK_FREQ_100HZ) || \ + ((FREQ) == HAL_TICK_FREQ_1KHZ)) +/** + * @} + */ + +/* Exported variables --------------------------------------------------------*/ + +/** @addtogroup HAL_Exported_Variables + * @{ + */ +extern __IO uint32_t uwTick; +extern uint32_t uwTickPrio; +extern HAL_TickFreqTypeDef uwTickFreq; +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup HAL_Exported_Functions + * @{ + */ +/** @addtogroup HAL_Exported_Functions_Group1 + * @{ + */ +/* Initialization and Configuration functions ******************************/ +HAL_StatusTypeDef HAL_Init(void); +HAL_StatusTypeDef HAL_DeInit(void); +void HAL_MspInit(void); +void HAL_MspDeInit(void); +HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority); +/** + * @} + */ + +/** @addtogroup HAL_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ************************************************/ +void HAL_IncTick(void); +void HAL_Delay(uint32_t Delay); +uint32_t HAL_GetTick(void); +uint32_t HAL_GetTickPrio(void); +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq); +HAL_TickFreqTypeDef HAL_GetTickFreq(void); +void HAL_SuspendTick(void); +void HAL_ResumeTick(void); +uint32_t HAL_GetHalVersion(void); +uint32_t HAL_GetREVID(void); +uint32_t HAL_GetDEVID(void); +void HAL_DBGMCU_EnableDBGSleepMode(void); +void HAL_DBGMCU_DisableDBGSleepMode(void); +void HAL_DBGMCU_EnableDBGStopMode(void); +void HAL_DBGMCU_DisableDBGStopMode(void); +void HAL_DBGMCU_EnableDBGStandbyMode(void); +void HAL_DBGMCU_DisableDBGStandbyMode(void); +void HAL_EnableCompensationCell(void); +void HAL_DisableCompensationCell(void); +uint32_t HAL_GetUIDw0(void); +uint32_t HAL_GetUIDw1(void); +uint32_t HAL_GetUIDw2(void); +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +void HAL_EnableMemorySwappingBank(void); +void HAL_DisableMemorySwappingBank(void); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup HAL_Private_Variables HAL Private Variables + * @{ + */ +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup HAL_Private_Constants HAL Private Constants + * @{ + */ +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_H */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h new file mode 100644 index 0000000..fdc96b5 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h @@ -0,0 +1,407 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CORTEX_H +#define __STM32F4xx_HAL_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup CORTEX + * @{ + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup CORTEX_Exported_Types Cortex Exported Types + * @{ + */ + +#if (__MPU_PRESENT == 1U) +/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition + * @brief MPU Region initialization structure + * @{ + */ +typedef struct +{ + uint8_t Enable; /*!< Specifies the status of the region. + This parameter can be a value of @ref CORTEX_MPU_Region_Enable */ + uint8_t Number; /*!< Specifies the number of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Number */ + uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */ + uint8_t Size; /*!< Specifies the size of the region to protect. + This parameter can be a value of @ref CORTEX_MPU_Region_Size */ + uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + uint8_t TypeExtField; /*!< Specifies the TEX field level. + This parameter can be a value of @ref CORTEX_MPU_TEX_Levels */ + uint8_t AccessPermission; /*!< Specifies the region access permission type. + This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */ + uint8_t DisableExec; /*!< Specifies the instruction access status. + This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */ + uint8_t IsShareable; /*!< Specifies the shareability status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */ + uint8_t IsCacheable; /*!< Specifies the cacheable status of the region protected. + This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable */ + uint8_t IsBufferable; /*!< Specifies the bufferable status of the protected region. + This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable */ +}MPU_Region_InitTypeDef; +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group + * @{ + */ +#define NVIC_PRIORITYGROUP_0 0x00000007U /*!< 0 bits for pre-emption priority + 4 bits for subpriority */ +#define NVIC_PRIORITYGROUP_1 0x00000006U /*!< 1 bits for pre-emption priority + 3 bits for subpriority */ +#define NVIC_PRIORITYGROUP_2 0x00000005U /*!< 2 bits for pre-emption priority + 2 bits for subpriority */ +#define NVIC_PRIORITYGROUP_3 0x00000004U /*!< 3 bits for pre-emption priority + 1 bits for subpriority */ +#define NVIC_PRIORITYGROUP_4 0x00000003U /*!< 4 bits for pre-emption priority + 0 bits for subpriority */ +/** + * @} + */ + +/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source + * @{ + */ +#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U +#define SYSTICK_CLKSOURCE_HCLK 0x00000004U + +/** + * @} + */ + +#if (__MPU_PRESENT == 1) +/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control + * @{ + */ +#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U +#define MPU_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk +#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk +#define MPU_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) + +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable + * @{ + */ +#define MPU_REGION_ENABLE ((uint8_t)0x01) +#define MPU_REGION_DISABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access + * @{ + */ +#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00) +#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable + * @{ + */ +#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable + * @{ + */ +#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable + * @{ + */ +#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01) +#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels + * @{ + */ +#define MPU_TEX_LEVEL0 ((uint8_t)0x00) +#define MPU_TEX_LEVEL1 ((uint8_t)0x01) +#define MPU_TEX_LEVEL2 ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size + * @{ + */ +#define MPU_REGION_SIZE_32B ((uint8_t)0x04) +#define MPU_REGION_SIZE_64B ((uint8_t)0x05) +#define MPU_REGION_SIZE_128B ((uint8_t)0x06) +#define MPU_REGION_SIZE_256B ((uint8_t)0x07) +#define MPU_REGION_SIZE_512B ((uint8_t)0x08) +#define MPU_REGION_SIZE_1KB ((uint8_t)0x09) +#define MPU_REGION_SIZE_2KB ((uint8_t)0x0A) +#define MPU_REGION_SIZE_4KB ((uint8_t)0x0B) +#define MPU_REGION_SIZE_8KB ((uint8_t)0x0C) +#define MPU_REGION_SIZE_16KB ((uint8_t)0x0D) +#define MPU_REGION_SIZE_32KB ((uint8_t)0x0E) +#define MPU_REGION_SIZE_64KB ((uint8_t)0x0F) +#define MPU_REGION_SIZE_128KB ((uint8_t)0x10) +#define MPU_REGION_SIZE_256KB ((uint8_t)0x11) +#define MPU_REGION_SIZE_512KB ((uint8_t)0x12) +#define MPU_REGION_SIZE_1MB ((uint8_t)0x13) +#define MPU_REGION_SIZE_2MB ((uint8_t)0x14) +#define MPU_REGION_SIZE_4MB ((uint8_t)0x15) +#define MPU_REGION_SIZE_8MB ((uint8_t)0x16) +#define MPU_REGION_SIZE_16MB ((uint8_t)0x17) +#define MPU_REGION_SIZE_32MB ((uint8_t)0x18) +#define MPU_REGION_SIZE_64MB ((uint8_t)0x19) +#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A) +#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B) +#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C) +#define MPU_REGION_SIZE_1GB ((uint8_t)0x1D) +#define MPU_REGION_SIZE_2GB ((uint8_t)0x1E) +#define MPU_REGION_SIZE_4GB ((uint8_t)0x1F) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes + * @{ + */ +#define MPU_REGION_NO_ACCESS ((uint8_t)0x00) +#define MPU_REGION_PRIV_RW ((uint8_t)0x01) +#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02) +#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03) +#define MPU_REGION_PRIV_RO ((uint8_t)0x05) +#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06) +/** + * @} + */ + +/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number + * @{ + */ +#define MPU_REGION_NUMBER0 ((uint8_t)0x00) +#define MPU_REGION_NUMBER1 ((uint8_t)0x01) +#define MPU_REGION_NUMBER2 ((uint8_t)0x02) +#define MPU_REGION_NUMBER3 ((uint8_t)0x03) +#define MPU_REGION_NUMBER4 ((uint8_t)0x04) +#define MPU_REGION_NUMBER5 ((uint8_t)0x05) +#define MPU_REGION_NUMBER6 ((uint8_t)0x06) +#define MPU_REGION_NUMBER7 ((uint8_t)0x07) +/** + * @} + */ +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + + +/* Exported Macros -----------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CORTEX_Exported_Functions + * @{ + */ + +/** @addtogroup CORTEX_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup); +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); +void HAL_NVIC_SystemReset(void); +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); +/** + * @} + */ + +/** @addtogroup CORTEX_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +uint32_t HAL_NVIC_GetPriorityGrouping(void); +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn); +void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); +void HAL_SYSTICK_IRQHandler(void); +void HAL_SYSTICK_Callback(void); + +#if (__MPU_PRESENT == 1U) +void HAL_MPU_Enable(uint32_t MPU_Control); +void HAL_MPU_Disable(void); +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); +#endif /* __MPU_PRESENT */ +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup CORTEX_Private_Macros CORTEX Private Macros + * @{ + */ +#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \ + ((GROUP) == NVIC_PRIORITYGROUP_1) || \ + ((GROUP) == NVIC_PRIORITYGROUP_2) || \ + ((GROUP) == NVIC_PRIORITYGROUP_3) || \ + ((GROUP) == NVIC_PRIORITYGROUP_4)) + +#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) + +#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U) + +#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ + ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) + +#if (__MPU_PRESENT == 1U) +#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \ + ((STATE) == MPU_REGION_DISABLE)) + +#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \ + ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE)) + +#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || \ + ((STATE) == MPU_ACCESS_NOT_SHAREABLE)) + +#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || \ + ((STATE) == MPU_ACCESS_NOT_CACHEABLE)) + +#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || \ + ((STATE) == MPU_ACCESS_NOT_BUFFERABLE)) + +#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || \ + ((TYPE) == MPU_TEX_LEVEL1) || \ + ((TYPE) == MPU_TEX_LEVEL2)) + +#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RW) || \ + ((TYPE) == MPU_REGION_PRIV_RW_URO) || \ + ((TYPE) == MPU_REGION_FULL_ACCESS) || \ + ((TYPE) == MPU_REGION_PRIV_RO) || \ + ((TYPE) == MPU_REGION_PRIV_RO_URO)) + +#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \ + ((NUMBER) == MPU_REGION_NUMBER1) || \ + ((NUMBER) == MPU_REGION_NUMBER2) || \ + ((NUMBER) == MPU_REGION_NUMBER3) || \ + ((NUMBER) == MPU_REGION_NUMBER4) || \ + ((NUMBER) == MPU_REGION_NUMBER5) || \ + ((NUMBER) == MPU_REGION_NUMBER6) || \ + ((NUMBER) == MPU_REGION_NUMBER7)) + +#define IS_MPU_REGION_SIZE(SIZE) (((SIZE) == MPU_REGION_SIZE_32B) || \ + ((SIZE) == MPU_REGION_SIZE_64B) || \ + ((SIZE) == MPU_REGION_SIZE_128B) || \ + ((SIZE) == MPU_REGION_SIZE_256B) || \ + ((SIZE) == MPU_REGION_SIZE_512B) || \ + ((SIZE) == MPU_REGION_SIZE_1KB) || \ + ((SIZE) == MPU_REGION_SIZE_2KB) || \ + ((SIZE) == MPU_REGION_SIZE_4KB) || \ + ((SIZE) == MPU_REGION_SIZE_8KB) || \ + ((SIZE) == MPU_REGION_SIZE_16KB) || \ + ((SIZE) == MPU_REGION_SIZE_32KB) || \ + ((SIZE) == MPU_REGION_SIZE_64KB) || \ + ((SIZE) == MPU_REGION_SIZE_128KB) || \ + ((SIZE) == MPU_REGION_SIZE_256KB) || \ + ((SIZE) == MPU_REGION_SIZE_512KB) || \ + ((SIZE) == MPU_REGION_SIZE_1MB) || \ + ((SIZE) == MPU_REGION_SIZE_2MB) || \ + ((SIZE) == MPU_REGION_SIZE_4MB) || \ + ((SIZE) == MPU_REGION_SIZE_8MB) || \ + ((SIZE) == MPU_REGION_SIZE_16MB) || \ + ((SIZE) == MPU_REGION_SIZE_32MB) || \ + ((SIZE) == MPU_REGION_SIZE_64MB) || \ + ((SIZE) == MPU_REGION_SIZE_128MB) || \ + ((SIZE) == MPU_REGION_SIZE_256MB) || \ + ((SIZE) == MPU_REGION_SIZE_512MB) || \ + ((SIZE) == MPU_REGION_SIZE_1GB) || \ + ((SIZE) == MPU_REGION_SIZE_2GB) || \ + ((SIZE) == MPU_REGION_SIZE_4GB)) + +#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF) +#endif /* __MPU_PRESENT */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CORTEX_H */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h new file mode 100644 index 0000000..f9bbec2 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h @@ -0,0 +1,210 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_def.h + * @author MCD Application Team + * @brief This file contains HAL common defines, enumeration, macros and + * structures definitions. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DEF +#define __STM32F4xx_HAL_DEF + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" +#include "Legacy/stm32_hal_legacy.h" +#include + +/* Exported types ------------------------------------------------------------*/ + +/** + * @brief HAL Status structures definition + */ +typedef enum +{ + HAL_OK = 0x00U, + HAL_ERROR = 0x01U, + HAL_BUSY = 0x02U, + HAL_TIMEOUT = 0x03U +} HAL_StatusTypeDef; + +/** + * @brief HAL Lock structures definition + */ +typedef enum +{ + HAL_UNLOCKED = 0x00U, + HAL_LOCKED = 0x01U +} HAL_LockTypeDef; + +/* Exported macro ------------------------------------------------------------*/ + +#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */ + +#define HAL_MAX_DELAY 0xFFFFFFFFU + +#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) == (BIT)) +#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U) + +#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \ + do{ \ + (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__); \ + (__DMA_HANDLE__).Parent = (__HANDLE__); \ + } while(0U) + +/** @brief Reset the Handle's State field. + * @param __HANDLE__ specifies the Peripheral Handle. + * @note This macro can be used for the following purpose: + * - When the Handle is declared as local variable; before passing it as parameter + * to HAL_PPP_Init() for the first time, it is mandatory to use this macro + * to set to 0 the Handle's "State" field. + * Otherwise, "State" field may have any random value and the first time the function + * HAL_PPP_Init() is called, the low level hardware initialization will be missed + * (i.e. HAL_PPP_MspInit() will not be executed). + * - When there is a need to reconfigure the low level hardware: instead of calling + * HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init(). + * In this later function, when the Handle's "State" field is set to 0, it will execute the function + * HAL_PPP_MspInit() which will reconfigure the low level hardware. + * @retval None + */ +#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U) + +#if (USE_RTOS == 1U) + /* Reserved for future use */ + #error "USE_RTOS should be 0 in the current HAL release" +#else + #define __HAL_LOCK(__HANDLE__) \ + do{ \ + if((__HANDLE__)->Lock == HAL_LOCKED) \ + { \ + return HAL_BUSY; \ + } \ + else \ + { \ + (__HANDLE__)->Lock = HAL_LOCKED; \ + } \ + }while (0U) + + #define __HAL_UNLOCK(__HANDLE__) \ + do{ \ + (__HANDLE__)->Lock = HAL_UNLOCKED; \ + }while (0U) +#endif /* USE_RTOS */ + +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif + #ifndef __packed + #define __packed __attribute__((packed)) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __weak + #define __weak __attribute__((weak)) + #endif /* __weak */ + #ifndef __packed + #define __packed __attribute__((__packed__)) + #endif /* __packed */ +#endif /* __GNUC__ */ + + +/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif +#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ + #ifndef __ALIGN_END +#define __ALIGN_END __attribute__ ((aligned (4))) + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ +#else + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #if defined (__CC_ARM) /* ARM Compiler V5*/ +#define __ALIGN_BEGIN __align(4) + #elif defined (__ICCARM__) /* IAR Compiler */ + #define __ALIGN_BEGIN + #endif /* __CC_ARM */ + #endif /* __ALIGN_BEGIN */ +#endif /* __GNUC__ */ + + +/** + * @brief __RAM_FUNC definition + */ +#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +/* ARM Compiler V4/V5 and V6 + -------------------------- + RAM functions are defined using the toolchain options. + Functions that are executed in RAM should reside in a separate source module. + Using the 'Options for File' dialog you can simply change the 'Code / Const' + area of a module to a memory space in physical RAM. + Available memory areas are declared in the 'Target' tab of the 'Options for Target' + dialog. +*/ +#define __RAM_FUNC + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- + RAM functions are defined using a specific toolchain keyword "__ramfunc". +*/ +#define __RAM_FUNC __ramfunc + +#elif defined ( __GNUC__ ) +/* GNU Compiler + ------------ + RAM functions are defined using a specific toolchain attribute + "__attribute__((section(".RamFunc")))". +*/ +#define __RAM_FUNC __attribute__((section(".RamFunc"))) + +#endif + +/** + * @brief __NOINLINE definition + */ +#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined ( __GNUC__ ) +/* ARM V4/V5 and V6 & GNU Compiler + ------------------------------- +*/ +#define __NOINLINE __attribute__ ( (noinline) ) + +#elif defined ( __ICCARM__ ) +/* ICCARM Compiler + --------------- +*/ +#define __NOINLINE _Pragma("optimize = no_inline") + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ___STM32F4xx_HAL_DEF */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h new file mode 100644 index 0000000..7ff3836 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h @@ -0,0 +1,802 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma.h + * @author MCD Application Team + * @brief Header file of DMA HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DMA_H +#define __STM32F4xx_HAL_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMA + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Types DMA Exported Types + * @brief DMA Exported Types + * @{ + */ + +/** + * @brief DMA Configuration Structure definition + */ +typedef struct +{ + uint32_t Channel; /*!< Specifies the channel used for the specified stream. + This parameter can be a value of @ref DMA_Channel_selection */ + + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_Data_transfer_direction */ + + uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not. + This parameter can be a value of @ref DMA_Peripheral_incremented_mode */ + + uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not. + This parameter can be a value of @ref DMA_Memory_incremented_mode */ + + uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_Peripheral_data_size */ + + uint32_t MemDataAlignment; /*!< Specifies the Memory data width. + This parameter can be a value of @ref DMA_Memory_data_size */ + + uint32_t Mode; /*!< Specifies the operation mode of the DMAy Streamx. + This parameter can be a value of @ref DMA_mode + @note The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Stream */ + + uint32_t Priority; /*!< Specifies the software priority for the DMAy Streamx. + This parameter can be a value of @ref DMA_Priority_level */ + + uint32_t FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified stream. + This parameter can be a value of @ref DMA_FIFO_direct_mode + @note The Direct mode (FIFO mode disabled) cannot be used if the + memory-to-memory data transfer is configured on the selected stream */ + + uint32_t FIFOThreshold; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_FIFO_threshold_level */ + + uint32_t MemBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_Memory_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ + + uint32_t PeriphBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_Peripheral_burst + @note The burst mode is possible only if the address Increment mode is enabled. */ +}DMA_InitTypeDef; + + +/** + * @brief HAL DMA State structures definition + */ +typedef enum +{ + HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */ + HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */ + HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */ + HAL_DMA_STATE_TIMEOUT = 0x03U, /*!< DMA timeout state */ + HAL_DMA_STATE_ERROR = 0x04U, /*!< DMA error state */ + HAL_DMA_STATE_ABORT = 0x05U, /*!< DMA Abort state */ +}HAL_DMA_StateTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer */ + HAL_DMA_HALF_TRANSFER = 0x01U /*!< Half Transfer */ +}HAL_DMA_LevelCompleteTypeDef; + +/** + * @brief HAL DMA Error Code structure definition + */ +typedef enum +{ + HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */ + HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half Transfer */ + HAL_DMA_XFER_M1CPLT_CB_ID = 0x02U, /*!< M1 Full Transfer */ + HAL_DMA_XFER_M1HALFCPLT_CB_ID = 0x03U, /*!< M1 Half Transfer */ + HAL_DMA_XFER_ERROR_CB_ID = 0x04U, /*!< Error */ + HAL_DMA_XFER_ABORT_CB_ID = 0x05U, /*!< Abort */ + HAL_DMA_XFER_ALL_CB_ID = 0x06U /*!< All */ +}HAL_DMA_CallbackIDTypeDef; + +/** + * @brief DMA handle Structure definition + */ +typedef struct __DMA_HandleTypeDef +{ + DMA_Stream_TypeDef *Instance; /*!< Register base address */ + + DMA_InitTypeDef Init; /*!< DMA communication parameters */ + + HAL_LockTypeDef Lock; /*!< DMA locking object */ + + __IO HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ + + void *Parent; /*!< Parent object state */ + + void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ + + void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */ + + void (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete Memory1 callback */ + + void (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer Half complete Memory1 callback */ + + void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ + + void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer Abort callback */ + + __IO uint32_t ErrorCode; /*!< DMA Error code */ + + uint32_t StreamBaseAddress; /*!< DMA Stream Base Address */ + + uint32_t StreamIndex; /*!< DMA Stream Index */ + +}DMA_HandleTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Constants DMA Exported Constants + * @brief DMA Exported constants + * @{ + */ + +/** @defgroup DMA_Error_Code DMA Error Code + * @brief DMA Error Code + * @{ + */ +#define HAL_DMA_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_DMA_ERROR_TE 0x00000001U /*!< Transfer error */ +#define HAL_DMA_ERROR_FE 0x00000002U /*!< FIFO error */ +#define HAL_DMA_ERROR_DME 0x00000004U /*!< Direct Mode error */ +#define HAL_DMA_ERROR_TIMEOUT 0x00000020U /*!< Timeout error */ +#define HAL_DMA_ERROR_PARAM 0x00000040U /*!< Parameter error */ +#define HAL_DMA_ERROR_NO_XFER 0x00000080U /*!< Abort requested with no Xfer ongoing */ +#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode */ +/** + * @} + */ + +/** @defgroup DMA_Channel_selection DMA Channel selection + * @brief DMA channel selection + * @{ + */ +#define DMA_CHANNEL_0 0x00000000U /*!< DMA Channel 0 */ +#define DMA_CHANNEL_1 0x02000000U /*!< DMA Channel 1 */ +#define DMA_CHANNEL_2 0x04000000U /*!< DMA Channel 2 */ +#define DMA_CHANNEL_3 0x06000000U /*!< DMA Channel 3 */ +#define DMA_CHANNEL_4 0x08000000U /*!< DMA Channel 4 */ +#define DMA_CHANNEL_5 0x0A000000U /*!< DMA Channel 5 */ +#define DMA_CHANNEL_6 0x0C000000U /*!< DMA Channel 6 */ +#define DMA_CHANNEL_7 0x0E000000U /*!< DMA Channel 7 */ +#if defined (DMA_SxCR_CHSEL_3) +#define DMA_CHANNEL_8 0x10000000U /*!< DMA Channel 8 */ +#define DMA_CHANNEL_9 0x12000000U /*!< DMA Channel 9 */ +#define DMA_CHANNEL_10 0x14000000U /*!< DMA Channel 10 */ +#define DMA_CHANNEL_11 0x16000000U /*!< DMA Channel 11 */ +#define DMA_CHANNEL_12 0x18000000U /*!< DMA Channel 12 */ +#define DMA_CHANNEL_13 0x1A000000U /*!< DMA Channel 13 */ +#define DMA_CHANNEL_14 0x1C000000U /*!< DMA Channel 14 */ +#define DMA_CHANNEL_15 0x1E000000U /*!< DMA Channel 15 */ +#endif /* DMA_SxCR_CHSEL_3 */ +/** + * @} + */ + +/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction + * @brief DMA data transfer direction + * @{ + */ +#define DMA_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ +#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_SxCR_DIR_0) /*!< Memory to peripheral direction */ +#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_SxCR_DIR_1) /*!< Memory to memory direction */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode + * @brief DMA peripheral incremented mode + * @{ + */ +#define DMA_PINC_ENABLE ((uint32_t)DMA_SxCR_PINC) /*!< Peripheral increment mode enable */ +#define DMA_PINC_DISABLE 0x00000000U /*!< Peripheral increment mode disable */ +/** + * @} + */ + +/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode + * @brief DMA memory incremented mode + * @{ + */ +#define DMA_MINC_ENABLE ((uint32_t)DMA_SxCR_MINC) /*!< Memory increment mode enable */ +#define DMA_MINC_DISABLE 0x00000000U /*!< Memory increment mode disable */ +/** + * @} + */ + +/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size + * @brief DMA peripheral data size + * @{ + */ +#define DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment: Byte */ +#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_SxCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */ +#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_SxCR_PSIZE_1) /*!< Peripheral data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_Memory_data_size DMA Memory data size + * @brief DMA memory data size + * @{ + */ +#define DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment: Byte */ +#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_SxCR_MSIZE_0) /*!< Memory data alignment: HalfWord */ +#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_SxCR_MSIZE_1) /*!< Memory data alignment: Word */ +/** + * @} + */ + +/** @defgroup DMA_mode DMA mode + * @brief DMA mode + * @{ + */ +#define DMA_NORMAL 0x00000000U /*!< Normal mode */ +#define DMA_CIRCULAR ((uint32_t)DMA_SxCR_CIRC) /*!< Circular mode */ +#define DMA_PFCTRL ((uint32_t)DMA_SxCR_PFCTRL) /*!< Peripheral flow control mode */ +/** + * @} + */ + +/** @defgroup DMA_Priority_level DMA Priority level + * @brief DMA priority levels + * @{ + */ +#define DMA_PRIORITY_LOW 0x00000000U /*!< Priority level: Low */ +#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_SxCR_PL_0) /*!< Priority level: Medium */ +#define DMA_PRIORITY_HIGH ((uint32_t)DMA_SxCR_PL_1) /*!< Priority level: High */ +#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_SxCR_PL) /*!< Priority level: Very High */ +/** + * @} + */ + +/** @defgroup DMA_FIFO_direct_mode DMA FIFO direct mode + * @brief DMA FIFO direct mode + * @{ + */ +#define DMA_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ +#define DMA_FIFOMODE_ENABLE ((uint32_t)DMA_SxFCR_DMDIS) /*!< FIFO mode enable */ +/** + * @} + */ + +/** @defgroup DMA_FIFO_threshold_level DMA FIFO threshold level + * @brief DMA FIFO level + * @{ + */ +#define DMA_FIFO_THRESHOLD_1QUARTERFULL 0x00000000U /*!< FIFO threshold 1 quart full configuration */ +#define DMA_FIFO_THRESHOLD_HALFFULL ((uint32_t)DMA_SxFCR_FTH_0) /*!< FIFO threshold half full configuration */ +#define DMA_FIFO_THRESHOLD_3QUARTERSFULL ((uint32_t)DMA_SxFCR_FTH_1) /*!< FIFO threshold 3 quarts full configuration */ +#define DMA_FIFO_THRESHOLD_FULL ((uint32_t)DMA_SxFCR_FTH) /*!< FIFO threshold full configuration */ +/** + * @} + */ + +/** @defgroup DMA_Memory_burst DMA Memory burst + * @brief DMA memory burst + * @{ + */ +#define DMA_MBURST_SINGLE 0x00000000U +#define DMA_MBURST_INC4 ((uint32_t)DMA_SxCR_MBURST_0) +#define DMA_MBURST_INC8 ((uint32_t)DMA_SxCR_MBURST_1) +#define DMA_MBURST_INC16 ((uint32_t)DMA_SxCR_MBURST) +/** + * @} + */ + +/** @defgroup DMA_Peripheral_burst DMA Peripheral burst + * @brief DMA peripheral burst + * @{ + */ +#define DMA_PBURST_SINGLE 0x00000000U +#define DMA_PBURST_INC4 ((uint32_t)DMA_SxCR_PBURST_0) +#define DMA_PBURST_INC8 ((uint32_t)DMA_SxCR_PBURST_1) +#define DMA_PBURST_INC16 ((uint32_t)DMA_SxCR_PBURST) +/** + * @} + */ + +/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions + * @brief DMA interrupts definition + * @{ + */ +#define DMA_IT_TC ((uint32_t)DMA_SxCR_TCIE) +#define DMA_IT_HT ((uint32_t)DMA_SxCR_HTIE) +#define DMA_IT_TE ((uint32_t)DMA_SxCR_TEIE) +#define DMA_IT_DME ((uint32_t)DMA_SxCR_DMEIE) +#define DMA_IT_FE 0x00000080U +/** + * @} + */ + +/** @defgroup DMA_flag_definitions DMA flag definitions + * @brief DMA flag definitions + * @{ + */ +#define DMA_FLAG_FEIF0_4 0x00000001U +#define DMA_FLAG_DMEIF0_4 0x00000004U +#define DMA_FLAG_TEIF0_4 0x00000008U +#define DMA_FLAG_HTIF0_4 0x00000010U +#define DMA_FLAG_TCIF0_4 0x00000020U +#define DMA_FLAG_FEIF1_5 0x00000040U +#define DMA_FLAG_DMEIF1_5 0x00000100U +#define DMA_FLAG_TEIF1_5 0x00000200U +#define DMA_FLAG_HTIF1_5 0x00000400U +#define DMA_FLAG_TCIF1_5 0x00000800U +#define DMA_FLAG_FEIF2_6 0x00010000U +#define DMA_FLAG_DMEIF2_6 0x00040000U +#define DMA_FLAG_TEIF2_6 0x00080000U +#define DMA_FLAG_HTIF2_6 0x00100000U +#define DMA_FLAG_TCIF2_6 0x00200000U +#define DMA_FLAG_FEIF3_7 0x00400000U +#define DMA_FLAG_DMEIF3_7 0x01000000U +#define DMA_FLAG_TEIF3_7 0x02000000U +#define DMA_FLAG_HTIF3_7 0x04000000U +#define DMA_FLAG_TCIF3_7 0x08000000U +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/** @brief Reset DMA handle state + * @param __HANDLE__ specifies the DMA handle. + * @retval None + */ +#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) + +/** + * @brief Return the current DMA Stream FIFO filled level. + * @param __HANDLE__ DMA handle + * @retval The FIFO filling state. + * - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full + * and not empty. + * - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full. + * - DMA_FIFOStatus_HalfFull: if more than 1 half-full. + * - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full. + * - DMA_FIFOStatus_Empty: when FIFO is empty + * - DMA_FIFOStatus_Full: when FIFO is full + */ +#define __HAL_DMA_GET_FS(__HANDLE__) (((__HANDLE__)->Instance->FCR & (DMA_SxFCR_FS))) + +/** + * @brief Enable the specified DMA Stream. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= DMA_SxCR_EN) + +/** + * @brief Disable the specified DMA Stream. + * @param __HANDLE__ DMA handle + * @retval None + */ +#define __HAL_DMA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~DMA_SxCR_EN) + +/* Interrupt & Flag management */ + +/** + * @brief Return the current DMA Stream transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer complete flag index. + */ +#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TCIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TCIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TCIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TCIF2_6 :\ + DMA_FLAG_TCIF3_7) + +/** + * @brief Return the current DMA Stream half transfer complete flag. + * @param __HANDLE__ DMA handle + * @retval The specified half transfer complete flag index. + */ +#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_HTIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_HTIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_HTIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_HTIF2_6 :\ + DMA_FLAG_HTIF3_7) + +/** + * @brief Return the current DMA Stream transfer error flag. + * @param __HANDLE__ DMA handle + * @retval The specified transfer error flag index. + */ +#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TEIF2_6 :\ + DMA_FLAG_TEIF3_7) + +/** + * @brief Return the current DMA Stream FIFO error flag. + * @param __HANDLE__ DMA handle + * @retval The specified FIFO error flag index. + */ +#define __HAL_DMA_GET_FE_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_FEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_FEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_FEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_FEIF2_6 :\ + DMA_FLAG_FEIF3_7) + +/** + * @brief Return the current DMA Stream direct mode error flag. + * @param __HANDLE__ DMA handle + * @retval The specified direct mode error flag index. + */ +#define __HAL_DMA_GET_DME_FLAG_INDEX(__HANDLE__)\ +(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_DMEIF0_4 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_DMEIF1_5 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_DMEIF2_6 :\ + ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_DMEIF2_6 :\ + DMA_FLAG_DMEIF3_7) + +/** + * @brief Get the DMA Stream pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCIFx: Transfer complete flag. + * @arg DMA_FLAG_HTIFx: Half transfer complete flag. + * @arg DMA_FLAG_TEIFx: Transfer error flag. + * @arg DMA_FLAG_DMEIFx: Direct mode error flag. + * @arg DMA_FLAG_FEIFx: FIFO error flag. + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag. + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HISR & (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LISR & (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HISR & (__FLAG__)) : (DMA1->LISR & (__FLAG__))) + +/** + * @brief Clear the DMA Stream pending flags. + * @param __HANDLE__ DMA handle + * @param __FLAG__ specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DMA_FLAG_TCIFx: Transfer complete flag. + * @arg DMA_FLAG_HTIFx: Half transfer complete flag. + * @arg DMA_FLAG_TEIFx: Transfer error flag. + * @arg DMA_FLAG_DMEIFx: Direct mode error flag. + * @arg DMA_FLAG_FEIFx: FIFO error flag. + * Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag. + * @retval None + */ +#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HIFCR = (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LIFCR = (__FLAG__)) :\ + ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HIFCR = (__FLAG__)) : (DMA1->LIFCR = (__FLAG__))) + +/** + * @brief Enable the specified DMA Stream interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt 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 complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval None + */ +#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ +((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR |= (__INTERRUPT__))) + +/** + * @brief Disable the specified DMA Stream interrupts. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt 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 complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval None + */ +#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ +((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR &= ~(__INTERRUPT__))) + +/** + * @brief Check whether the specified DMA Stream interrupt is enabled or disabled. + * @param __HANDLE__ DMA handle + * @param __INTERRUPT__ specifies the DMA interrupt source to check. + * This parameter can be one of the following values: + * @arg DMA_IT_TC: Transfer complete interrupt mask. + * @arg DMA_IT_HT: Half transfer complete interrupt mask. + * @arg DMA_IT_TE: Transfer error interrupt mask. + * @arg DMA_IT_FE: FIFO error interrupt mask. + * @arg DMA_IT_DME: Direct mode error interrupt. + * @retval The state of DMA_IT. + */ +#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__INTERRUPT__) != DMA_IT_FE)? \ + ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) : \ + ((__HANDLE__)->Instance->FCR & (__INTERRUPT__))) + +/** + * @brief Writes the number of data units to be transferred on the DMA Stream. + * @param __HANDLE__ DMA handle + * @param __COUNTER__ Number of data units to be transferred (from 0 to 65535) + * Number of data items depends only on the Peripheral data format. + * + * @note If Peripheral data format is Bytes: number of data units is equal + * to total number of bytes to be transferred. + * + * @note If Peripheral data format is Half-Word: number of data units is + * equal to total number of bytes to be transferred / 2. + * + * @note If Peripheral data format is Word: number of data units is equal + * to total number of bytes to be transferred / 4. + * + * @retval The number of remaining data units in the current DMAy Streamx transfer. + */ +#define __HAL_DMA_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->NDTR = (uint16_t)(__COUNTER__)) + +/** + * @brief Returns the number of remaining data units in the current DMAy Streamx transfer. + * @param __HANDLE__ DMA handle + * + * @retval The number of remaining data units in the current DMA Stream transfer. + */ +#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->NDTR) + + +/* Include DMA HAL Extension module */ +#include "stm32f4xx_hal_dma_ex.h" + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup DMA_Exported_Functions DMA Exported Functions + * @brief DMA Exported functions + * @{ + */ + +/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * @{ + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma); +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group2 I/O operation functions + * @brief I/O operation functions + * @{ + */ +HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout); +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_CleanCallbacks(DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma)); +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID); + +/** + * @} + */ + +/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions + * @brief Peripheral State functions + * @{ + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); +/** + * @} + */ +/** + * @} + */ +/* Private Constants -------------------------------------------------------------*/ +/** @defgroup DMA_Private_Constants DMA Private Constants + * @brief DMA private defines and constants + * @{ + */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DMA_Private_Macros DMA Private Macros + * @brief DMA private macros + * @{ + */ +#if defined (DMA_SxCR_CHSEL_3) +#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \ + ((CHANNEL) == DMA_CHANNEL_1) || \ + ((CHANNEL) == DMA_CHANNEL_2) || \ + ((CHANNEL) == DMA_CHANNEL_3) || \ + ((CHANNEL) == DMA_CHANNEL_4) || \ + ((CHANNEL) == DMA_CHANNEL_5) || \ + ((CHANNEL) == DMA_CHANNEL_6) || \ + ((CHANNEL) == DMA_CHANNEL_7) || \ + ((CHANNEL) == DMA_CHANNEL_8) || \ + ((CHANNEL) == DMA_CHANNEL_9) || \ + ((CHANNEL) == DMA_CHANNEL_10)|| \ + ((CHANNEL) == DMA_CHANNEL_11)|| \ + ((CHANNEL) == DMA_CHANNEL_12)|| \ + ((CHANNEL) == DMA_CHANNEL_13)|| \ + ((CHANNEL) == DMA_CHANNEL_14)|| \ + ((CHANNEL) == DMA_CHANNEL_15)) +#else +#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \ + ((CHANNEL) == DMA_CHANNEL_1) || \ + ((CHANNEL) == DMA_CHANNEL_2) || \ + ((CHANNEL) == DMA_CHANNEL_3) || \ + ((CHANNEL) == DMA_CHANNEL_4) || \ + ((CHANNEL) == DMA_CHANNEL_5) || \ + ((CHANNEL) == DMA_CHANNEL_6) || \ + ((CHANNEL) == DMA_CHANNEL_7)) +#endif /* DMA_SxCR_CHSEL_3 */ + +#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ + ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ + ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) + +#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x01U) && ((SIZE) < 0x10000U)) + +#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ + ((STATE) == DMA_PINC_DISABLE)) + +#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ + ((STATE) == DMA_MINC_DISABLE)) + +#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ + ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_PDATAALIGN_WORD)) + +#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ + ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ + ((SIZE) == DMA_MDATAALIGN_WORD )) + +#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ + ((MODE) == DMA_CIRCULAR) || \ + ((MODE) == DMA_PFCTRL)) + +#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ + ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ + ((PRIORITY) == DMA_PRIORITY_HIGH) || \ + ((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) + +#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMODE_DISABLE ) || \ + ((STATE) == DMA_FIFOMODE_ENABLE)) + +#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFO_THRESHOLD_1QUARTERFULL ) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_HALFFULL) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_3QUARTERSFULL) || \ + ((THRESHOLD) == DMA_FIFO_THRESHOLD_FULL)) + +#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MBURST_SINGLE) || \ + ((BURST) == DMA_MBURST_INC4) || \ + ((BURST) == DMA_MBURST_INC8) || \ + ((BURST) == DMA_MBURST_INC16)) + +#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PBURST_SINGLE) || \ + ((BURST) == DMA_PBURST_INC4) || \ + ((BURST) == DMA_PBURST_INC8) || \ + ((BURST) == DMA_PBURST_INC16)) +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DMA_Private_Functions DMA Private Functions + * @brief DMA private functions + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_DMA_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h new file mode 100644 index 0000000..9858c74 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h @@ -0,0 +1,102 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma_ex.h + * @author MCD Application Team + * @brief Header file of DMA HAL extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_DMA_EX_H +#define __STM32F4xx_HAL_DMA_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMAEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Types DMAEx Exported Types + * @brief DMAEx Exported types + * @{ + */ + +/** + * @brief HAL DMA Memory definition + */ +typedef enum +{ + MEMORY0 = 0x00U, /*!< Memory 0 */ + MEMORY1 = 0x01U /*!< Memory 1 */ +}HAL_DMA_MemoryTypeDef; + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions + * @brief DMAEx Exported functions + * @{ + */ + +/** @defgroup DMAEx_Exported_Functions_Group1 Extended features functions + * @brief Extended features functions + * @{ + */ + +/* IO operation functions *******************************************************/ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength); +HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory); + +/** + * @} + */ +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DMAEx_Private_Functions DMAEx Private Functions + * @brief DMAEx Private functions + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__STM32F4xx_HAL_DMA_EX_H*/ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h new file mode 100644 index 0000000..b18a228 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h @@ -0,0 +1,366 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_exti.h + * @author MCD Application Team + * @brief Header file of EXTI HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS.Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32f4xx_HAL_EXTI_H +#define STM32f4xx_HAL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup EXTI EXTI + * @brief EXTI HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup EXTI_Exported_Types EXTI Exported Types + * @{ + */ +typedef enum +{ + HAL_EXTI_COMMON_CB_ID = 0x00U +} EXTI_CallbackIDTypeDef; + +/** + * @brief EXTI Handle structure definition + */ +typedef struct +{ + uint32_t Line; /*!< Exti line number */ + void (* PendingCallback)(void); /*!< Exti pending callback */ +} EXTI_HandleTypeDef; + +/** + * @brief EXTI Configuration structure definition + */ +typedef struct +{ + uint32_t Line; /*!< The Exti line to be configured. This parameter + can be a value of @ref EXTI_Line */ + uint32_t Mode; /*!< The Exit Mode to be configured for a core. + This parameter can be a combination of @ref EXTI_Mode */ + uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter + can be a value of @ref EXTI_Trigger */ + uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured. + This parameter is only possible for line 0 to 15. It + can be a value of @ref EXTI_GPIOSel */ +} EXTI_ConfigTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Constants EXTI Exported Constants + * @{ + */ + +/** @defgroup EXTI_Line EXTI Line + * @{ + */ +#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */ +#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */ +#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */ +#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */ +#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */ +#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */ +#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */ +#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */ +#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */ +#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */ +#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */ +#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */ +#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */ +#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */ +#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */ +#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */ +#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */ +#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */ +#if defined(EXTI_IMR_IM18) +#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */ +#else +#define EXTI_LINE_18 (EXTI_RESERVED | 0x12u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM18 */ +#if defined(EXTI_IMR_IM19) +#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ +#else +#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM19 */ +#if defined(EXTI_IMR_IM20) +#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */ +#else +#define EXTI_LINE_20 (EXTI_RESERVED | 0x14u) /*!< No interrupt supported in this line */ +#endif /* EXTI_IMR_IM20 */ +#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ +#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ +#if defined(EXTI_IMR_IM23) +#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM1 asynchronous event */ +#endif /* EXTI_IMR_IM23 */ + +/** + * @} + */ + +/** @defgroup EXTI_Mode EXTI Mode + * @{ + */ +#define EXTI_MODE_NONE 0x00000000u +#define EXTI_MODE_INTERRUPT 0x00000001u +#define EXTI_MODE_EVENT 0x00000002u +/** + * @} + */ + +/** @defgroup EXTI_Trigger EXTI Trigger + * @{ + */ + +#define EXTI_TRIGGER_NONE 0x00000000u +#define EXTI_TRIGGER_RISING 0x00000001u +#define EXTI_TRIGGER_FALLING 0x00000002u +#define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) +/** + * @} + */ + +/** @defgroup EXTI_GPIOSel EXTI GPIOSel + * @brief + * @{ + */ +#define EXTI_GPIOA 0x00000000u +#define EXTI_GPIOB 0x00000001u +#define EXTI_GPIOC 0x00000002u +#if defined (GPIOD) +#define EXTI_GPIOD 0x00000003u +#endif /* GPIOD */ +#if defined (GPIOE) +#define EXTI_GPIOE 0x00000004u +#endif /* GPIOE */ +#if defined (GPIOF) +#define EXTI_GPIOF 0x00000005u +#endif /* GPIOF */ +#if defined (GPIOG) +#define EXTI_GPIOG 0x00000006u +#endif /* GPIOG */ +#if defined (GPIOH) +#define EXTI_GPIOH 0x00000007u +#endif /* GPIOH */ +#if defined (GPIOI) +#define EXTI_GPIOI 0x00000008u +#endif /* GPIOI */ +#if defined (GPIOJ) +#define EXTI_GPIOJ 0x00000009u +#endif /* GPIOJ */ +#if defined (GPIOK) +#define EXTI_GPIOK 0x0000000Au +#endif /* GPIOK */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Macros EXTI Exported Macros + * @{ + */ + +/** + * @} + */ + +/* Private constants --------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ +/** + * @brief EXTI Line property definition + */ +#define EXTI_PROPERTY_SHIFT 24u +#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT) +#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG) +#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT) +#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO) + +/** + * @brief EXTI bit usage + */ +#define EXTI_PIN_MASK 0x0000001Fu + +/** + * @brief EXTI Mask for interrupt & event mode + */ +#define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT) + +/** + * @brief EXTI Mask for trigger possibilities + */ +#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING) + +/** + * @brief EXTI Line number + */ +#if defined(EXTI_IMR_IM23) +#define EXTI_LINE_NB 24UL +#else +#define EXTI_LINE_NB 23UL +#endif /* EXTI_IMR_IM23 */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup EXTI_Private_Macros EXTI Private Macros + * @{ + */ +#define IS_EXTI_LINE(__EXTI_LINE__) ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \ + ((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \ + (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \ + (((__EXTI_LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB)) + +#define IS_EXTI_MODE(__EXTI_LINE__) ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00u) && \ + (((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00u)) + +#define IS_EXTI_TRIGGER(__EXTI_LINE__) (((__EXTI_LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u) + +#define IS_EXTI_PENDING_EDGE(__EXTI_LINE__) ((__EXTI_LINE__) == EXTI_TRIGGER_RISING_FALLING) + +#define IS_EXTI_CONFIG_LINE(__EXTI_LINE__) (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00u) + +#if !defined (GPIOD) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOE) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOF) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOI) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH)) +#elif !defined (GPIOJ) +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH) || \ + ((__PORT__) == EXTI_GPIOI)) +#else +#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \ + ((__PORT__) == EXTI_GPIOB) || \ + ((__PORT__) == EXTI_GPIOC) || \ + ((__PORT__) == EXTI_GPIOD) || \ + ((__PORT__) == EXTI_GPIOE) || \ + ((__PORT__) == EXTI_GPIOF) || \ + ((__PORT__) == EXTI_GPIOG) || \ + ((__PORT__) == EXTI_GPIOH) || \ + ((__PORT__) == EXTI_GPIOI) || \ + ((__PORT__) == EXTI_GPIOJ) || \ + ((__PORT__) == EXTI_GPIOK)) +#endif /* GPIOD */ + +#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U) +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup EXTI_Exported_Functions EXTI Exported Functions + * @brief EXTI Exported Functions + * @{ + */ + +/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions + * @brief Configuration functions + * @{ + */ +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig); +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti); +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)); +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine); +/** + * @} + */ + +/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions + * @brief IO operation functions + * @{ + */ +/* IO operation functions *****************************************************/ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti); +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge); +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32f4xx_HAL_EXTI_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h new file mode 100644 index 0000000..26d789e --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h @@ -0,0 +1,425 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash.h + * @author MCD Application Team + * @brief Header file of FLASH HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_FLASH_H +#define __STM32F4xx_HAL_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Procedure structure definition + */ +typedef enum +{ + FLASH_PROC_NONE = 0U, + FLASH_PROC_SECTERASE, + FLASH_PROC_MASSERASE, + FLASH_PROC_PROGRAM +} FLASH_ProcedureTypeDef; + +/** + * @brief FLASH handle Structure definition + */ +typedef struct +{ + __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*Internal variable to indicate which procedure is ongoing or not in IT context*/ + + __IO uint32_t NbSectorsToErase; /*Internal variable to save the remaining sectors to erase in IT context*/ + + __IO uint8_t VoltageForErase; /*Internal variable to provide voltage range selected by user in IT context*/ + + __IO uint32_t Sector; /*Internal variable to define the current sector which is erasing*/ + + __IO uint32_t Bank; /*Internal variable to save current bank selected during mass erase*/ + + __IO uint32_t Address; /*Internal variable to save address selected for program*/ + + HAL_LockTypeDef Lock; /* FLASH locking object */ + + __IO uint32_t ErrorCode; /* FLASH error code */ + +}FLASH_ProcessTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Constants FLASH Exported Constants + * @{ + */ +/** @defgroup FLASH_Error_Code FLASH Error Code + * @brief FLASH Error Code + * @{ + */ +#define HAL_FLASH_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_FLASH_ERROR_RD 0x00000001U /*!< Read Protection error */ +#define HAL_FLASH_ERROR_PGS 0x00000002U /*!< Programming Sequence error */ +#define HAL_FLASH_ERROR_PGP 0x00000004U /*!< Programming Parallelism error */ +#define HAL_FLASH_ERROR_PGA 0x00000008U /*!< Programming Alignment error */ +#define HAL_FLASH_ERROR_WRP 0x00000010U /*!< Write protection error */ +#define HAL_FLASH_ERROR_OPERATION 0x00000020U /*!< Operation Error */ +/** + * @} + */ + +/** @defgroup FLASH_Type_Program FLASH Type Program + * @{ + */ +#define FLASH_TYPEPROGRAM_BYTE 0x00000000U /*!< Program byte (8-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_HALFWORD 0x00000001U /*!< Program a half-word (16-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_WORD 0x00000002U /*!< Program a word (32-bit) at a specified address */ +#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x00000003U /*!< Program a double word (64-bit) at a specified address */ +/** + * @} + */ + +/** @defgroup FLASH_Flag_definition FLASH Flag definition + * @brief Flag definition + * @{ + */ +#define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */ +#define FLASH_FLAG_OPERR FLASH_SR_SOP /*!< FLASH operation Error flag */ +#define FLASH_FLAG_WRPERR FLASH_SR_WRPERR /*!< FLASH Write protected error flag */ +#define FLASH_FLAG_PGAERR FLASH_SR_PGAERR /*!< FLASH Programming Alignment error flag */ +#define FLASH_FLAG_PGPERR FLASH_SR_PGPERR /*!< FLASH Programming Parallelism error flag */ +#define FLASH_FLAG_PGSERR FLASH_SR_PGSERR /*!< FLASH Programming Sequence error flag */ +#if defined(FLASH_SR_RDERR) +#define FLASH_FLAG_RDERR FLASH_SR_RDERR /*!< Read Protection error flag (PCROP) */ +#endif /* FLASH_SR_RDERR */ +#define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ +/** + * @} + */ + +/** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition + * @brief FLASH Interrupt definition + * @{ + */ +#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */ +#define FLASH_IT_ERR 0x02000000U /*!< Error Interrupt source */ +/** + * @} + */ + +/** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism + * @{ + */ +#define FLASH_PSIZE_BYTE 0x00000000U +#define FLASH_PSIZE_HALF_WORD 0x00000100U +#define FLASH_PSIZE_WORD 0x00000200U +#define FLASH_PSIZE_DOUBLE_WORD 0x00000300U +#define CR_PSIZE_MASK 0xFFFFFCFFU +/** + * @} + */ + +/** @defgroup FLASH_Keys FLASH Keys + * @{ + */ +#define RDP_KEY ((uint16_t)0x00A5) +#define FLASH_KEY1 0x45670123U +#define FLASH_KEY2 0xCDEF89ABU +#define FLASH_OPT_KEY1 0x08192A3BU +#define FLASH_OPT_KEY2 0x4C5D6E7FU +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Macros FLASH Exported Macros + * @{ + */ +/** + * @brief Set the FLASH Latency. + * @param __LATENCY__ FLASH Latency + * The value of this parameter depend on device used within the same series + * @retval none + */ +#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (*(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)(__LATENCY__)) + +/** + * @brief Get the FLASH Latency. + * @retval FLASH Latency + * The value of this parameter depend on device used within the same series + */ +#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) + +/** + * @brief Enable the FLASH prefetch buffer. + * @retval none + */ +#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTEN) + +/** + * @brief Disable the FLASH prefetch buffer. + * @retval none + */ +#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTEN)) + +/** + * @brief Enable the FLASH instruction cache. + * @retval none + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_ICEN) + +/** + * @brief Disable the FLASH instruction cache. + * @retval none + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_ICEN)) + +/** + * @brief Enable the FLASH data cache. + * @retval none + */ +#define __HAL_FLASH_DATA_CACHE_ENABLE() (FLASH->ACR |= FLASH_ACR_DCEN) + +/** + * @brief Disable the FLASH data cache. + * @retval none + */ +#define __HAL_FLASH_DATA_CACHE_DISABLE() (FLASH->ACR &= (~FLASH_ACR_DCEN)) + +/** + * @brief Resets the FLASH instruction Cache. + * @note This function must be used only when the Instruction Cache is disabled. + * @retval None + */ +#define __HAL_FLASH_INSTRUCTION_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_ICRST; \ + FLASH->ACR &= ~FLASH_ACR_ICRST; \ + }while(0U) + +/** + * @brief Resets the FLASH data Cache. + * @note This function must be used only when the data Cache is disabled. + * @retval None + */ +#define __HAL_FLASH_DATA_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_DCRST; \ + FLASH->ACR &= ~FLASH_ACR_DCRST; \ + }while(0U) +/** + * @brief Enable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt + * @arg FLASH_IT_ERR: Error Interrupt + * @retval none + */ +#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) + +/** + * @brief Disable the specified FLASH interrupt. + * @param __INTERRUPT__ FLASH interrupt + * This parameter can be any combination of the following values: + * @arg FLASH_IT_EOP: End of FLASH Operation Interrupt + * @arg FLASH_IT_ERR: Error Interrupt + * @retval none + */ +#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(uint32_t)(__INTERRUPT__)) + +/** + * @brief Get the specified FLASH flag status. + * @param __FLAG__ specifies the FLASH flags to check. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_EOP : FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR : FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*) + * @arg FLASH_FLAG_BSY : FLASH Busy flag + * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices + * @retval The new state of __FLAG__ (SET or RESET). + */ +#define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))) + +/** + * @brief Clear the specified FLASH flags. + * @param __FLAG__ specifies the FLASH flags to clear. + * This parameter can be any combination of the following values: + * @arg FLASH_FLAG_EOP : FLASH End of Operation flag + * @arg FLASH_FLAG_OPERR : FLASH operation Error flag + * @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag + * @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag + * @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag + * @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag + * @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*) + * (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices + * @retval none + */ +#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) (FLASH->SR = (__FLAG__)) +/** + * @} + */ + +/* Include FLASH HAL Extension module */ +#include "stm32f4xx_hal_flash_ex.h" +#include "stm32f4xx_hal_flash_ramfunc.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_Exported_Functions + * @{ + */ +/** @addtogroup FLASH_Exported_Functions_Group1 + * @{ + */ +/* Program operation functions ***********************************************/ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); +/* FLASH IRQ handler method */ +void HAL_FLASH_IRQHandler(void); +/* Callbacks in non blocking modes */ +void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); +void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions **********************************************/ +HAL_StatusTypeDef HAL_FLASH_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_Lock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); +/* Option bytes control */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); +/** + * @} + */ + +/** @addtogroup FLASH_Exported_Functions_Group3 + * @{ + */ +/* Peripheral State functions ************************************************/ +uint32_t HAL_FLASH_GetError(void); +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Variables FLASH Private Variables + * @{ + */ + +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Constants FLASH Private Constants + * @{ + */ + +/** + * @brief ACR register byte 0 (Bits[7:0]) base address + */ +#define ACR_BYTE0_ADDRESS 0x40023C00U +/** + * @brief OPTCR register byte 0 (Bits[7:0]) base address + */ +#define OPTCR_BYTE0_ADDRESS 0x40023C14U +/** + * @brief OPTCR register byte 1 (Bits[15:8]) base address + */ +#define OPTCR_BYTE1_ADDRESS 0x40023C15U +/** + * @brief OPTCR register byte 2 (Bits[23:16]) base address + */ +#define OPTCR_BYTE2_ADDRESS 0x40023C16U +/** + * @brief OPTCR register byte 3 (Bits[31:24]) base address + */ +#define OPTCR_BYTE3_ADDRESS 0x40023C17U + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup FLASH_Private_Macros FLASH Private Macros + * @{ + */ + +/** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters + * @{ + */ +#define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \ + ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ + ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup FLASH_Private_Functions FLASH Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_FLASH_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h new file mode 100644 index 0000000..1cf8c45 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h @@ -0,0 +1,1063 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ex.h + * @author MCD Application Team + * @brief Header file of FLASH HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_FLASH_EX_H +#define __STM32F4xx_HAL_FLASH_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASHEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Types FLASH Exported Types + * @{ + */ + +/** + * @brief FLASH Erase structure definition + */ +typedef struct +{ + uint32_t TypeErase; /*!< Mass erase or sector Erase. + This parameter can be a value of @ref FLASHEx_Type_Erase */ + + uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint32_t Sector; /*!< Initial FLASH sector to erase when Mass erase is disabled + This parameter must be a value of @ref FLASHEx_Sectors */ + + uint32_t NbSectors; /*!< Number of sectors to be erased. + This parameter must be a value between 1 and (max number of sectors - value of Initial sector)*/ + + uint32_t VoltageRange;/*!< The device voltage range which defines the erase parallelism + This parameter must be a value of @ref FLASHEx_Voltage_Range */ + +} FLASH_EraseInitTypeDef; + +/** + * @brief FLASH Option Bytes Program structure definition + */ +typedef struct +{ + uint32_t OptionType; /*!< Option byte to be configured. + This parameter can be a value of @ref FLASHEx_Option_Type */ + + uint32_t WRPState; /*!< Write protection activation or deactivation. + This parameter can be a value of @ref FLASHEx_WRP_State */ + + uint32_t WRPSector; /*!< Specifies the sector(s) to be write protected. + The value of this parameter depend on device used within the same series */ + + uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint32_t RDPLevel; /*!< Set the read protection level. + This parameter can be a value of @ref FLASHEx_Option_Bytes_Read_Protection */ + + uint32_t BORLevel; /*!< Set the BOR Level. + This parameter can be a value of @ref FLASHEx_BOR_Reset_Level */ + + uint8_t USERConfig; /*!< Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. */ + +} FLASH_OBProgramInitTypeDef; + +/** + * @brief FLASH Advanced Option Bytes Program structure definition + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +typedef struct +{ + uint32_t OptionType; /*!< Option byte to be configured for extension. + This parameter can be a value of @ref FLASHEx_Advanced_Option_Type */ + + uint32_t PCROPState; /*!< PCROP activation or deactivation. + This parameter can be a value of @ref FLASHEx_PCROP_State */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + uint16_t Sectors; /*!< specifies the sector(s) set for PCROP. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx ||\ + STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + uint32_t Banks; /*!< Select banks for PCROP activation/deactivation of all sectors. + This parameter must be a value of @ref FLASHEx_Banks */ + + uint16_t SectorsBank1; /*!< Specifies the sector(s) set for PCROP for Bank1. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ + + uint16_t SectorsBank2; /*!< Specifies the sector(s) set for PCROP for Bank2. + This parameter can be a value of @ref FLASHEx_Option_Bytes_PC_ReadWrite_Protection */ + + uint8_t BootConfig; /*!< Specifies Option bytes for boot config. + This parameter can be a value of @ref FLASHEx_Dual_Boot */ + +#endif /*STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +}FLASH_AdvOBProgramInitTypeDef; +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || + STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup FLASHEx_Exported_Constants FLASH Exported Constants + * @{ + */ + +/** @defgroup FLASHEx_Type_Erase FLASH Type Erase + * @{ + */ +#define FLASH_TYPEERASE_SECTORS 0x00000000U /*!< Sectors erase only */ +#define FLASH_TYPEERASE_MASSERASE 0x00000001U /*!< Flash Mass erase activation */ +/** + * @} + */ + +/** @defgroup FLASHEx_Voltage_Range FLASH Voltage Range + * @{ + */ +#define FLASH_VOLTAGE_RANGE_1 0x00000000U /*!< Device operating range: 1.8V to 2.1V */ +#define FLASH_VOLTAGE_RANGE_2 0x00000001U /*!< Device operating range: 2.1V to 2.7V */ +#define FLASH_VOLTAGE_RANGE_3 0x00000002U /*!< Device operating range: 2.7V to 3.6V */ +#define FLASH_VOLTAGE_RANGE_4 0x00000003U /*!< Device operating range: 2.7V to 3.6V + External Vpp */ +/** + * @} + */ + +/** @defgroup FLASHEx_WRP_State FLASH WRP State + * @{ + */ +#define OB_WRPSTATE_DISABLE 0x00000000U /*!< Disable the write protection of the desired bank 1 sectors */ +#define OB_WRPSTATE_ENABLE 0x00000001U /*!< Enable the write protection of the desired bank 1 sectors */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Type FLASH Option Type + * @{ + */ +#define OPTIONBYTE_WRP 0x00000001U /*!< WRP option byte configuration */ +#define OPTIONBYTE_RDP 0x00000002U /*!< RDP option byte configuration */ +#define OPTIONBYTE_USER 0x00000004U /*!< USER option byte configuration */ +#define OPTIONBYTE_BOR 0x00000008U /*!< BOR option byte configuration */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_Read_Protection FLASH Option Bytes Read Protection + * @{ + */ +#define OB_RDP_LEVEL_0 ((uint8_t)0xAA) +#define OB_RDP_LEVEL_1 ((uint8_t)0x55) +#define OB_RDP_LEVEL_2 ((uint8_t)0xCC) /*!< Warning: When enabling read protection level 2 + it s no more possible to go back to level 1 or 0 */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_IWatchdog FLASH Option Bytes IWatchdog + * @{ + */ +#define OB_IWDG_SW ((uint8_t)0x20) /*!< Software IWDG selected */ +#define OB_IWDG_HW ((uint8_t)0x00) /*!< Hardware IWDG selected */ +/** + * @} + */ + +/** @defgroup FLASHEx_Option_Bytes_nRST_STOP FLASH Option Bytes nRST_STOP + * @{ + */ +#define OB_STOP_NO_RST ((uint8_t)0x40) /*!< No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint8_t)0x00) /*!< Reset generated when entering in STOP */ +/** + * @} + */ + + +/** @defgroup FLASHEx_Option_Bytes_nRST_STDBY FLASH Option Bytes nRST_STDBY + * @{ + */ +#define OB_STDBY_NO_RST ((uint8_t)0x80) /*!< No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint8_t)0x00) /*!< Reset generated when entering in STANDBY */ +/** + * @} + */ + +/** @defgroup FLASHEx_BOR_Reset_Level FLASH BOR Reset Level + * @{ + */ +#define OB_BOR_LEVEL3 ((uint8_t)0x00) /*!< Supply voltage ranges from 2.70 to 3.60 V */ +#define OB_BOR_LEVEL2 ((uint8_t)0x04) /*!< Supply voltage ranges from 2.40 to 2.70 V */ +#define OB_BOR_LEVEL1 ((uint8_t)0x08) /*!< Supply voltage ranges from 2.10 to 2.40 V */ +#define OB_BOR_OFF ((uint8_t)0x0C) /*!< Supply voltage ranges from 1.62 to 2.10 V */ +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup FLASHEx_PCROP_State FLASH PCROP State + * @{ + */ +#define OB_PCROP_STATE_DISABLE 0x00000000U /*!< Disable PCROP */ +#define OB_PCROP_STATE_ENABLE 0x00000001U /*!< Enable PCROP */ +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/** @defgroup FLASHEx_Advanced_Option_Type FLASH Advanced Option Type + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define OPTIONBYTE_PCROP 0x00000001U /*!< PCROP option byte configuration */ +#define OPTIONBYTE_BOOTCONFIG 0x00000002U /*!< BOOTConfig option byte configuration */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +#define OPTIONBYTE_PCROP 0x00000001U /*!= FLASH_BASE) && ((ADDRESS) <= FLASH_END)) || \ + (((ADDRESS) >= FLASH_OTP_BASE) && ((ADDRESS) <= FLASH_OTP_END))) + +#define IS_FLASH_NBSECTORS(NBSECTORS) (((NBSECTORS) != 0) && ((NBSECTORS) <= FLASH_SECTOR_TOTAL)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFF000000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xC */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_OB_WRP_SECTOR(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFF8000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F401xC) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xC */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_OB_PCROP(SECTOR)((((SECTOR) & 0xFFFFF000U) == 0x00000000U) && ((SECTOR) != 0x00000000U)) +#endif /* STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define IS_OB_BOOT(BOOT) (((BOOT) == OB_DUAL_BOOT_ENABLE) || ((BOOT) == OB_DUAL_BOOT_DISABLE)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define IS_OB_PCROP_SELECT(PCROP) (((PCROP) == OB_PCROP_SELECTED) || ((PCROP) == OB_PCROP_DESELECTED)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup FLASHEx_Private_Functions FLASH Private Functions + * @{ + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange); +void FLASH_FlushCaches(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_FLASH_EX_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h new file mode 100644 index 0000000..05917ec --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h @@ -0,0 +1,76 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ramfunc.h + * @author MCD Application Team + * @brief Header file of FLASH RAMFUNC driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_FLASH_RAMFUNC_H +#define __STM32F4xx_FLASH_RAMFUNC_H + +#ifdef __cplusplus + extern "C" { +#endif +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup FLASH_RAMFUNC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup FLASH_RAMFUNC_Exported_Functions + * @{ + */ + +/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1 + * @{ + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void); +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_FLASH_RAMFUNC_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h new file mode 100644 index 0000000..5f3d749 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h @@ -0,0 +1,325 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio.h + * @author MCD Application Team + * @brief Header file of GPIO HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_GPIO_H +#define __STM32F4xx_HAL_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup GPIO + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Types GPIO Exported Types + * @{ + */ + +/** + * @brief GPIO Init structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_mode_define */ + + uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. + This parameter can be a value of @ref GPIO_pull_define */ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_speed_define */ + + uint32_t Alternate; /*!< Peripheral to be connected to the selected pins. + This parameter can be a value of @ref GPIO_Alternate_function_selection */ +}GPIO_InitTypeDef; + +/** + * @brief GPIO Bit SET and Bit RESET enumeration + */ +typedef enum +{ + GPIO_PIN_RESET = 0, + GPIO_PIN_SET +}GPIO_PinState; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ + +/** @defgroup GPIO_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_pins_define 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 GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */ +/** + * @} + */ + +/** @defgroup GPIO_mode_define GPIO mode define + * @brief GPIO Configuration Mode + * Elements values convention: 0x00WX00YZ + * - W : EXTI trigger detection on 3 bits + * - X : EXTI mode (IT or Event) on 2 bits + * - Y : Output type (Push Pull or Open Drain) on 1 bit + * - Z : GPIO mode (Input, Output, Alternate or Analog) on 2 bits + * @{ + */ +#define GPIO_MODE_INPUT MODE_INPUT /*!< Input Floating Mode */ +#define GPIO_MODE_OUTPUT_PP (MODE_OUTPUT | OUTPUT_PP) /*!< Output Push Pull Mode */ +#define GPIO_MODE_OUTPUT_OD (MODE_OUTPUT | OUTPUT_OD) /*!< Output Open Drain Mode */ +#define GPIO_MODE_AF_PP (MODE_AF | OUTPUT_PP) /*!< Alternate Function Push Pull Mode */ +#define GPIO_MODE_AF_OD (MODE_AF | OUTPUT_OD) /*!< Alternate Function Open Drain Mode */ + +#define GPIO_MODE_ANALOG MODE_ANALOG /*!< Analog Mode */ + +#define GPIO_MODE_IT_RISING (MODE_INPUT | EXTI_IT | TRIGGER_RISING) /*!< External Interrupt Mode with Rising edge trigger detection */ +#define GPIO_MODE_IT_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_FALLING) /*!< External Interrupt Mode with Falling edge trigger detection */ +#define GPIO_MODE_IT_RISING_FALLING (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ + +#define GPIO_MODE_EVT_RISING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING) /*!< External Event Mode with Rising edge trigger detection */ +#define GPIO_MODE_EVT_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING) /*!< External Event Mode with Falling edge trigger detection */ +#define GPIO_MODE_EVT_RISING_FALLING (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING) /*!< External Event Mode with Rising/Falling edge trigger detection */ + +/** + * @} + */ + +/** @defgroup GPIO_speed_define GPIO speed define + * @brief GPIO Output Maximum frequency + * @{ + */ +#define GPIO_SPEED_FREQ_LOW 0x00000000U /*!< IO works at 2 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_MEDIUM 0x00000001U /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_HIGH 0x00000002U /*!< range 25 MHz to 100 MHz, please refer to the product datasheet */ +#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U /*!< range 50 MHz to 200 MHz, please refer to the product datasheet */ +/** + * @} + */ + + /** @defgroup GPIO_pull_define GPIO pull define + * @brief GPIO Pull-Up or Pull-Down Activation + * @{ + */ +#define GPIO_NOPULL 0x00000000U /*!< No Pull-up or Pull-down activation */ +#define GPIO_PULLUP 0x00000001U /*!< Pull-up activation */ +#define GPIO_PULLDOWN 0x00000002U /*!< Pull-down activation */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** + * @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 GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @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 GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_FLAG(__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 GPIO_PIN_x where x can be(0..15) + * @retval The new state of __EXTI_LINE__ (SET or RESET). + */ +#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) + +/** + * @brief Clears the EXTI's line pending bits. + * @param __EXTI_LINE__ specifies the EXTI lines to clear. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) + +/** + * @brief Generates a Software interrupt on selected EXTI line. + * @param __EXTI_LINE__ specifies the EXTI line to check. + * This parameter can be GPIO_PIN_x where x can be(0..15) + * @retval None + */ +#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) +/** + * @} + */ + +/* Include GPIO HAL Extension module */ +#include "stm32f4xx_hal_gpio_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup GPIO_Exported_Functions + * @{ + */ + +/** @addtogroup GPIO_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); +/** + * @} + */ + +/** @addtogroup GPIO_Exported_Functions_Group2 + * @{ + */ +/* IO operation functions *****************************************************/ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); + +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ +#define GPIO_MODE_Pos 0U +#define GPIO_MODE (0x3UL << GPIO_MODE_Pos) +#define MODE_INPUT (0x0UL << GPIO_MODE_Pos) +#define MODE_OUTPUT (0x1UL << GPIO_MODE_Pos) +#define MODE_AF (0x2UL << GPIO_MODE_Pos) +#define MODE_ANALOG (0x3UL << GPIO_MODE_Pos) +#define OUTPUT_TYPE_Pos 4U +#define OUTPUT_TYPE (0x1UL << OUTPUT_TYPE_Pos) +#define OUTPUT_PP (0x0UL << OUTPUT_TYPE_Pos) +#define OUTPUT_OD (0x1UL << OUTPUT_TYPE_Pos) +#define EXTI_MODE_Pos 16U +#define EXTI_MODE (0x3UL << EXTI_MODE_Pos) +#define EXTI_IT (0x1UL << EXTI_MODE_Pos) +#define EXTI_EVT (0x2UL << EXTI_MODE_Pos) +#define TRIGGER_MODE_Pos 20U +#define TRIGGER_MODE (0x7UL << TRIGGER_MODE_Pos) +#define TRIGGER_RISING (0x1UL << TRIGGER_MODE_Pos) +#define TRIGGER_FALLING (0x2UL << TRIGGER_MODE_Pos) + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIO_Private_Macros GPIO Private Macros + * @{ + */ +#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) +#define IS_GPIO_PIN(PIN) (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00U) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00U)) +#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\ + ((MODE) == GPIO_MODE_OUTPUT_PP) ||\ + ((MODE) == GPIO_MODE_OUTPUT_OD) ||\ + ((MODE) == GPIO_MODE_AF_PP) ||\ + ((MODE) == GPIO_MODE_AF_OD) ||\ + ((MODE) == GPIO_MODE_IT_RISING) ||\ + ((MODE) == GPIO_MODE_IT_FALLING) ||\ + ((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING) ||\ + ((MODE) == GPIO_MODE_EVT_FALLING) ||\ + ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\ + ((MODE) == GPIO_MODE_ANALOG)) +#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \ + ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH)) +#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ + ((PULL) == GPIO_PULLDOWN)) +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup GPIO_Private_Functions GPIO Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_GPIO_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h new file mode 100644 index 0000000..5e0b7cc --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h @@ -0,0 +1,1590 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio_ex.h + * @author MCD Application Team + * @brief Header file of GPIO HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_GPIO_EX_H +#define __STM32F4xx_HAL_GPIO_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIOEx GPIOEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_Alternate_function_selection GPIO Alternate Function Selection + * @{ + */ + +/*------------------------------------------ STM32F429xx/STM32F439xx ---------*/ +#if defined(STM32F429xx) || defined(STM32F439xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_LTDC ((uint8_t)0x0E) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F427xx/STM32F437xx------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +/** @brief GPIO_Legacy + */ +#define GPIO_AF5_I2S3ext GPIO_AF5_SPI3 /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F427xx || STM32F437xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F407xx/STM32F417xx------------------*/ +#if defined(STM32F407xx) || defined(STM32F417xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FSMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F405xx/STM32F415xx------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FSMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F405xx || STM32F415xx */ + +/*----------------------------------------------------------------------------*/ + +/*---------------------------------------- STM32F401xx------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ + + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F401xC || STM32F401xE */ +/*----------------------------------------------------------------------------*/ + +/*--------------- STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx-------------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_DFSDM1 ((uint8_t)0x06) /* DFSDM1 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_USART3 ((uint8_t)0x08) /* USART3 Alternate Function mapping */ +#define GPIO_AF8_DFSDM1 ((uint8_t)0x08) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF8_CAN1 ((uint8_t)0x08) /* CAN1 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_DFSDM1 ((uint8_t)0x0A) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ +#define GPIO_AF10_FMC ((uint8_t)0x0A) /* FMC Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +/*----------------------------------------------------------------------------*/ + +/*--------------- STM32F413xx/STM32F423xx-------------------------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ +#define GPIO_AF3_DFSDM2 ((uint8_t)0x03) /* DFSDM2 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_DFSDM1 ((uint8_t)0x06) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF6_DFSDM2 ((uint8_t)0x06) /* DFSDM2 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_SAI1 ((uint8_t)0x07) /* SAI1 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ +#define GPIO_AF7_DFSDM2 ((uint8_t)0x07) /* DFSDM2 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_USART3 ((uint8_t)0x08) /* USART3 Alternate Function mapping */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ +#define GPIO_AF8_DFSDM1 ((uint8_t)0x08) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF8_CAN1 ((uint8_t)0x08) /* CAN1 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_SAI1 ((uint8_t)0x0A) /* SAI1 Alternate Function mapping */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_DFSDM1 ((uint8_t)0x0A) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF10_DFSDM2 ((uint8_t)0x0A) /* DFSDM2 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ +#define GPIO_AF10_FSMC ((uint8_t)0x0A) /* FSMC Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_UART4 ((uint8_t)0x0B) /* UART4 Alternate Function mapping */ +#define GPIO_AF11_UART5 ((uint8_t)0x0B) /* UART5 Alternate Function mapping */ +#define GPIO_AF11_UART9 ((uint8_t)0x0B) /* UART9 Alternate Function mapping */ +#define GPIO_AF11_UART10 ((uint8_t)0x0B) /* UART10 Alternate Function mapping */ +#define GPIO_AF11_CAN3 ((uint8_t)0x0B) /* CAN3 Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ +#define GPIO_AF12_FSMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_RNG ((uint8_t)0x0E) /* RNG Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F413xx || STM32F423xx */ + +/*---------------------------------------- STM32F411xx------------------------*/ +#if defined(STM32F411xE) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4/I2S4 Alternate Function mapping */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_I2C3 ((uint8_t)0x09) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F411xE */ + +/*---------------------------------------- STM32F410xx------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#if defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#endif /* STM32F410Cx || STM32F410Rx */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI1 ((uint8_t)0x06) /* SPI1 Alternate Function mapping */ +#if defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* I2S2 Alternate Function mapping */ +#endif /* STM32F410Cx || STM32F410Rx */ +#define GPIO_AF6_SPI5 ((uint8_t)0x06) /* SPI5/I2S5 Alternate Function mapping */ +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_I2C2 ((uint8_t)0x09) /* I2C2 Alternate Function mapping */ +#define GPIO_AF9_FMPI2C1 ((uint8_t)0x09) /* FMPI2C1 Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/*---------------------------------------- STM32F446xx -----------------------*/ +#if defined(STM32F446xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ +#define GPIO_AF3_CEC ((uint8_t)0x03) /* CEC Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_FMPI2C1 ((uint8_t)0x04) /* FMPI2C1 Alternate Function mapping */ +#define GPIO_AF4_CEC ((uint8_t)0x04) /* CEC Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1/I2S1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI2 ((uint8_t)0x06) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_SPI4 ((uint8_t)0x06) /* SPI4 Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_UART5 ((uint8_t)0x07) /* UART5 Alternate Function mapping */ +#define GPIO_AF7_SPI2 ((uint8_t)0x07) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF7_SPI3 ((uint8_t)0x07) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF7_SPDIFRX ((uint8_t)0x07) /* SPDIFRX Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_SPDIFRX ((uint8_t)0x08) /* SPDIFRX Alternate Function mapping */ +#define GPIO_AF8_SAI2 ((uint8_t)0x08) /* SAI2 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ +#define GPIO_AF10_SAI2 ((uint8_t)0x0A) /* SAI2 Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F469xx/STM32F479xx--------------------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_TAMPER ((uint8_t)0x00) /* TAMPER (TAMPER_1 and TAMPER_2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM9 ((uint8_t)0x03) /* TIM9 Alternate Function mapping */ +#define GPIO_AF3_TIM10 ((uint8_t)0x03) /* TIM10 Alternate Function mapping */ +#define GPIO_AF3_TIM11 ((uint8_t)0x03) /* TIM11 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2/I2S2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF5_SPI4 ((uint8_t)0x05) /* SPI4 Alternate Function mapping */ +#define GPIO_AF5_SPI5 ((uint8_t)0x05) /* SPI5 Alternate Function mapping */ +#define GPIO_AF5_SPI6 ((uint8_t)0x05) /* SPI6 Alternate Function mapping */ +#define GPIO_AF5_I2S3ext ((uint8_t)0x05) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3/I2S3 Alternate Function mapping */ +#define GPIO_AF6_I2S2ext ((uint8_t)0x06) /* I2S2ext_SD Alternate Function mapping */ +#define GPIO_AF6_SAI1 ((uint8_t)0x06) /* SAI1 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ +#define GPIO_AF7_I2S3ext ((uint8_t)0x07) /* I2S3ext_SD Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ +#define GPIO_AF8_USART6 ((uint8_t)0x08) /* USART6 Alternate Function mapping */ +#define GPIO_AF8_UART7 ((uint8_t)0x08) /* UART7 Alternate Function mapping */ +#define GPIO_AF8_UART8 ((uint8_t)0x08) /* UART8 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_CAN2 ((uint8_t)0x09) /* CAN2 Alternate Function mapping */ +#define GPIO_AF9_TIM12 ((uint8_t)0x09) /* TIM12 Alternate Function mapping */ +#define GPIO_AF9_TIM13 ((uint8_t)0x09) /* TIM13 Alternate Function mapping */ +#define GPIO_AF9_TIM14 ((uint8_t)0x09) /* TIM14 Alternate Function mapping */ +#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LCD-TFT Alternate Function mapping */ +#define GPIO_AF9_QSPI ((uint8_t)0x09) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ +#define GPIO_AF10_OTG_HS ((uint8_t)0x0A) /* OTG_HS Alternate Function mapping */ +#define GPIO_AF10_QSPI ((uint8_t)0x0A) /* QSPI Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_ETH ((uint8_t)0x0B) /* ETHERNET Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_OTG_HS_FS ((uint8_t)0x0C) /* OTG HS configured in FS, Alternate Function mapping */ +#define GPIO_AF12_SDIO ((uint8_t)0x0C) /* SDIO Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_DCMI ((uint8_t)0x0D) /* DCMI Alternate Function mapping */ +#define GPIO_AF13_DSI ((uint8_t)0x0D) /* DSI Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_LTDC ((uint8_t)0x0E) /* LCD-TFT Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Macros GPIO Exported Macros + * @{ + */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIOEx_Exported_Functions GPIO Exported Functions + * @{ + */ +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Constants GPIO Private Constants + * @{ + */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Macros GPIO Private Macros + * @{ + */ +/** @defgroup GPIOEx_Get_Port_Index GPIO Get Port Index + * @{ + */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U :\ + ((__GPIOx__) == (GPIOH))? 7U : 8U) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U :\ + ((__GPIOx__) == (GPIOH))? 7U :\ + ((__GPIOx__) == (GPIOI))? 8U :\ + ((__GPIOx__) == (GPIOJ))? 9U : 10U) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U : 7U) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 7U) +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U : 7U) +#endif /* STM32F446xx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U : 7U) +#endif /* STM32F412Vx */ +#if defined(STM32F412Rx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U : 7U) +#endif /* STM32F412Rx */ +#if defined(STM32F412Cx) +#define GPIO_GET_INDEX(__GPIOx__) (uint8_t)(((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U : 7U) +#endif /* STM32F412Cx */ + +/** + * @} + */ + +/** @defgroup GPIOEx_IS_Alternat_function_selection GPIO Check Alternate Function + * @{ + */ +/*------------------------- STM32F429xx/STM32F439xx---------------------------*/ +#if defined(STM32F429xx) || defined(STM32F439xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF14_LTDC)) + +#endif /* STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F427xx/STM32F437xx------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1)) + +#endif /* STM32F427xx || STM32F437xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F407xx/STM32F417xx------------------*/ +#if defined(STM32F407xx) || defined(STM32F417xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F405xx/STM32F415xx------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF12_OTG_HS_FS) || ((AF) == GPIO_AF12_SDIO) || \ + ((AF) == GPIO_AF12_FSMC) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F405xx || STM32F415xx */ + +/*----------------------------------------------------------------------------*/ + +/*---------------------------------------- STM32F401xx------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF12_SDIO) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM9) || \ + ((AF) == GPIO_AF3_TIM10) || ((AF) == GPIO_AF3_TIM11) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF7_USART1) || \ + ((AF) == GPIO_AF7_USART2) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_I2C2) || ((AF) == GPIO_AF9_I2C3) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF15_EVENTOUT)) +#endif /* STM32F401xC || STM32F401xE */ +/*----------------------------------------------------------------------------*/ +/*---------------------------------------- STM32F410xx------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_GPIO_AF(AF) (((AF) < 10U) || ((AF) == 15U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/*---------------------------------------- STM32F411xx------------------------*/ +#if defined(STM32F411xE) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF4_I2C1) || \ + ((AF) == GPIO_AF4_I2C2) || ((AF) == GPIO_AF4_I2C3) || \ + ((AF) == GPIO_AF5_SPI1) || ((AF) == GPIO_AF5_SPI2) || \ + ((AF) == GPIO_AF5_SPI3) || ((AF) == GPIO_AF6_SPI4) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF6_SPI5) || ((AF) == GPIO_AF7_SPI3) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF8_USART6) || ((AF) == GPIO_AF10_OTG_FS) || \ + ((AF) == GPIO_AF9_I2C2) || ((AF) == GPIO_AF9_I2C3) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF15_EVENTOUT)) + +#endif /* STM32F411xE */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------- STM32F446xx ----------------*/ +#if defined(STM32F446xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF3_CEC) || ((AF) == GPIO_AF4_CEC) || \ + ((AF) == GPIO_AF5_SPI3) || ((AF) == GPIO_AF6_SPI2) || \ + ((AF) == GPIO_AF6_SPI4) || ((AF) == GPIO_AF7_UART5) || \ + ((AF) == GPIO_AF7_SPI2) || ((AF) == GPIO_AF7_SPI3) || \ + ((AF) == GPIO_AF7_SPDIFRX) || ((AF) == GPIO_AF8_SPDIFRX) || \ + ((AF) == GPIO_AF8_SAI2) || ((AF) == GPIO_AF9_QSPI) || \ + ((AF) == GPIO_AF10_SAI2) || ((AF) == GPIO_AF10_QSPI)) + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------------------- STM32F469xx/STM32F479xx --------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_GPIO_AF(AF) (((AF) == GPIO_AF0_RTC_50Hz) || ((AF) == GPIO_AF9_TIM14) || \ + ((AF) == GPIO_AF0_MCO) || ((AF) == GPIO_AF0_TAMPER) || \ + ((AF) == GPIO_AF0_SWJ) || ((AF) == GPIO_AF0_TRACE) || \ + ((AF) == GPIO_AF1_TIM1) || ((AF) == GPIO_AF1_TIM2) || \ + ((AF) == GPIO_AF2_TIM3) || ((AF) == GPIO_AF2_TIM4) || \ + ((AF) == GPIO_AF2_TIM5) || ((AF) == GPIO_AF3_TIM8) || \ + ((AF) == GPIO_AF4_I2C1) || ((AF) == GPIO_AF4_I2C2) || \ + ((AF) == GPIO_AF4_I2C3) || ((AF) == GPIO_AF5_SPI1) || \ + ((AF) == GPIO_AF5_SPI2) || ((AF) == GPIO_AF9_TIM13) || \ + ((AF) == GPIO_AF6_SPI3) || ((AF) == GPIO_AF9_TIM12) || \ + ((AF) == GPIO_AF7_USART1) || ((AF) == GPIO_AF7_USART2) || \ + ((AF) == GPIO_AF7_USART3) || ((AF) == GPIO_AF8_UART4) || \ + ((AF) == GPIO_AF8_UART5) || ((AF) == GPIO_AF8_USART6) || \ + ((AF) == GPIO_AF9_CAN1) || ((AF) == GPIO_AF9_CAN2) || \ + ((AF) == GPIO_AF10_OTG_FS) || ((AF) == GPIO_AF10_OTG_HS) || \ + ((AF) == GPIO_AF11_ETH) || ((AF) == GPIO_AF12_OTG_HS_FS) || \ + ((AF) == GPIO_AF12_SDIO) || ((AF) == GPIO_AF13_DCMI) || \ + ((AF) == GPIO_AF15_EVENTOUT) || ((AF) == GPIO_AF5_SPI4) || \ + ((AF) == GPIO_AF5_SPI5) || ((AF) == GPIO_AF5_SPI6) || \ + ((AF) == GPIO_AF8_UART7) || ((AF) == GPIO_AF8_UART8) || \ + ((AF) == GPIO_AF12_FMC) || ((AF) == GPIO_AF6_SAI1) || \ + ((AF) == GPIO_AF14_LTDC) || ((AF) == GPIO_AF13_DSI) || \ + ((AF) == GPIO_AF9_QSPI) || ((AF) == GPIO_AF10_QSPI)) + +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx-----------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_GPIO_AF(AF) (((AF) < 16U) && ((AF) != 11U) && ((AF) != 14U) && ((AF) != 13U)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/*----------------------------------------------------------------------------*/ + +/*------------------STM32F413xx/STM32F423xx-----------------------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_GPIO_AF(AF) (((AF) < 16U) && ((AF) != 13U)) +#endif /* STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup GPIOEx_Private_Functions GPIO Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_GPIO_EX_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h new file mode 100644 index 0000000..d97f255 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h @@ -0,0 +1,427 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr.h + * @author MCD Application Team + * @brief Header file of PWR HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_PWR_H +#define __STM32F4xx_HAL_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWR + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Types PWR Exported Types + * @{ + */ + +/** + * @brief PWR PVD configuration structure definition + */ +typedef struct +{ + uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level. + This parameter can be a value of @ref PWR_PVD_detection_level */ + + uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. + This parameter can be a value of @ref PWR_PVD_Mode */ +}PWR_PVDTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWR_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins + * @{ + */ +#define PWR_WAKEUP_PIN1 0x00000100U +/** + * @} + */ + +/** @defgroup PWR_PVD_detection_level PWR PVD detection level + * @{ + */ +#define PWR_PVDLEVEL_0 PWR_CR_PLS_LEV0 +#define PWR_PVDLEVEL_1 PWR_CR_PLS_LEV1 +#define PWR_PVDLEVEL_2 PWR_CR_PLS_LEV2 +#define PWR_PVDLEVEL_3 PWR_CR_PLS_LEV3 +#define PWR_PVDLEVEL_4 PWR_CR_PLS_LEV4 +#define PWR_PVDLEVEL_5 PWR_CR_PLS_LEV5 +#define PWR_PVDLEVEL_6 PWR_CR_PLS_LEV6 +#define PWR_PVDLEVEL_7 PWR_CR_PLS_LEV7/* External input analog voltage + (Compare internally to VREFINT) */ +/** + * @} + */ + +/** @defgroup PWR_PVD_Mode PWR PVD Mode + * @{ + */ +#define PWR_PVD_MODE_NORMAL 0x00000000U /*!< basic mode is used */ +#define PWR_PVD_MODE_IT_RISING 0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_IT_FALLING 0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_IT_RISING_FALLING 0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING 0x00020001U /*!< Event Mode with Rising edge trigger detection */ +#define PWR_PVD_MODE_EVENT_FALLING 0x00020002U /*!< Event Mode with Falling edge trigger detection */ +#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */ +/** + * @} + */ + + +/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in SLEEP/STOP mode + * @{ + */ +#define PWR_MAINREGULATOR_ON 0x00000000U +#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS +/** + * @} + */ + +/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry + * @{ + */ +#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01) +#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry + * @{ + */ +#define PWR_STOPENTRY_WFI ((uint8_t)0x01) +#define PWR_STOPENTRY_WFE ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup PWR_Flag PWR Flag + * @{ + */ +#define PWR_FLAG_WU PWR_CSR_WUF +#define PWR_FLAG_SB PWR_CSR_SBF +#define PWR_FLAG_PVDO PWR_CSR_PVDO +#define PWR_FLAG_BRR PWR_CSR_BRR +#define PWR_FLAG_VOSRDY PWR_CSR_VOSRDY +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_Exported_Macro PWR Exported Macro + * @{ + */ + +/** @brief Check PWR flag is set or not. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event + * was received from the WKUP pin or from the RTC alarm (Alarm A + * or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup. + * An additional wakeup event is detected if the WKUP pin is enabled + * (by setting the EWUP bit) when the WKUP pin level is already high. + * @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was + * resumed from StandBy mode. + * @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled + * by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode + * For this reason, this bit is equal to 0 after Standby or reset + * until the PVDE bit is set. + * @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset + * when the device wakes up from Standby mode or by a system reset + * or power reset. + * @arg PWR_FLAG_VOSRDY: This flag indicates that the Regulator voltage + * scaling output selection is ready. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the PWR's pending flags. + * @param __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 + */ +#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |= (__FLAG__) << 2U) + +/** + * @brief Enable the PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_IT() (EXTI->IMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable the PVD EXTI Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_IT() (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Enable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() (EXTI->EMR |= (PWR_EXTI_LINE_PVD)) + +/** + * @brief Disable event on PVD Exti Line 16. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD)) + +/** + * @brief Enable the PVD Extended Interrupt Rising Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Disable the PVD Extended Interrupt Rising Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) + +/** + * @brief Enable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief Disable the PVD Extended Interrupt Falling Trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) + + +/** + * @brief PVD EXTI line configuration: set rising & falling edge trigger. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() do{__HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\ + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\ + }while(0U) + +/** + * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. + * This parameter can be: + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() do{__HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\ + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\ + }while(0U) + +/** + * @brief checks whether the specified PVD Exti interrupt flag is set or not. + * @retval EXTI PVD Line Status. + */ +#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) + +/** + * @brief Clear the PVD Exti flag. + * @retval None. + */ +#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) + +/** + * @brief Generates a Software interrupt on PVD EXTI line. + * @retval None + */ +#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD)) + +/** + * @} + */ + +/* Include PWR HAL Extension module */ +#include "stm32f4xx_hal_pwr_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +void HAL_PWR_DeInit(void); +void HAL_PWR_EnableBkUpAccess(void); +void HAL_PWR_DisableBkUpAccess(void); +/** + * @} + */ + +/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @{ + */ +/* Peripheral Control functions **********************************************/ +/* PVD configuration */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); +void HAL_PWR_EnablePVD(void); +void HAL_PWR_DisablePVD(void); + +/* WakeUp pins configuration */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); + +/* Low Power modes entry */ +void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); +void HAL_PWR_EnterSTANDBYMode(void); + +/* Power PVD IRQ Handler */ +void HAL_PWR_PVD_IRQHandler(void); +void HAL_PWR_PVDCallback(void); + +/* Cortex System Control functions *******************************************/ +void HAL_PWR_EnableSleepOnExit(void); +void HAL_PWR_DisableSleepOnExit(void); +void HAL_PWR_EnableSEVOnPend(void); +void HAL_PWR_DisableSEVOnPend(void); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup PWR_Private_Constants PWR Private Constants + * @{ + */ + +/** @defgroup PWR_PVD_EXTI_Line PWR PVD EXTI Line + * @{ + */ +#define PWR_EXTI_LINE_PVD ((uint32_t)EXTI_IMR_MR16) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ +/** + * @} + */ + +/** @defgroup PWR_register_alias_address PWR Register alias address + * @{ + */ +/* ------------- PWR registers bit address in the alias region ---------------*/ +#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) +#define PWR_CR_OFFSET 0x00U +#define PWR_CSR_OFFSET 0x04U +#define PWR_CR_OFFSET_BB (PWR_OFFSET + PWR_CR_OFFSET) +#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET) +/** + * @} + */ + +/** @defgroup PWR_CR_register_alias PWR CR Register alias address + * @{ + */ +/* --- CR Register ---*/ +/* Alias word address of DBP bit */ +#define DBP_BIT_NUMBER PWR_CR_DBP_Pos +#define CR_DBP_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U)) + +/* Alias word address of PVDE bit */ +#define PVDE_BIT_NUMBER PWR_CR_PVDE_Pos +#define CR_PVDE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)) + +/* Alias word address of VOS bit */ +#define VOS_BIT_NUMBER PWR_CR_VOS_Pos +#define CR_VOS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (VOS_BIT_NUMBER * 4U)) +/** + * @} + */ + +/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address + * @{ + */ +/* --- CSR Register ---*/ +/* Alias word address of EWUP bit */ +#define EWUP_BIT_NUMBER PWR_CSR_EWUP_Pos +#define CSR_EWUP_BB (PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (EWUP_BIT_NUMBER * 4U)) +/** + * @} + */ + +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PWR_Private_Macros PWR Private Macros + * @{ + */ + +/** @defgroup PWR_IS_PWR_Definitions PWR Private macros to check input parameters + * @{ + */ +#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ + ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ + ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ + ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) +#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ + ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ + ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ + ((MODE) == PWR_PVD_MODE_NORMAL)) +#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) +#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) +#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_HAL_PWR_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h new file mode 100644 index 0000000..57fd4d9 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h @@ -0,0 +1,340 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr_ex.h + * @author MCD Application Team + * @brief Header file of PWR HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_PWR_EX_H +#define __STM32F4xx_HAL_PWR_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup PWREx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Constants PWREx Exported Constants + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** @defgroup PWREx_Regulator_state_in_UnderDrive_mode PWREx Regulator state in UnderDrive mode + * @{ + */ +#define PWR_MAINREGULATOR_UNDERDRIVE_ON PWR_CR_MRUDS +#define PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON ((uint32_t)(PWR_CR_LPDS | PWR_CR_LPUDS)) +/** + * @} + */ + +/** @defgroup PWREx_Over_Under_Drive_Flag PWREx Over Under Drive Flag + * @{ + */ +#define PWR_FLAG_ODRDY PWR_CSR_ODRDY +#define PWR_FLAG_ODSWRDY PWR_CSR_ODSWRDY +#define PWR_FLAG_UDRDY PWR_CSR_UDSWRDY +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +/** @defgroup PWREx_Regulator_Voltage_Scale PWREx Regulator Voltage Scale + * @{ + */ +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK = 168 MHz. */ +#define PWR_REGULATOR_VOLTAGE_SCALE2 0x00000000U /* Scale 2 mode: the maximum value of fHCLK = 144 MHz. */ +#else +#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR_VOS /* Scale 1 mode(default value at reset): the maximum value of fHCLK is 168 MHz. It can be extended to + 180 MHz by activating the over-drive mode. */ +#define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_CR_VOS_1 /* Scale 2 mode: the maximum value of fHCLK is 144 MHz. It can be extended to + 168 MHz by activating the over-drive mode. */ +#define PWR_REGULATOR_VOLTAGE_SCALE3 PWR_CR_VOS_0 /* Scale 3 mode: the maximum value of fHCLK is 120 MHz. */ +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ +/** + * @} + */ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup PWREx_WakeUp_Pins PWREx WakeUp Pins + * @{ + */ +#define PWR_WAKEUP_PIN2 0x00000080U +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define PWR_WAKEUP_PIN3 0x00000040U +#endif /* STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Zx || STM32F412Vx || \ + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/** + * @} + */ +#endif /* STM32F410xx || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Constants PWREx Exported Constants + * @{ + */ + +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +/** @brief macros configure the main internal regulator output voltage. + * @param __REGULATOR__ specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption when the device does + * not operate at the maximum frequency (refer to the datasheets for more details). + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * @retval None + */ +#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \ + UNUSED(tmpreg); \ + } while(0U) +#else +/** @brief macros configure the main internal regulator output voltage. + * @param __REGULATOR__ specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption when the device does + * not operate at the maximum frequency (refer to the datasheets for more details). + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode + * @retval None + */ +#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__)); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS); \ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macros to enable or disable the Over drive mode. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_OVERDRIVE_ENABLE() (*(__IO uint32_t *) CR_ODEN_BB = ENABLE) +#define __HAL_PWR_OVERDRIVE_DISABLE() (*(__IO uint32_t *) CR_ODEN_BB = DISABLE) + +/** @brief Macros to enable or disable the Over drive switching. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_OVERDRIVESWITCHING_ENABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = ENABLE) +#define __HAL_PWR_OVERDRIVESWITCHING_DISABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = DISABLE) + +/** @brief Macros to enable or disable the Under drive mode. + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main regulator or the low power regulator + * is in low voltage mode. + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + */ +#define __HAL_PWR_UNDERDRIVE_ENABLE() (PWR->CR |= (uint32_t)PWR_CR_UDEN) +#define __HAL_PWR_UNDERDRIVE_DISABLE() (PWR->CR &= (uint32_t)(~PWR_CR_UDEN)) + +/** @brief Check PWR flag is set or not. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg PWR_FLAG_ODRDY: This flag indicates that the Over-drive mode + * is ready + * @arg PWR_FLAG_ODSWRDY: This flag indicates that the Over-drive mode + * switching is ready + * @arg PWR_FLAG_UDRDY: This flag indicates that the Under-drive mode + * is enabled in Stop mode + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_PWR_GET_ODRUDR_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clear the Under-Drive Ready flag. + * @note These macros can be used only for STM32F42xx/STM3243xx devices. + */ +#define __HAL_PWR_CLEAR_ODRUDR_FLAG() (PWR->CSR |= PWR_FLAG_UDRDY) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @addtogroup PWREx_Exported_Functions_Group1 + * @{ + */ +void HAL_PWREx_EnableFlashPowerDown(void); +void HAL_PWREx_DisableFlashPowerDown(void); +HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void); +HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void); +uint32_t HAL_PWREx_GetVoltageRange(void); +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling); + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\ + defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +void HAL_PWREx_EnableMainRegulatorLowVoltage(void); +void HAL_PWREx_DisableMainRegulatorLowVoltage(void); +void HAL_PWREx_EnableLowRegulatorLowVoltage(void); +void HAL_PWREx_DisableLowRegulatorLowVoltage(void); +#endif /* STM32F410xx || STM32F401xC || STM32F401xE || STM32F411xE || STM32F412Zx || STM32F412Vx ||\ + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void); +HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void); +HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup PWREx_Private_Constants PWREx Private Constants + * @{ + */ + +/** @defgroup PWREx_register_alias_address PWREx Register alias address + * @{ + */ +/* ------------- PWR registers bit address in the alias region ---------------*/ +/* --- CR Register ---*/ +/* Alias word address of FPDS bit */ +#define FPDS_BIT_NUMBER PWR_CR_FPDS_Pos +#define CR_FPDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (FPDS_BIT_NUMBER * 4U)) + +/* Alias word address of ODEN bit */ +#define ODEN_BIT_NUMBER PWR_CR_ODEN_Pos +#define CR_ODEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODEN_BIT_NUMBER * 4U)) + +/* Alias word address of ODSWEN bit */ +#define ODSWEN_BIT_NUMBER PWR_CR_ODSWEN_Pos +#define CR_ODSWEN_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODSWEN_BIT_NUMBER * 4U)) + +/* Alias word address of MRLVDS bit */ +#define MRLVDS_BIT_NUMBER PWR_CR_MRLVDS_Pos +#define CR_MRLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (MRLVDS_BIT_NUMBER * 4U)) + +/* Alias word address of LPLVDS bit */ +#define LPLVDS_BIT_NUMBER PWR_CR_LPLVDS_Pos +#define CR_LPLVDS_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPLVDS_BIT_NUMBER * 4U)) + + /** + * @} + */ + +/** @defgroup PWREx_CSR_register_alias PWRx CSR Register alias address + * @{ + */ +/* --- CSR Register ---*/ +/* Alias word address of BRE bit */ +#define BRE_BIT_NUMBER PWR_CSR_BRE_Pos +#define CSR_BRE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (BRE_BIT_NUMBER * 4U)) + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup PWREx_Private_Macros PWREx Private Macros + * @{ + */ + +/** @defgroup PWREx_IS_PWR_Definitions PWREx Private macros to check input parameters + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_PWR_REGULATOR_UNDERDRIVE(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_UNDERDRIVE_ON) || \ + ((REGULATOR) == PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) +#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2)) +#else +#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \ + ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE3)) +#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ + +#if defined(STM32F446xx) +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2)) +#elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) || \ + ((PIN) == PWR_WAKEUP_PIN3)) +#else +#define IS_PWR_WAKEUP_PIN(PIN) ((PIN) == PWR_WAKEUP_PIN1) +#endif /* STM32F446xx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32F4xx_HAL_PWR_EX_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h new file mode 100644 index 0000000..dcf5814 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h @@ -0,0 +1,1459 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc.h + * @author MCD Application Team + * @brief Header file of RCC HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_RCC_H +#define __STM32F4xx_HAL_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/* Include RCC HAL Extended module */ +/* (include on top of file since RCC structures are defined in extended file) */ +#include "stm32f4xx_hal_rcc_ex.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCC + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup RCC_Exported_Types RCC Exported Types + * @{ + */ + +/** + * @brief RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition + */ +typedef struct +{ + uint32_t OscillatorType; /*!< The oscillators to be configured. + This parameter can be a value of @ref RCC_Oscillator_Type */ + + uint32_t HSEState; /*!< The new state of the HSE. + This parameter can be a value of @ref RCC_HSE_Config */ + + uint32_t LSEState; /*!< The new state of the LSE. + This parameter can be a value of @ref RCC_LSE_Config */ + + uint32_t HSIState; /*!< The new state of the HSI. + This parameter can be a value of @ref RCC_HSI_Config */ + + uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT). + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */ + + uint32_t LSIState; /*!< The new state of the LSI. + This parameter can be a value of @ref RCC_LSI_Config */ + + RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */ +}RCC_OscInitTypeDef; + +/** + * @brief RCC System, AHB and APB busses clock configuration structure definition + */ +typedef struct +{ + uint32_t ClockType; /*!< The clock to be configured. + This parameter can be a value of @ref RCC_System_Clock_Type */ + + uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock. + This parameter can be a value of @ref RCC_System_Clock_Source */ + + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_AHB_Clock_Source */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */ + +}RCC_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_Oscillator_Type Oscillator Type + * @{ + */ +#define RCC_OSCILLATORTYPE_NONE 0x00000000U +#define RCC_OSCILLATORTYPE_HSE 0x00000001U +#define RCC_OSCILLATORTYPE_HSI 0x00000002U +#define RCC_OSCILLATORTYPE_LSE 0x00000004U +#define RCC_OSCILLATORTYPE_LSI 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_HSE_Config HSE Config + * @{ + */ +#define RCC_HSE_OFF 0x00000000U +#define RCC_HSE_ON RCC_CR_HSEON +#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) +/** + * @} + */ + +/** @defgroup RCC_LSE_Config LSE Config + * @{ + */ +#define RCC_LSE_OFF 0x00000000U +#define RCC_LSE_ON RCC_BDCR_LSEON +#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) +/** + * @} + */ + +/** @defgroup RCC_HSI_Config HSI Config + * @{ + */ +#define RCC_HSI_OFF ((uint8_t)0x00) +#define RCC_HSI_ON ((uint8_t)0x01) + +#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */ +/** + * @} + */ + +/** @defgroup RCC_LSI_Config LSI Config + * @{ + */ +#define RCC_LSI_OFF ((uint8_t)0x00) +#define RCC_LSI_ON ((uint8_t)0x01) +/** + * @} + */ + +/** @defgroup RCC_PLL_Config PLL Config + * @{ + */ +#define RCC_PLL_NONE ((uint8_t)0x00) +#define RCC_PLL_OFF ((uint8_t)0x01) +#define RCC_PLL_ON ((uint8_t)0x02) +/** + * @} + */ + +/** @defgroup RCC_PLLP_Clock_Divider PLLP Clock Divider + * @{ + */ +#define RCC_PLLP_DIV2 0x00000002U +#define RCC_PLLP_DIV4 0x00000004U +#define RCC_PLLP_DIV6 0x00000006U +#define RCC_PLLP_DIV8 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_PLL_Clock_Source PLL Clock Source + * @{ + */ +#define RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI +#define RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Type System Clock Type + * @{ + */ +#define RCC_CLOCKTYPE_SYSCLK 0x00000001U +#define RCC_CLOCKTYPE_HCLK 0x00000002U +#define RCC_CLOCKTYPE_PCLK1 0x00000004U +#define RCC_CLOCKTYPE_PCLK2 0x00000008U +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source System Clock Source + * @note The RCC_SYSCLKSOURCE_PLLRCLK parameter is available only for + * STM32F446xx devices. + * @{ + */ +#define RCC_SYSCLKSOURCE_HSI RCC_CFGR_SW_HSI +#define RCC_SYSCLKSOURCE_HSE RCC_CFGR_SW_HSE +#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL +#define RCC_SYSCLKSOURCE_PLLRCLK ((uint32_t)(RCC_CFGR_SW_0 | RCC_CFGR_SW_1)) +/** + * @} + */ + +/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status + * @note The RCC_SYSCLKSOURCE_STATUS_PLLRCLK parameter is available only for + * STM32F446xx devices. + * @{ + */ +#define RCC_SYSCLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ +#define RCC_SYSCLKSOURCE_STATUS_PLLRCLK ((uint32_t)(RCC_CFGR_SWS_0 | RCC_CFGR_SWS_1)) /*!< PLLR used as system clock */ +/** + * @} + */ + +/** @defgroup RCC_AHB_Clock_Source AHB Clock Source + * @{ + */ +#define RCC_SYSCLK_DIV1 RCC_CFGR_HPRE_DIV1 +#define RCC_SYSCLK_DIV2 RCC_CFGR_HPRE_DIV2 +#define RCC_SYSCLK_DIV4 RCC_CFGR_HPRE_DIV4 +#define RCC_SYSCLK_DIV8 RCC_CFGR_HPRE_DIV8 +#define RCC_SYSCLK_DIV16 RCC_CFGR_HPRE_DIV16 +#define RCC_SYSCLK_DIV64 RCC_CFGR_HPRE_DIV64 +#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 +#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 +#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 +/** + * @} + */ + +/** @defgroup RCC_APB1_APB2_Clock_Source APB1/APB2 Clock Source + * @{ + */ +#define RCC_HCLK_DIV1 RCC_CFGR_PPRE1_DIV1 +#define RCC_HCLK_DIV2 RCC_CFGR_PPRE1_DIV2 +#define RCC_HCLK_DIV4 RCC_CFGR_PPRE1_DIV4 +#define RCC_HCLK_DIV8 RCC_CFGR_PPRE1_DIV8 +#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 +/** + * @} + */ + +/** @defgroup RCC_RTC_Clock_Source RTC Clock Source + * @{ + */ +#define RCC_RTCCLKSOURCE_NO_CLK 0x00000000U +#define RCC_RTCCLKSOURCE_LSE 0x00000100U +#define RCC_RTCCLKSOURCE_LSI 0x00000200U +#define RCC_RTCCLKSOURCE_HSE_DIVX 0x00000300U +#define RCC_RTCCLKSOURCE_HSE_DIV2 0x00020300U +#define RCC_RTCCLKSOURCE_HSE_DIV3 0x00030300U +#define RCC_RTCCLKSOURCE_HSE_DIV4 0x00040300U +#define RCC_RTCCLKSOURCE_HSE_DIV5 0x00050300U +#define RCC_RTCCLKSOURCE_HSE_DIV6 0x00060300U +#define RCC_RTCCLKSOURCE_HSE_DIV7 0x00070300U +#define RCC_RTCCLKSOURCE_HSE_DIV8 0x00080300U +#define RCC_RTCCLKSOURCE_HSE_DIV9 0x00090300U +#define RCC_RTCCLKSOURCE_HSE_DIV10 0x000A0300U +#define RCC_RTCCLKSOURCE_HSE_DIV11 0x000B0300U +#define RCC_RTCCLKSOURCE_HSE_DIV12 0x000C0300U +#define RCC_RTCCLKSOURCE_HSE_DIV13 0x000D0300U +#define RCC_RTCCLKSOURCE_HSE_DIV14 0x000E0300U +#define RCC_RTCCLKSOURCE_HSE_DIV15 0x000F0300U +#define RCC_RTCCLKSOURCE_HSE_DIV16 0x00100300U +#define RCC_RTCCLKSOURCE_HSE_DIV17 0x00110300U +#define RCC_RTCCLKSOURCE_HSE_DIV18 0x00120300U +#define RCC_RTCCLKSOURCE_HSE_DIV19 0x00130300U +#define RCC_RTCCLKSOURCE_HSE_DIV20 0x00140300U +#define RCC_RTCCLKSOURCE_HSE_DIV21 0x00150300U +#define RCC_RTCCLKSOURCE_HSE_DIV22 0x00160300U +#define RCC_RTCCLKSOURCE_HSE_DIV23 0x00170300U +#define RCC_RTCCLKSOURCE_HSE_DIV24 0x00180300U +#define RCC_RTCCLKSOURCE_HSE_DIV25 0x00190300U +#define RCC_RTCCLKSOURCE_HSE_DIV26 0x001A0300U +#define RCC_RTCCLKSOURCE_HSE_DIV27 0x001B0300U +#define RCC_RTCCLKSOURCE_HSE_DIV28 0x001C0300U +#define RCC_RTCCLKSOURCE_HSE_DIV29 0x001D0300U +#define RCC_RTCCLKSOURCE_HSE_DIV30 0x001E0300U +#define RCC_RTCCLKSOURCE_HSE_DIV31 0x001F0300U +/** + * @} + */ + +/** @defgroup RCC_MCO_Index MCO Index + * @{ + */ +#define RCC_MCO1 0x00000000U +#define RCC_MCO2 0x00000001U +/** + * @} + */ + +/** @defgroup RCC_MCO1_Clock_Source MCO1 Clock Source + * @{ + */ +#define RCC_MCO1SOURCE_HSI 0x00000000U +#define RCC_MCO1SOURCE_LSE RCC_CFGR_MCO1_0 +#define RCC_MCO1SOURCE_HSE RCC_CFGR_MCO1_1 +#define RCC_MCO1SOURCE_PLLCLK RCC_CFGR_MCO1 +/** + * @} + */ + +/** @defgroup RCC_MCOx_Clock_Prescaler MCOx Clock Prescaler + * @{ + */ +#define RCC_MCODIV_1 0x00000000U +#define RCC_MCODIV_2 RCC_CFGR_MCO1PRE_2 +#define RCC_MCODIV_3 ((uint32_t)RCC_CFGR_MCO1PRE_0 | RCC_CFGR_MCO1PRE_2) +#define RCC_MCODIV_4 ((uint32_t)RCC_CFGR_MCO1PRE_1 | RCC_CFGR_MCO1PRE_2) +#define RCC_MCODIV_5 RCC_CFGR_MCO1PRE +/** + * @} + */ + +/** @defgroup RCC_Interrupt Interrupts + * @{ + */ +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_LSERDY ((uint8_t)0x02) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define RCC_IT_PLLI2SRDY ((uint8_t)0x20) +#define RCC_IT_CSS ((uint8_t)0x80) +/** + * @} + */ + +/** @defgroup RCC_Flag Flags + * Elements values convention: 0XXYYYYYb + * - YYYYY : Flag position in the register + * - 0XX : Register index + * - 01: CR register + * - 10: BDCR register + * - 11: CSR register + * @{ + */ +/* Flags in the CR register */ +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_PLLI2SRDY ((uint8_t)0x3B) + +/* Flags in the BDCR register */ +#define RCC_FLAG_LSERDY ((uint8_t)0x41) + +/* Flags in the CSR register */ +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_BORRST ((uint8_t)0x79) +#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 RCC_FLAG_LPWRRST ((uint8_t)0x7F) +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCC_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOAEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOHEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOAEN)) +#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOBEN)) +#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOCEN)) +#define __HAL_RCC_GPIOH_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOHEN)) +#define __HAL_RCC_DMA1_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA1EN)) +#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA2EN)) +/** + * @} + */ + +/** @defgroup RCC_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOA_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOAEN)) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOBEN)) != RESET) +#define __HAL_RCC_GPIOC_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOCEN)) != RESET) +#define __HAL_RCC_GPIOH_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOHEN)) != RESET) +#define __HAL_RCC_DMA1_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA1EN)) != RESET) +#define __HAL_RCC_DMA2_IS_CLK_ENABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA2EN)) != RESET) + +#define __HAL_RCC_GPIOA_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOAEN)) == RESET) +#define __HAL_RCC_GPIOB_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOBEN)) == RESET) +#define __HAL_RCC_GPIOC_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOCEN)) == RESET) +#define __HAL_RCC_GPIOH_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_GPIOHEN)) == RESET) +#define __HAL_RCC_DMA1_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA1EN)) == RESET) +#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHB1ENR &(RCC_AHB1ENR_DMA2EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_WWDG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_PWR_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN)) +#define __HAL_RCC_WWDG_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN)) +#define __HAL_RCC_SPI2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN)) +#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN)) +#define __HAL_RCC_I2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN)) +#define __HAL_RCC_I2C2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN)) +#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET) +#define __HAL_RCC_WWDG_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET) +#define __HAL_RCC_SPI2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET) +#define __HAL_RCC_USART2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET) +#define __HAL_RCC_I2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET) +#define __HAL_RCC_I2C2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET) +#define __HAL_RCC_PWR_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET) + +#define __HAL_RCC_TIM5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET) +#define __HAL_RCC_WWDG_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET) +#define __HAL_RCC_SPI2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET) +#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET) +#define __HAL_RCC_I2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET) +#define __HAL_RCC_I2C2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET) +#define __HAL_RCC_PWR_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SYSCFG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM9_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM11_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN)) +#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN)) +#define __HAL_RCC_USART6_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART6EN)) +#define __HAL_RCC_ADC1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN)) +#define __HAL_RCC_SPI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN)) +#define __HAL_RCC_SYSCFG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SYSCFGEN)) +#define __HAL_RCC_TIM9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN)) +#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET) +#define __HAL_RCC_USART1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET) +#define __HAL_RCC_USART6_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) != RESET) +#define __HAL_RCC_ADC1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET) +#define __HAL_RCC_SPI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET) +#define __HAL_RCC_SYSCFG_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) != RESET) +#define __HAL_RCC_TIM9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET) +#define __HAL_RCC_TIM11_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET) + +#define __HAL_RCC_TIM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET) +#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET) +#define __HAL_RCC_USART6_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART6EN)) == RESET) +#define __HAL_RCC_ADC1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET) +#define __HAL_RCC_SPI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET) +#define __HAL_RCC_SYSCFG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SYSCFGEN)) == RESET) +#define __HAL_RCC_TIM9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET) +#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOCRST)) +#define __HAL_RCC_GPIOH_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOHRST)) +#define __HAL_RCC_DMA1_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA1RST)) +#define __HAL_RCC_DMA2_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA2RST)) + +#define __HAL_RCC_AHB1_RELEASE_RESET() (RCC->AHB1RSTR = 0x00U) +#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOARST)) +#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOBRST)) +#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOCRST)) +#define __HAL_RCC_GPIOH_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOHRST)) +#define __HAL_RCC_DMA1_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA1RST)) +#define __HAL_RCC_DMA2_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA2RST)) +/** + * @} + */ + +/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_WWDG_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_SPI2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_I2C2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00U) +#define __HAL_RCC_TIM5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST)) +#define __HAL_RCC_WWDG_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST)) +#define __HAL_RCC_SPI2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST)) +#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST)) +#define __HAL_RCC_I2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST)) +#define __HAL_RCC_I2C2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST)) +#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST)) +/** + * @} + */ + +/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_USART6_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART6RST)) +#define __HAL_RCC_ADC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADCRST)) +#define __HAL_RCC_SPI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_SYSCFG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00U) +#define __HAL_RCC_TIM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST)) +#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST)) +#define __HAL_RCC_USART6_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART6RST)) +#define __HAL_RCC_ADC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADCRST)) +#define __HAL_RCC_SPI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST)) +#define __HAL_RCC_SYSCFG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SYSCFGRST)) +#define __HAL_RCC_TIM9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST)) +#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST)) +/** + * @} + */ + +/** @defgroup RCC_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOALPEN)) +#define __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOBLPEN)) +#define __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOCLPEN)) +#define __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOHLPEN)) +#define __HAL_RCC_DMA1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA1LPEN)) +#define __HAL_RCC_DMA2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA2LPEN)) + +#define __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOALPEN)) +#define __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOBLPEN)) +#define __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOCLPEN)) +#define __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOHLPEN)) +#define __HAL_RCC_DMA1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA1LPEN)) +#define __HAL_RCC_DMA2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA2LPEN)) +/** + * @} + */ + +/** @defgroup RCC_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM5LPEN)) +#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_WWDGLPEN)) +#define __HAL_RCC_SPI2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI2LPEN)) +#define __HAL_RCC_USART2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART2LPEN)) +#define __HAL_RCC_I2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C1LPEN)) +#define __HAL_RCC_I2C2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C2LPEN)) +#define __HAL_RCC_PWR_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_PWRLPEN)) + +#define __HAL_RCC_TIM5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM5LPEN)) +#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_WWDGLPEN)) +#define __HAL_RCC_SPI2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI2LPEN)) +#define __HAL_RCC_USART2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART2LPEN)) +#define __HAL_RCC_I2C1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C1LPEN)) +#define __HAL_RCC_I2C2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C2LPEN)) +#define __HAL_RCC_PWR_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_PWRLPEN)) +/** + * @} + */ + +/** @defgroup RCC_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM1LPEN)) +#define __HAL_RCC_USART1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_USART1LPEN)) +#define __HAL_RCC_USART6_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_USART6LPEN)) +#define __HAL_RCC_ADC1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC1LPEN)) +#define __HAL_RCC_SPI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI1LPEN)) +#define __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SYSCFGLPEN)) +#define __HAL_RCC_TIM9_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM9LPEN)) +#define __HAL_RCC_TIM11_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM11LPEN)) + +#define __HAL_RCC_TIM1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM1LPEN)) +#define __HAL_RCC_USART1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_USART1LPEN)) +#define __HAL_RCC_USART6_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_USART6LPEN)) +#define __HAL_RCC_ADC1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC1LPEN)) +#define __HAL_RCC_SPI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI1LPEN)) +#define __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SYSCFGLPEN)) +#define __HAL_RCC_TIM9_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM9LPEN)) +#define __HAL_RCC_TIM11_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM11LPEN)) +/** + * @} + */ + +/** @defgroup RCC_HSI_Configuration HSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal High Speed oscillator (HSI). + * @note The HSI is stopped by hardware when entering STOP and STANDBY modes. + * It is used (enabled by hardware) as system clock source after startup + * from Reset, wake-up from STOP and STANDBY mode, or in case of failure + * of the HSE used directly or indirectly as system clock (if the Clock + * Security System CSS is enabled). + * @note HSI can not be stopped if it is used as system clock source. In this case, + * you have to select another source of the system clock then stop the HSI. + * @note After enabling the HSI, the application software should wait on HSIRDY + * flag to be set indicating that HSI clock is stable and can be used as + * system clock source. + * This parameter can be: ENABLE or DISABLE. + * @note When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator + * clock cycles. + */ +#define __HAL_RCC_HSI_ENABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = ENABLE) +#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *) RCC_CR_HSION_BB = DISABLE) + +/** @brief Macro to adjust the Internal High Speed oscillator (HSI) calibration value. + * @note The calibration is used to compensate for the variations in voltage + * and temperature that influence the frequency of the internal HSI RC. + * @param __HSICalibrationValue__ specifies the calibration trimming value. + * (default is RCC_HSICALIBRATION_DEFAULT). + * This parameter must be a number between 0 and 0x1F. + */ +#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(__HSICalibrationValue__) (MODIFY_REG(RCC->CR,\ + RCC_CR_HSITRIM, (uint32_t)(__HSICalibrationValue__) << RCC_CR_HSITRIM_Pos)) +/** + * @} + */ + +/** @defgroup RCC_LSI_Configuration LSI Configuration + * @{ + */ + +/** @brief Macros to enable or disable the Internal Low Speed oscillator (LSI). + * @note After enabling the LSI, the application software should wait on + * LSIRDY flag to be set indicating that LSI clock is stable and can + * be used to clock the IWDG and/or the RTC. + * @note LSI can not be disabled if the IWDG is running. + * @note When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator + * clock cycles. + */ +#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = ENABLE) +#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *) RCC_CSR_LSION_BB = DISABLE) +/** + * @} + */ + +/** @defgroup RCC_HSE_Configuration HSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External High Speed oscillator (HSE). + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not supported by this macro. + * User should request a transition to HSE Off first and then HSE On or HSE Bypass. + * @note After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application + * software should wait on HSERDY flag to be set indicating that HSE clock + * is stable and can be used to clock the PLL and/or system clock. + * @note HSE state can not be changed if it is used directly or through the + * PLL as system clock. In this case, you have to select another source + * of the system clock then change the HSE state (ex. disable it). + * @note The HSE is stopped by hardware when entering STOP and STANDBY modes. + * @note This function reset the CSSON bit, so if the clock security system(CSS) + * was previously enabled you have to enable it again after calling this + * function. + * @param __STATE__ specifies the new state of the HSE. + * This parameter can be one of the following values: + * @arg RCC_HSE_OFF: turn OFF the HSE oscillator, HSERDY flag goes low after + * 6 HSE oscillator clock cycles. + * @arg RCC_HSE_ON: turn ON the HSE oscillator. + * @arg RCC_HSE_BYPASS: HSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_HSE_CONFIG(__STATE__) \ + do { \ + if ((__STATE__) == RCC_HSE_ON) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else if ((__STATE__) == RCC_HSE_BYPASS) \ + { \ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); \ + SET_BIT(RCC->CR, RCC_CR_HSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); \ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); \ + } \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCC_LSE_Configuration LSE Configuration + * @{ + */ + +/** + * @brief Macro to configure the External Low Speed oscillator (LSE). + * @note Transition LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro. + * User should request a transition to LSE Off first and then LSE On or LSE Bypass. + * @note As the LSE is in the Backup domain and write access is denied to + * this domain after reset, you have to enable write access using + * HAL_PWR_EnableBkUpAccess() function before to configure the LSE + * (to be done once after reset). + * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application + * software should wait on LSERDY flag to be set indicating that LSE clock + * is stable and can be used to clock the RTC. + * @param __STATE__ specifies the new state of the LSE. + * This parameter can be one of the following values: + * @arg RCC_LSE_OFF: turn OFF the LSE oscillator, LSERDY flag goes low after + * 6 LSE oscillator clock cycles. + * @arg RCC_LSE_ON: turn ON the LSE oscillator. + * @arg RCC_LSE_BYPASS: LSE oscillator bypassed with external clock. + */ +#define __HAL_RCC_LSE_CONFIG(__STATE__) \ + do { \ + if((__STATE__) == RCC_LSE_ON) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else if((__STATE__) == RCC_LSE_BYPASS) \ + { \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); \ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); \ + } \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCC_Internal_RTC_Clock_Configuration RTC Clock Configuration + * @{ + */ + +/** @brief Macros to enable or disable the RTC clock. + * @note These macros must be used only after the RTC clock source was selected. + */ +#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = ENABLE) +#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *) RCC_BDCR_RTCEN_BB = DISABLE) + +/** @brief Macros to configure the RTC clock (RTCCLK). + * @note As the RTC clock configuration bits are in the Backup domain and write + * access is denied to this domain after reset, you have to enable write + * access using the Power Backup Access macro before to configure + * the RTC clock source (to be done once after reset). + * @note Once the RTC clock is configured it can't be changed unless the + * Backup domain is reset using __HAL_RCC_BackupReset_RELEASE() macro, or by + * a Power On Reset (POR). + * @param __RTCCLKSource__ specifies the RTC clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK : No clock selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_LSE : LSE selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_LSI : LSI selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + * @note If the LSE or LSI is used as RTC clock source, the RTC continues to + * work in STOP and STANDBY modes, and can be used as wake-up source. + * However, when the HSE clock is used as RTC clock source, the RTC + * cannot be used in STOP and STANDBY modes. + * @note The maximum input clock frequency for RTC is 1MHz (when using HSE as + * RTC clock source). + */ +#define __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__) (((__RTCCLKSource__) & RCC_BDCR_RTCSEL) == RCC_BDCR_RTCSEL) ? \ + MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, ((__RTCCLKSource__) & 0xFFFFCFFU)) : CLEAR_BIT(RCC->CFGR, RCC_CFGR_RTCPRE) + +#define __HAL_RCC_RTC_CONFIG(__RTCCLKSource__) do { __HAL_RCC_RTC_CLKPRESCALER(__RTCCLKSource__); \ + RCC->BDCR |= ((__RTCCLKSource__) & 0x00000FFFU); \ + } while(0U) + +/** @brief Macro to get the RTC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + */ +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) + +/** + * @brief Get the RTC and HSE clock divider (RTCPRE). + * @retval Returned value can be one of the following values: + * @arg @ref RCC_RTCCLKSOURCE_HSE_DIVX HSE divided by X selected as RTC clock (X can be retrieved thanks to @ref __HAL_RCC_GET_RTC_HSE_PRESCALER() + */ +#define __HAL_RCC_GET_RTC_HSE_PRESCALER() (READ_BIT(RCC->CFGR, RCC_CFGR_RTCPRE) | RCC_BDCR_RTCSEL) + +/** @brief Macros to force or release the Backup domain reset. + * @note This function resets the RTC peripheral (including the backup registers) + * and the RTC clock source selection in RCC_CSR register. + * @note The BKPSRAM is not affected by this reset. + */ +#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = ENABLE) +#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *) RCC_BDCR_BDRST_BB = DISABLE) +/** + * @} + */ + +/** @defgroup RCC_PLL_Configuration PLL Configuration + * @{ + */ + +/** @brief Macros to enable or disable the main PLL. + * @note After enabling the main PLL, the application software should wait on + * PLLRDY flag to be set indicating that PLL clock is stable and can + * be used as system clock source. + * @note The main PLL can not be disabled if it is used as system clock source + * @note The main PLL is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = ENABLE) +#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLON_BB = DISABLE) + +/** @brief Macro to configure the PLL clock source. + * @note This function must be used only when the main PLL is disabled. + * @param __PLLSOURCE__ specifies the PLL entry clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLSOURCE_HSI: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * + */ +#define __HAL_RCC_PLL_PLLSOURCE_CONFIG(__PLLSOURCE__) MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, (__PLLSOURCE__)) + +/** @brief Macro to configure the PLL multiplication factor. + * @note This function must be used only when the main PLL is disabled. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * + */ +#define __HAL_RCC_PLL_PLLM_CONFIG(__PLLM__) MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, (__PLLM__)) +/** + * @} + */ + +/** @defgroup RCC_Get_Clock_source Get Clock source + * @{ + */ +/** + * @brief Macro to configure the system clock source. + * @param __RCC_SYSCLKSOURCE__ specifies the system clock source. + * This parameter can be one of the following values: + * - RCC_SYSCLKSOURCE_HSI: HSI oscillator is used as system clock source. + * - RCC_SYSCLKSOURCE_HSE: HSE oscillator is used as system clock source. + * - RCC_SYSCLKSOURCE_PLLCLK: PLL output is used as system clock source. + * - RCC_SYSCLKSOURCE_PLLRCLK: PLLR output is used as system clock source. This + * parameter is available only for STM32F446xx devices. + */ +#define __HAL_RCC_SYSCLK_CONFIG(__RCC_SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__RCC_SYSCLKSOURCE__)) + +/** @brief Macro to get the clock source used as system clock. + * @retval The clock source used as system clock. The returned value can be one + * of the following: + * - RCC_SYSCLKSOURCE_STATUS_HSI: HSI used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_HSE: HSE used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_PLLCLK: PLL used as system clock. + * - RCC_SYSCLKSOURCE_STATUS_PLLRCLK: PLLR used as system clock. This parameter + * is available only for STM32F446xx devices. + */ +#define __HAL_RCC_GET_SYSCLK_SOURCE() (RCC->CFGR & RCC_CFGR_SWS) + +/** @brief Macro to get the oscillator used as PLL clock source. + * @retval The oscillator used as PLL clock source. The returned value can be one + * of the following: + * - RCC_PLLSOURCE_HSI: HSI oscillator is used as PLL clock source. + * - RCC_PLLSOURCE_HSE: HSE oscillator is used as PLL clock source. + */ +#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC)) +/** + * @} + */ + +/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config + * @{ + */ + +/** @brief Macro to configure the MCO1 clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO1SOURCE_HSI: HSI clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_LSE: LSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_HSE: HSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_PLLCLK: main PLL clock selected as MCO1 source + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + */ +#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO1 | RCC_CFGR_MCO1PRE), ((__MCOCLKSOURCE__) | (__MCODIV__))) + +/** @brief Macro to configure the MCO2 clock. + * @param __MCOCLKSOURCE__ specifies the MCO clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO2SOURCE_SYSCLK: System clock (SYSCLK) selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLI2SCLK: PLLI2S clock selected as MCO2 source, available for all STM32F4 devices except STM32F410xx + * @arg RCC_MCO2SOURCE_I2SCLK: I2SCLK clock selected as MCO2 source, available only for STM32F410Rx devices + * @arg RCC_MCO2SOURCE_HSE: HSE clock selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLCLK: main PLL clock selected as MCO2 source + * @param __MCODIV__ specifies the MCO clock prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + * @note For STM32F410Rx devices, to output I2SCLK clock on MCO2, you should have + * at least one of the SPI clocks enabled (SPI1, SPI2 or SPI5). + */ +#define __HAL_RCC_MCO2_CONFIG(__MCOCLKSOURCE__, __MCODIV__) \ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO2 | RCC_CFGR_MCO2PRE), ((__MCOCLKSOURCE__) | ((__MCODIV__) << 3U))); +/** + * @} + */ + +/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management + * @brief macros to manage the specified RCC Flags and interrupts. + * @{ + */ + +/** @brief Enable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to enable + * the selected interrupts). + * @param __INTERRUPT__ specifies the RCC interrupt sources to be enabled. + * 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: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + */ +#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__)) + +/** @brief Disable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to disable + * the selected interrupts). + * @param __INTERRUPT__ specifies the RCC interrupt sources to be 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: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + */ +#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__))) + +/** @brief Clear the RCC's interrupt pending bits (Perform Byte access to RCC_CIR[23:16] + * bits to clear the selected interrupt pending bits. + * @param __INTERRUPT__ 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_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + * @arg RCC_IT_CSS: Clock Security System interrupt + */ +#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *) RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__)) + +/** @brief Check the RCC's interrupt has occurred or not. + * @param __INTERRUPT__ 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_LSERDY: LSE ready interrupt. + * @arg RCC_IT_HSIRDY: HSI ready interrupt. + * @arg RCC_IT_HSERDY: HSE ready interrupt. + * @arg RCC_IT_PLLRDY: Main PLL ready interrupt. + * @arg RCC_IT_PLLI2SRDY: PLLI2S ready interrupt. + * @arg RCC_IT_CSS: Clock Security System interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__)) + +/** @brief Set RMVF bit to clear the reset flags: RCC_FLAG_PINRST, RCC_FLAG_PORRST, + * RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST and RCC_FLAG_LPWRRST. + */ +#define __HAL_RCC_CLEAR_RESET_FLAGS() (RCC->CSR |= RCC_CSR_RMVF) + +/** @brief Check RCC flag is set or not. + * @param __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: Main PLL clock ready. + * @arg RCC_FLAG_PLLI2SRDY: PLLI2S clock ready. + * @arg RCC_FLAG_LSERDY: LSE oscillator clock ready. + * @arg RCC_FLAG_LSIRDY: LSI oscillator clock ready. + * @arg RCC_FLAG_BORRST: POR/PDR or BOR reset. + * @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. + * @arg RCC_FLAG_LPWRRST: Low Power reset. + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define RCC_FLAG_MASK ((uint8_t)0x1FU) +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5U) == 1U)? RCC->CR :((((__FLAG__) >> 5U) == 2U) ? RCC->BDCR :((((__FLAG__) >> 5U) == 3U)? RCC->CSR :RCC->CIR))) & (1U << ((__FLAG__) & RCC_FLAG_MASK)))!= 0U)? 1U : 0U) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + /** @addtogroup RCC_Exported_Functions + * @{ + */ + +/** @addtogroup RCC_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions ******************************/ +HAL_StatusTypeDef HAL_RCC_DeInit(void); +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency); +/** + * @} + */ + +/** @addtogroup RCC_Exported_Functions_Group2 + * @{ + */ +/* Peripheral Control functions ************************************************/ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv); +void HAL_RCC_EnableCSS(void); +void HAL_RCC_DisableCSS(void); +uint32_t HAL_RCC_GetSysClockFreq(void); +uint32_t HAL_RCC_GetHCLKFreq(void); +uint32_t HAL_RCC_GetPCLK1Freq(void); +uint32_t HAL_RCC_GetPCLK2Freq(void); +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency); + +/* CSS NMI IRQ handler */ +void HAL_RCC_NMI_IRQHandler(void); + +/* User Callbacks in non blocking mode (IT mode) */ +void HAL_RCC_CSSCallback(void); + +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Constants RCC Private Constants + * @{ + */ + +/** @defgroup RCC_BitAddress_AliasRegion RCC BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) +/* --- CR Register --- */ +/* Alias word address of HSION bit */ +#define RCC_CR_OFFSET (RCC_OFFSET + 0x00U) +#define RCC_HSION_BIT_NUMBER 0x00U +#define RCC_CR_HSION_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_HSION_BIT_NUMBER * 4U)) +/* Alias word address of CSSON bit */ +#define RCC_CSSON_BIT_NUMBER 0x13U +#define RCC_CR_CSSON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)) +/* Alias word address of PLLON bit */ +#define RCC_PLLON_BIT_NUMBER 0x18U +#define RCC_CR_PLLON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)) + +/* --- BDCR Register --- */ +/* Alias word address of RTCEN bit */ +#define RCC_BDCR_OFFSET (RCC_OFFSET + 0x70U) +#define RCC_RTCEN_BIT_NUMBER 0x0FU +#define RCC_BDCR_RTCEN_BB (PERIPH_BB_BASE + (RCC_BDCR_OFFSET * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)) +/* Alias word address of BDRST bit */ +#define RCC_BDRST_BIT_NUMBER 0x10U +#define RCC_BDCR_BDRST_BB (PERIPH_BB_BASE + (RCC_BDCR_OFFSET * 32U) + (RCC_BDRST_BIT_NUMBER * 4U)) + +/* --- CSR Register --- */ +/* Alias word address of LSION bit */ +#define RCC_CSR_OFFSET (RCC_OFFSET + 0x74U) +#define RCC_LSION_BIT_NUMBER 0x00U +#define RCC_CSR_LSION_BB (PERIPH_BB_BASE + (RCC_CSR_OFFSET * 32U) + (RCC_LSION_BIT_NUMBER * 4U)) + +/* CR register byte 3 (Bits[23:16]) base address */ +#define RCC_CR_BYTE2_ADDRESS 0x40023802U + +/* CIR register byte 2 (Bits[15:8]) base address */ +#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + 0x0CU + 0x01U)) + +/* CIR register byte 3 (Bits[23:16]) base address */ +#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + 0x0CU + 0x02U)) + +/* BDCR register base address */ +#define RCC_BDCR_BYTE0_ADDRESS (PERIPH_BASE + RCC_BDCR_OFFSET) + +#define RCC_DBP_TIMEOUT_VALUE 2U +#define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT + +#define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT +#define HSI_TIMEOUT_VALUE 2U /* 2 ms */ +#define LSI_TIMEOUT_VALUE 2U /* 2 ms */ +#define CLOCKSWITCH_TIMEOUT_VALUE 5000U /* 5 s */ + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup RCC_Private_Macros RCC Private Macros + * @{ + */ + +/** @defgroup RCC_IS_RCC_Definitions RCC Private macros to check input parameters + * @{ + */ +#define IS_RCC_OSCILLATORTYPE(OSCILLATOR) ((OSCILLATOR) <= 15U) + +#define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \ + ((HSE) == RCC_HSE_BYPASS)) + +#define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \ + ((LSE) == RCC_LSE_BYPASS)) + +#define IS_RCC_HSI(HSI) (((HSI) == RCC_HSI_OFF) || ((HSI) == RCC_HSI_ON)) + +#define IS_RCC_LSI(LSI) (((LSI) == RCC_LSI_OFF) || ((LSI) == RCC_LSI_ON)) + +#define IS_RCC_PLL(PLL) (((PLL) == RCC_PLL_NONE) ||((PLL) == RCC_PLL_OFF) || ((PLL) == RCC_PLL_ON)) + +#define IS_RCC_PLLSOURCE(SOURCE) (((SOURCE) == RCC_PLLSOURCE_HSI) || \ + ((SOURCE) == RCC_PLLSOURCE_HSE)) + +#define IS_RCC_SYSCLKSOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSOURCE_HSI) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_HSE) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLCLK) || \ + ((SOURCE) == RCC_SYSCLKSOURCE_PLLRCLK)) + +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV2) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV3) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV4) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV5) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV6) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV7) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV8) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV9) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV10) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV11) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV12) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV13) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV14) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV15) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV16) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV17) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV18) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV19) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV20) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV21) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV22) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV23) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV24) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV25) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV26) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV27) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV28) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV29) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV30) || \ + ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV31)) + +#define IS_RCC_PLLM_VALUE(VALUE) ((VALUE) <= 63U) + +#define IS_RCC_PLLP_VALUE(VALUE) (((VALUE) == 2U) || ((VALUE) == 4U) || ((VALUE) == 6U) || ((VALUE) == 8U)) + +#define IS_RCC_PLLQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#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)) + +#define IS_RCC_CLOCKTYPE(CLK) ((1U <= (CLK)) && ((CLK) <= 15U)) + +#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)) + +#define IS_RCC_MCO(MCOx) (((MCOx) == RCC_MCO1) || ((MCOx) == RCC_MCO2)) + +#define IS_RCC_MCO1SOURCE(SOURCE) (((SOURCE) == RCC_MCO1SOURCE_HSI) || ((SOURCE) == RCC_MCO1SOURCE_LSE) || \ + ((SOURCE) == RCC_MCO1SOURCE_HSE) || ((SOURCE) == RCC_MCO1SOURCE_PLLCLK)) + +#define IS_RCC_MCODIV(DIV) (((DIV) == RCC_MCODIV_1) || ((DIV) == RCC_MCODIV_2) || \ + ((DIV) == RCC_MCODIV_3) || ((DIV) == RCC_MCODIV_4) || \ + ((DIV) == RCC_MCODIV_5)) +#define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1FU) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_RCC_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h new file mode 100644 index 0000000..909a717 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h @@ -0,0 +1,7111 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc_ex.h + * @author MCD Application Team + * @brief Header file of RCC HAL Extension module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_RCC_EX_H +#define __STM32F4xx_HAL_RCC_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup RCCEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Types RCCEx Exported Types + * @{ + */ + +/** + * @brief RCC PLL configuration structure definition + */ +typedef struct +{ + uint32_t PLLState; /*!< The new state of the PLL. + This parameter can be a value of @ref RCC_PLL_Config */ + + uint32_t PLLSource; /*!< RCC_PLLSource: PLL entry clock source. + This parameter must be a value of @ref RCC_PLL_Clock_Source */ + + uint32_t PLLM; /*!< PLLM: Division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 0 and Max_Data = 63 */ + + uint32_t PLLN; /*!< PLLN: Multiplication factor for PLL VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 + except for STM32F411xE devices where the Min_Data = 192 */ + + uint32_t PLLP; /*!< PLLP: Division factor for main system clock (SYSCLK). + This parameter must be a value of @ref RCC_PLLP_Clock_Divider */ + + uint32_t PLLQ; /*!< PLLQ: Division factor for OTG FS, SDIO and RNG clocks. + This parameter must be a number between Min_Data = 2 and Max_Data = 15 */ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) + uint32_t PLLR; /*!< PLLR: PLL division factor for I2S, SAI, SYSTEM, SPDIFRX clocks. + This parameter is only available in STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx + and STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F413xx/STM32F423xx devices. + This parameter must be a number between Min_Data = 2 and Max_Data = 7 */ +#endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +}RCC_PLLInitTypeDef; + +#if defined(STM32F446xx) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLI2SP; /*!< Specifies division factor for SPDIFRX Clock. + This parameter must be a value of @ref RCCEx_PLLI2SP_Clock_Divider */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ +}RCC_PLLI2SInitTypeDef; + +/** + * @brief PLLSAI Clock structure definition + */ +typedef struct +{ + uint32_t PLLSAIM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLSAIN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLSAIP; /*!< Specifies division factor for OTG FS, SDIO and RNG clocks. + This parameter must be a value of @ref RCCEx_PLLSAIP_Clock_Divider */ + + uint32_t PLLSAIQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ +}RCC_PLLSAIInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + RCC_PLLSAIInitTypeDef PLLSAI; /*!< PLL SAI structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source SAI or LTDC */ + + uint32_t PLLI2SDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLSAIDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ + + uint32_t Sai1ClockSelection; /*!< Specifies SAI1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_SAI1_Clock_Source */ + + uint32_t Sai2ClockSelection; /*!< Specifies SAI2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_SAI2_Clock_Source */ + + uint32_t I2sApb1ClockSelection; /*!< Specifies I2S APB1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB1_Clock_Source */ + + uint32_t I2sApb2ClockSelection; /*!< Specifies I2S APB2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB2_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ + + uint32_t CecClockSelection; /*!< Specifies CEC Clock Source Selection. + This parameter can be a value of @ref RCCEx_CEC_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint32_t SpdifClockSelection; /*!< Specifies SPDIFRX Clock Source Selection. + This parameter can be a value of @ref RCCEx_SPDIFRX_Clock_Source */ + + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F446xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + uint32_t I2SClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2S_APB_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SM; /*!< Specifies division factor for PLL VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 63 */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ +}RCC_PLLI2SInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S */ + +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t PLLDivR; /*!< Specifies the PLL division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLL is selected as Clock Source SAI */ + + uint32_t PLLI2SDivR; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ +#endif /* STM32F413xx || STM32F423xx */ + + uint32_t I2sApb1ClockSelection; /*!< Specifies I2S APB1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB1_Clock_Source */ + + uint32_t I2sApb2ClockSelection; /*!< Specifies I2S APB2 Clock Source Selection. + This parameter can be a value of @ref RCCEx_I2SAPB2_Clock_Source */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Source Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ + + uint32_t Fmpi2c1ClockSelection; /*!< Specifies FMPI2C1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_FMPI2C1_Clock_Source */ + + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint32_t Dfsdm1ClockSelection; /*!< Specifies DFSDM1 Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM1_Kernel_Clock_Source */ + + uint32_t Dfsdm1AudioClockSelection;/*!< Specifies DFSDM1 Audio Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM1_Audio_Clock_Source */ + +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t Dfsdm2ClockSelection; /*!< Specifies DFSDM2 Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM2_Kernel_Clock_Source */ + + uint32_t Dfsdm2AudioClockSelection;/*!< Specifies DFSDM2 Audio Clock Selection. + This parameter can be a value of @ref RCCEx_DFSDM2_Audio_Clock_Source */ + + uint32_t Lptim1ClockSelection; /*!< Specifies LPTIM1 Clock Source Selection. + This parameter can be a value of @ref RCCEx_LPTIM1_Clock_Source */ + + uint32_t SaiAClockSelection; /*!< Specifies SAI1_A Clock Prescalers Selection + This parameter can be a value of @ref RCCEx_SAI1_BlockA_Clock_Source */ + + uint32_t SaiBClockSelection; /*!< Specifies SAI1_B Clock Prescalers Selection + This parameter can be a value of @ref RCCEx_SAI1_BlockB_Clock_Source */ +#endif /* STM32F413xx || STM32F423xx */ + + uint32_t PLLI2SSelection; /*!< Specifies PLL I2S Clock Source Selection. + This parameter can be a value of @ref RCCEx_PLL_I2S_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SQ; /*!< Specifies the division factor for SAI1 clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ +}RCC_PLLI2SInitTypeDef; + +/** + * @brief PLLSAI Clock structure definition + */ +typedef struct +{ + uint32_t PLLSAIN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432. + This parameter will be used only when PLLSAI is selected as Clock Source SAI or LTDC */ +#if defined(STM32F469xx) || defined(STM32F479xx) + uint32_t PLLSAIP; /*!< Specifies division factor for OTG FS and SDIO clocks. + This parameter is only available in STM32F469xx/STM32F479xx devices. + This parameter must be a value of @ref RCCEx_PLLSAIP_Clock_Divider */ +#endif /* STM32F469xx || STM32F479xx */ + + uint32_t PLLSAIQ; /*!< Specifies the division factor for SAI1 clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 15. + This parameter will be used only when PLLSAI is selected as Clock Source SAI or LTDC */ + + uint32_t PLLSAIR; /*!< specifies the division factor for LTDC clock + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLSAI is selected as Clock Source LTDC */ + +}RCC_PLLSAIInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + RCC_PLLSAIInitTypeDef PLLSAI; /*!< PLL SAI structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source SAI or LTDC */ + + uint32_t PLLI2SDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLI2S is selected as Clock Source SAI */ + + uint32_t PLLSAIDivQ; /*!< Specifies the PLLI2S division factor for SAI1 clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 32 + This parameter will be used only when PLLSAI is selected as Clock Source SAI */ + + uint32_t PLLSAIDivR; /*!< Specifies the PLLSAI division factor for LTDC clock. + This parameter must be one value of @ref RCCEx_PLLSAI_DIVR */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ + + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Prescalers Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +#if defined(STM32F469xx) || defined(STM32F479xx) + uint32_t Clk48ClockSelection; /*!< Specifies CLK48 Clock Selection this clock used OTG FS, SDIO and RNG clocks. + This parameter can be a value of @ref RCCEx_CLK48_Clock_Source */ + + uint32_t SdioClockSelection; /*!< Specifies SDIO Clock Source Selection. + This parameter can be a value of @ref RCCEx_SDIO_Clock_Source */ +#endif /* STM32F469xx || STM32F479xx */ +}RCC_PeriphCLKInitTypeDef; + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +/** + * @brief PLLI2S Clock structure definition + */ +typedef struct +{ +#if defined(STM32F411xE) + uint32_t PLLI2SM; /*!< PLLM: Division factor for PLLI2S VCO input clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 62 */ +#endif /* STM32F411xE */ + + uint32_t PLLI2SN; /*!< Specifies the multiplication factor for PLLI2S VCO output clock. + This parameter must be a number between Min_Data = 50 and Max_Data = 432 + Except for STM32F411xE devices where the Min_Data = 192. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t PLLI2SR; /*!< Specifies the division factor for I2S clock. + This parameter must be a number between Min_Data = 2 and Max_Data = 7. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + +}RCC_PLLI2SInitTypeDef; + +/** + * @brief RCC extended clocks structure definition + */ +typedef struct +{ + uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured. + This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */ + + RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters. + This parameter will be used only when PLLI2S is selected as Clock Source I2S or SAI */ + + uint32_t RTCClockSelection; /*!< Specifies RTC Clock Prescalers Selection. + This parameter can be a value of @ref RCC_RTC_Clock_Source */ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + uint8_t TIMPresSelection; /*!< Specifies TIM Clock Source Selection. + This parameter can be a value of @ref RCCEx_TIM_PRescaler_Selection */ +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +}RCC_PeriphCLKInitTypeDef; +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants + * @{ + */ + +/** @defgroup RCCEx_Periph_Clock_Selection RCC Periph Clock Selection + * @{ + */ +/* Peripheral Clock source for STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +#define RCC_PERIPHCLK_I2S_APB1 0x00000001U +#define RCC_PERIPHCLK_I2S_APB2 0x00000002U +#define RCC_PERIPHCLK_TIM 0x00000004U +#define RCC_PERIPHCLK_RTC 0x00000008U +#define RCC_PERIPHCLK_FMPI2C1 0x00000010U +#define RCC_PERIPHCLK_CLK48 0x00000020U +#define RCC_PERIPHCLK_SDIO 0x00000040U +#define RCC_PERIPHCLK_PLLI2S 0x00000080U +#define RCC_PERIPHCLK_DFSDM1 0x00000100U +#define RCC_PERIPHCLK_DFSDM1_AUDIO 0x00000200U +#endif /* STM32F412Zx || STM32F412Vx) || STM32F412Rx || STM32F412Cx */ +#if defined(STM32F413xx) || defined(STM32F423xx) +#define RCC_PERIPHCLK_DFSDM2 0x00000400U +#define RCC_PERIPHCLK_DFSDM2_AUDIO 0x00000800U +#define RCC_PERIPHCLK_LPTIM1 0x00001000U +#define RCC_PERIPHCLK_SAIA 0x00002000U +#define RCC_PERIPHCLK_SAIB 0x00004000U +#endif /* STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- Peripheral Clock source for STM32F410xx ----------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_TIM 0x00000002U +#define RCC_PERIPHCLK_RTC 0x00000004U +#define RCC_PERIPHCLK_FMPI2C1 0x00000008U +#define RCC_PERIPHCLK_LPTIM1 0x00000010U +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- Peripheral Clock source for STM32F446xx ----------------*/ +#if defined(STM32F446xx) +#define RCC_PERIPHCLK_I2S_APB1 0x00000001U +#define RCC_PERIPHCLK_I2S_APB2 0x00000002U +#define RCC_PERIPHCLK_SAI1 0x00000004U +#define RCC_PERIPHCLK_SAI2 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_CEC 0x00000040U +#define RCC_PERIPHCLK_FMPI2C1 0x00000080U +#define RCC_PERIPHCLK_CLK48 0x00000100U +#define RCC_PERIPHCLK_SDIO 0x00000200U +#define RCC_PERIPHCLK_SPDIFRX 0x00000400U +#define RCC_PERIPHCLK_PLLI2S 0x00000800U +#endif /* STM32F446xx */ +/*-----------------------------------------------------------------------------*/ + +/*----------- Peripheral Clock source for STM32F469xx/STM32F479xx -------------*/ +#if defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_SAI_PLLI2S 0x00000002U +#define RCC_PERIPHCLK_SAI_PLLSAI 0x00000004U +#define RCC_PERIPHCLK_LTDC 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_PLLI2S 0x00000040U +#define RCC_PERIPHCLK_CLK48 0x00000080U +#define RCC_PERIPHCLK_SDIO 0x00000100U +#endif /* STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*-------- Peripheral Clock source for STM32F42xxx/STM32F43xxx ---------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_SAI_PLLI2S 0x00000002U +#define RCC_PERIPHCLK_SAI_PLLSAI 0x00000004U +#define RCC_PERIPHCLK_LTDC 0x00000008U +#define RCC_PERIPHCLK_TIM 0x00000010U +#define RCC_PERIPHCLK_RTC 0x00000020U +#define RCC_PERIPHCLK_PLLI2S 0x00000040U +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ +/*----------------------------------------------------------------------------*/ + +/*-------- Peripheral Clock source for STM32F40xxx/STM32F41xxx ---------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define RCC_PERIPHCLK_I2S 0x00000001U +#define RCC_PERIPHCLK_RTC 0x00000002U +#define RCC_PERIPHCLK_PLLI2S 0x00000004U +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define RCC_PERIPHCLK_TIM 0x00000008U +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +/*----------------------------------------------------------------------------*/ +/** + * @} + */ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) || \ + defined(STM32F479xx) +/** @defgroup RCCEx_I2S_Clock_Source I2S Clock Source + * @{ + */ +#define RCC_I2SCLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SCLKSOURCE_EXT 0x00000001U +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F469xx || STM32F479xx */ + +/** @defgroup RCCEx_PLLSAI_DIVR RCC PLLSAI DIVR + * @{ + */ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PLLSAIDIVR_2 0x00000000U +#define RCC_PLLSAIDIVR_4 0x00010000U +#define RCC_PLLSAIDIVR_8 0x00020000U +#define RCC_PLLSAIDIVR_16 0x00030000U +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_PLLI2SP_Clock_Divider RCC PLLI2SP Clock Divider + * @{ + */ +#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) +#define RCC_PLLI2SP_DIV2 0x00000002U +#define RCC_PLLI2SP_DIV4 0x00000004U +#define RCC_PLLI2SP_DIV6 0x00000006U +#define RCC_PLLI2SP_DIV8 0x00000008U +#endif /* STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/** + * @} + */ + +/** @defgroup RCCEx_PLLSAIP_Clock_Divider RCC PLLSAIP Clock Divider + * @{ + */ +#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define RCC_PLLSAIP_DIV2 0x00000002U +#define RCC_PLLSAIP_DIV4 0x00000004U +#define RCC_PLLSAIP_DIV6 0x00000006U +#define RCC_PLLSAIP_DIV8 0x00000008U +#endif /* STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_SAI_BlockA_Clock_Source RCC SAI BlockA Clock Source + * @{ + */ +#define RCC_SAIACLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAIACLKSOURCE_PLLI2S 0x00100000U +#define RCC_SAIACLKSOURCE_EXT 0x00200000U +/** + * @} + */ + +/** @defgroup RCCEx_SAI_BlockB_Clock_Source RCC SAI BlockB Clock Source + * @{ + */ +#define RCC_SAIBCLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAIBCLKSOURCE_PLLI2S 0x00400000U +#define RCC_SAIBCLKSOURCE_EXT 0x00800000U +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLSAIP ((uint32_t)RCC_DCKCFGR_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_SDIOSEL) +/** + * @} + */ + +/** @defgroup RCCEx_DSI_Clock_Source RCC DSI Clock Source + * @{ + */ +#define RCC_DSICLKSOURCE_DSIPHY 0x00000000U +#define RCC_DSICLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_DSISEL) +/** + * @} + */ +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F446xx) +/** @defgroup RCCEx_SAI1_Clock_Source RCC SAI1 Clock Source + * @{ + */ +#define RCC_SAI1CLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAI1CLKSOURCE_PLLI2S ((uint32_t)RCC_DCKCFGR_SAI1SRC_0) +#define RCC_SAI1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1SRC_1) +#define RCC_SAI1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_SAI2_Clock_Source RCC SAI2 Clock Source + * @{ + */ +#define RCC_SAI2CLKSOURCE_PLLSAI 0x00000000U +#define RCC_SAI2CLKSOURCE_PLLI2S ((uint32_t)RCC_DCKCFGR_SAI2SRC_0) +#define RCC_SAI2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI2SRC_1) +#define RCC_SAI2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB1_Clock_Source RCC I2S APB1 Clock Source + * @{ + */ +#define RCC_I2SAPB1CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S1SRC_0) +#define RCC_I2SAPB1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S1SRC_1) +#define RCC_I2SAPB1CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB2_Clock_Source RCC I2S APB2 Clock Source + * @{ + */ +#define RCC_I2SAPB2CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB2CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S2SRC_0) +#define RCC_I2SAPB2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S2SRC_1) +#define RCC_I2SAPB2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_CEC_Clock_Source RCC CEC Clock Source + * @{ + */ +#define RCC_CECCLKSOURCE_HSI 0x00000000U +#define RCC_CECCLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_CECSEL) +/** + * @} + */ + +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLSAIP ((uint32_t)RCC_DCKCFGR2_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_SDIOSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SPDIFRX_Clock_Source RCC SPDIFRX Clock Source + * @{ + */ +#define RCC_SPDIFRXCLKSOURCE_PLLR 0x00000000U +#define RCC_SPDIFRXCLKSOURCE_PLLI2SP ((uint32_t)RCC_DCKCFGR2_SPDIFRXSEL) +/** + * @} + */ + +#endif /* STM32F446xx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_SAI1_BlockA_Clock_Source RCC SAI BlockA Clock Source + * @{ + */ +#define RCC_SAIACLKSOURCE_PLLI2SR 0x00000000U +#define RCC_SAIACLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1ASRC_0) +#define RCC_SAIACLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1ASRC_1) +#define RCC_SAIACLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI1ASRC_0 | RCC_DCKCFGR_SAI1ASRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_SAI1_BlockB_Clock_Source RCC SAI BlockB Clock Source + * @{ + */ +#define RCC_SAIBCLKSOURCE_PLLI2SR 0x00000000U +#define RCC_SAIBCLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_SAI1BSRC_0) +#define RCC_SAIBCLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_SAI1BSRC_1) +#define RCC_SAIBCLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_SAI1BSRC_0 | RCC_DCKCFGR_SAI1BSRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_LPTIM1_Clock_Source RCC LPTIM1 Clock Source + * @{ + */ +#define RCC_LPTIM1CLKSOURCE_PCLK1 0x00000000U +#define RCC_LPTIM1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0) +#define RCC_LPTIM1CLKSOURCE_LSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_1) +#define RCC_LPTIM1CLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0 | RCC_DCKCFGR2_LPTIM1SEL_1) +/** + * @} + */ + + +/** @defgroup RCCEx_DFSDM2_Audio_Clock_Source RCC DFSDM2 Audio Clock Source + * @{ + */ +#define RCC_DFSDM2AUDIOCLKSOURCE_I2S1 0x00000000U +#define RCC_DFSDM2AUDIOCLKSOURCE_I2S2 ((uint32_t)RCC_DCKCFGR_CKDFSDM2ASEL) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM2_Kernel_Clock_Source RCC DFSDM2 Kernel Clock Source + * @{ + */ +#define RCC_DFSDM2CLKSOURCE_PCLK2 0x00000000U +#define RCC_DFSDM2CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_CKDFSDM1SEL) +/** + * @} + */ + +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_PLL_I2S_Clock_Source PLL I2S Clock Source + * @{ + */ +#define RCC_PLLI2SCLKSOURCE_PLLSRC 0x00000000U +#define RCC_PLLI2SCLKSOURCE_EXT ((uint32_t)RCC_PLLI2SCFGR_PLLI2SSRC) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM1_Audio_Clock_Source RCC DFSDM1 Audio Clock Source + * @{ + */ +#define RCC_DFSDM1AUDIOCLKSOURCE_I2S1 0x00000000U +#define RCC_DFSDM1AUDIOCLKSOURCE_I2S2 ((uint32_t)RCC_DCKCFGR_CKDFSDM1ASEL) +/** + * @} + */ + +/** @defgroup RCCEx_DFSDM1_Kernel_Clock_Source RCC DFSDM1 Kernel Clock Source + * @{ + */ +#define RCC_DFSDM1CLKSOURCE_PCLK2 0x00000000U +#define RCC_DFSDM1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR_CKDFSDM1SEL) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB1_Clock_Source RCC I2S APB1 Clock Source + * @{ + */ +#define RCC_I2SAPB1CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB1CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S1SRC_0) +#define RCC_I2SAPB1CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S1SRC_1) +#define RCC_I2SAPB1CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S1SRC) +/** + * @} + */ + +/** @defgroup RCCEx_I2SAPB2_Clock_Source RCC I2S APB2 Clock Source + * @{ + */ +#define RCC_I2SAPB2CLKSOURCE_PLLI2S 0x00000000U +#define RCC_I2SAPB2CLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2S2SRC_0) +#define RCC_I2SAPB2CLKSOURCE_PLLR ((uint32_t)RCC_DCKCFGR_I2S2SRC_1) +#define RCC_I2SAPB2CLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2S2SRC) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_CLK48_Clock_Source RCC CLK48 Clock Source + * @{ + */ +#define RCC_CLK48CLKSOURCE_PLLQ 0x00000000U +#define RCC_CLK48CLKSOURCE_PLLI2SQ ((uint32_t)RCC_DCKCFGR2_CK48MSEL) +/** + * @} + */ + +/** @defgroup RCCEx_SDIO_Clock_Source RCC SDIO Clock Source + * @{ + */ +#define RCC_SDIOCLKSOURCE_CLK48 0x00000000U +#define RCC_SDIOCLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_SDIOSEL) +/** + * @} + */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) + +/** @defgroup RCCEx_I2S_APB_Clock_Source RCC I2S APB Clock Source + * @{ + */ +#define RCC_I2SAPBCLKSOURCE_PLLR 0x00000000U +#define RCC_I2SAPBCLKSOURCE_EXT ((uint32_t)RCC_DCKCFGR_I2SSRC_0) +#define RCC_I2SAPBCLKSOURCE_PLLSRC ((uint32_t)RCC_DCKCFGR_I2SSRC_1) +/** + * @} + */ + +/** @defgroup RCCEx_FMPI2C1_Clock_Source RCC FMPI2C1 Clock Source + * @{ + */ +#define RCC_FMPI2C1CLKSOURCE_PCLK1 0x00000000U +#define RCC_FMPI2C1CLKSOURCE_SYSCLK ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_0) +#define RCC_FMPI2C1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_FMPI2C1SEL_1) +/** + * @} + */ + +/** @defgroup RCCEx_LPTIM1_Clock_Source RCC LPTIM1 Clock Source + * @{ + */ +#define RCC_LPTIM1CLKSOURCE_PCLK1 0x00000000U +#define RCC_LPTIM1CLKSOURCE_HSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0) +#define RCC_LPTIM1CLKSOURCE_LSI ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_1) +#define RCC_LPTIM1CLKSOURCE_LSE ((uint32_t)RCC_DCKCFGR2_LPTIM1SEL_0 | RCC_DCKCFGR2_LPTIM1SEL_1) +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_TIM_PRescaler_Selection RCC TIM PRescaler Selection + * @{ + */ +#define RCC_TIMPRES_DESACTIVATED ((uint8_t)0x00) +#define RCC_TIMPRES_ACTIVATED ((uint8_t)0x01) +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE ||\ + STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +/** @defgroup RCCEx_LSE_Dual_Mode_Selection RCC LSE Dual Mode Selection + * @{ + */ +#define RCC_LSE_LOWPOWER_MODE ((uint8_t)0x00) +#define RCC_LSE_HIGHDRIVE_MODE ((uint8_t)0x01) +/** + * @} + */ +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx ||\ + STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCC_MCO2_Clock_Source MCO2 Clock Source + * @{ + */ +#define RCC_MCO2SOURCE_SYSCLK 0x00000000U +#define RCC_MCO2SOURCE_PLLI2SCLK RCC_CFGR_MCO2_0 +#define RCC_MCO2SOURCE_HSE RCC_CFGR_MCO2_1 +#define RCC_MCO2SOURCE_PLLCLK RCC_CFGR_MCO2 +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F413xx | STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @defgroup RCC_MCO2_Clock_Source MCO2 Clock Source + * @{ + */ +#define RCC_MCO2SOURCE_SYSCLK 0x00000000U +#define RCC_MCO2SOURCE_I2SCLK RCC_CFGR_MCO2_0 +#define RCC_MCO2SOURCE_HSE RCC_CFGR_MCO2_1 +#define RCC_MCO2SOURCE_PLLCLK RCC_CFGR_MCO2 +/** + * @} + */ +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros + * @{ + */ +/*------------------- STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx --------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOJ_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOJEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOJEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOK_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOKEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOKEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DMA2D_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACPTP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_GPIOI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOIEN)) +#define __HAL_RCC_GPIOJ_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOJEN)) +#define __HAL_RCC_GPIOK_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOKEN)) +#define __HAL_RCC_DMA2D_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA2DEN)) +#define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACEN)) +#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACTXEN)) +#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACRXEN)) +#define __HAL_RCC_ETHMACPTP_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACPTPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) + +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_ENABLE() do { \ + __HAL_RCC_ETHMAC_CLK_ENABLE(); \ + __HAL_RCC_ETHMACTX_CLK_ENABLE(); \ + __HAL_RCC_ETHMACRX_CLK_ENABLE(); \ + } while(0U) +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETH_CLK_DISABLE() do { \ + __HAL_RCC_ETHMACTX_CLK_DISABLE(); \ + __HAL_RCC_ETHMACRX_CLK_DISABLE(); \ + __HAL_RCC_ETHMAC_CLK_DISABLE(); \ + } while(0U) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_GPIOI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) != RESET) +#define __HAL_RCC_GPIOJ_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOJEN)) != RESET) +#define __HAL_RCC_GPIOK_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOKEN)) != RESET) +#define __HAL_RCC_DMA2D_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA2DEN)) != RESET) +#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) != RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) != RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) != RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_ETH_IS_CLK_ENABLED() (__HAL_RCC_ETHMAC_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_GPIOI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) == RESET) +#define __HAL_RCC_GPIOJ_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOJEN)) == RESET) +#define __HAL_RCC_GPIOK_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOKEN)) == RESET) +#define __HAL_RCC_DMA2D_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_DMA2DEN)) == RESET) +#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) == RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) == RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) == RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) == RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_ETH_IS_CLK_DISABLED() (__HAL_RCC_ETHMAC_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_DISABLED()) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ + #define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_HASH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_CRYP_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_CRYPEN)) +#define __HAL_RCC_HASH_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_HASHEN)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) != RESET) +#define __HAL_RCC_CRYP_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) == RESET) + +#define __HAL_RCC_HASH_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) != RESET) +#define __HAL_RCC_HASH_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) == RESET) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FMCEN)) +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) != RESET) +#define __HAL_RCC_FMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) == RESET) +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#define __HAL_RCC_UART7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART7EN)) +#define __HAL_RCC_UART8_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART8EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_UART7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) != RESET) +#define __HAL_RCC_UART8_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#define __HAL_RCC_UART7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) == RESET) +#define __HAL_RCC_UART8_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#define __HAL_RCC_SPI6_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI6EN)) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_LTDC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_LTDCEN)) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_DSI_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DSIEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#define __HAL_RCC_SPI6_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI6EN)) != RESET) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN))!= RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN))== RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#define __HAL_RCC_SPI6_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI6EN)) == RESET) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_LTDCEN)) != RESET) +#define __HAL_RCC_LTDC_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_LTDCEN)) == RESET) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DSIEN)) != RESET) +#define __HAL_RCC_DSI_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DSIEN)) == RESET) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_GPIOJ_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOJRST)) +#define __HAL_RCC_GPIOK_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOKRST)) +#define __HAL_RCC_DMA2D_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_DMA2DRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_GPIOJ_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOJRST)) +#define __HAL_RCC_GPIOK_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOKRST)) +#define __HAL_RCC_DMA2D_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_DMA2DRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_HASHRST)) + +#define __HAL_RCC_CRYP_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_HASHRST)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +#define __HAL_RCC_FMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_FMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FMCRST)) + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART8RST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART8RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI6_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI6RST)) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET()(RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI6_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI6RST)) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_LTDCRST)) +#define __HAL_RCC_LTDC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_LTDCRST)) +#endif /* STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DSIRST)) +#define __HAL_RCC_DSI_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DSIRST)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOJLPEN)) +#define __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOKLPEN)) +#define __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM3LPEN)) +#define __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_DMA2DLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOJLPEN)) +#define __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOKLPEN)) +#define __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_DMA2DLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) + +#if defined(STM32F437xx)|| defined(STM32F439xx) || defined(STM32F479xx) +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_HASHLPEN)) + +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_HASHLPEN)) +#endif /* STM32F437xx || STM32F439xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_FMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FMCLPEN)) + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART8LPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART8LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SPI6_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI6LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SPI6_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI6LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) + +#if defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_LTDC_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_LTDCLPEN)) + +#define __HAL_RCC_LTDC_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_LTDCLPEN)) +#endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define __HAL_RCC_DSI_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DSILPEN)) +#define __HAL_RCC_DSI_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DSILPEN)) +#endif /* STM32F469xx || STM32F479xx */ +/** + * @} + */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------- STM32F40xxx/STM32F41xxx-----------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_GPIOI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOIEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#if defined(STM32F407xx)|| defined(STM32F417xx) +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACTX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACTXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETHMACPTP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_ETHMACPTPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ETH_CLK_ENABLE() do { \ + __HAL_RCC_ETHMAC_CLK_ENABLE(); \ + __HAL_RCC_ETHMACTX_CLK_ENABLE(); \ + __HAL_RCC_ETHMACRX_CLK_ENABLE(); \ + } while(0U) + +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACEN)) +#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACTXEN)) +#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACRXEN)) +#define __HAL_RCC_ETHMACPTP_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_ETHMACPTPEN)) +#define __HAL_RCC_ETH_CLK_DISABLE() do { \ + __HAL_RCC_ETHMACTX_CLK_DISABLE(); \ + __HAL_RCC_ETHMACRX_CLK_DISABLE(); \ + __HAL_RCC_ETHMAC_CLK_DISABLE(); \ + } while(0U) +#endif /* STM32F407xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_GPIOI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOIEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN))== RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#if defined(STM32F407xx)|| defined(STM32F417xx) +/** + * @brief Enable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) != RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) != RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) != RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) != RESET) +#define __HAL_RCC_ETH_IS_CLK_ENABLED() (__HAL_RCC_ETHMAC_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_ENABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()) +/** + * @brief Disable ETHERNET clock. + */ +#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACEN)) == RESET) +#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACTXEN)) == RESET) +#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACRXEN)) == RESET) +#define __HAL_RCC_ETHMACPTP_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_ETHMACPTPEN)) == RESET) +#define __HAL_RCC_ETH_IS_CLK_DISABLED() (__HAL_RCC_ETHMAC_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() && \ + __HAL_RCC_ETHMACRX_IS_CLK_DISABLED()) +#endif /* STM32F407xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_CRYPEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_HASH_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRYP_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_CRYPEN)) +#define __HAL_RCC_HASH_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_HASHEN)) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) != RESET) +#define __HAL_RCC_HASH_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) != RESET) + +#define __HAL_RCC_CRYP_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_CRYPEN)) == RESET) +#define __HAL_RCC_HASH_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_HASHEN)) == RESET) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FSMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FSMCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) != RESET) +#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) + /** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_GPIOI_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOIRST)) +#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_ETHMACRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_HASHRST)) + +#define __HAL_RCC_CRYP_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_CRYPRST)) +#define __HAL_RCC_HASH_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_HASHRST)) +#endif /* STM32F415xx || STM32F417xx */ + +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FSMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_FSMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FSMCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET()(RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOILPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACLPEN)) +#define __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACTXLPEN)) +#define __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACRXLPEN)) +#define __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_ETHMACPTPLPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#if defined(STM32F407xx)|| defined(STM32F417xx) +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) +#endif /* STM32F407xx || STM32F417xx */ + +#if defined(STM32F415xx) || defined(STM32F417xx) +#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_HASHLPEN)) + +#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_CRYPLPEN)) +#define __HAL_RCC_HASH_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_HASHLPEN)) +#endif /* STM32F415xx || STM32F417xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FSMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_FSMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FSMCLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +/** + * @} + */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------- STM32F401xE/STM32F401xC --------------------------*/ +#if defined(STM32F401xC) || defined(STM32F401xE) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +/** + * @} + */ +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB1_FORCE_RESET() (RCC->AHB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_AHB1_RELEASE_RESET() (RCC->AHB1RSTR = 0x00U) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB1_FORCE_RESET() (RCC->APB1RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_APB1_RELEASE_RESET() (RCC->APB1RSTR = 0x00U) +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_APB2_FORCE_RESET() (RCC->APB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_APB2_RELEASE_RESET() (RCC->APB2RSTR = 0x00U) +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +/** + * @} + */ +#endif /* STM32F401xC || STM32F401xE*/ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F410xx -------------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_RNGEN)) != RESET) + +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB1) peripheral clock. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_LPTIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RTCAPB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_RTCAPB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_RTCAPBEN)) +#define __HAL_RCC_LPTIM1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_LPTIM1EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_RTCAPB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) != RESET) +#define __HAL_RCC_LPTIM1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_RTCAPB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) == RESET) +#define __HAL_RCC_LPTIM1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_EXTIT_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#define __HAL_RCC_EXTIT_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_EXTITEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#define __HAL_RCC_EXTIT_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) != RESET) + +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#define __HAL_RCC_EXTIT_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_RNGRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() +#define __HAL_RCC_AHB2_RELEASE_RESET() +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() +#define __HAL_RCC_AHB3_RELEASE_RESET() +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_LPTIM1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_LPTIM1RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) + +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_LPTIM1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LPTIM1RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_RNGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_RNGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_LPTIM1LPEN)) +#define __HAL_RCC_RTCAPB_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) + +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LPTIM1LPEN)) +#define __HAL_RCC_RTCAPB_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_EXTITLPEN)) +/** + * @} + */ + +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/*----------------------------------------------------------------------------*/ + +/*-------------------------------- STM32F411xx -------------------------------*/ +#if defined(STM32F411xE) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) != RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEX_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @{ + */ +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +/** + * @} + */ +#endif /* STM32F411xE */ +/*----------------------------------------------------------------------------*/ + +/*---------------------------------- STM32F446xx -----------------------------*/ +#if defined(STM32F446xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_BKPSRAM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_BKPSRAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CCMDATARAMEN_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CCMDATARAMEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_OTGHSULPIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_OTGHSULPIEN)) +#define __HAL_RCC_BKPSRAM_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_BKPSRAMEN)) +#define __HAL_RCC_CCMDATARAMEN_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CCMDATARAMEN)) +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) != RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) != RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) != RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN))!= RESET) +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSEN)) == RESET) +#define __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_OTGHSULPIEN)) == RESET) +#define __HAL_RCC_BKPSRAM_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_BKPSRAMEN)) == RESET) +#define __HAL_RCC_CCMDATARAMEN_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CCMDATARAMEN)) == RESET) +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DCMI_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_DCMIEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_DCMI_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) != RESET) +#define __HAL_RCC_DCMI_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_DCMIEN)) == RESET) + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_FMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FMCEN)) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_FMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) + +#define __HAL_RCC_FMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FMCEN)) == RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPDIFRX_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPDIFRXEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPDIFRXEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CEC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#define __HAL_RCC_SPDIFRX_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPDIFRXEN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#define __HAL_RCC_CEC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#define __HAL_RCC_SPDIFRX_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPDIFRXEN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#define __HAL_RCC_CEC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#define __HAL_RCC_SPDIFRX_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPDIFRXEN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#define __HAL_RCC_CEC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_ADC3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SAI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN)) +#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN)) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) +#define __HAL_RCC_SAI2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI2EN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#define __HAL_RCC_ADC2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET) +#define __HAL_RCC_ADC3_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#define __HAL_RCC_SAI2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI2EN)) != RESET) + +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET) +#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) +#define __HAL_RCC_SAI2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI2EN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_OTGHRST)) +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_DCMIRST)) + +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_DCMI_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_DCMIRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) + +#define __HAL_RCC_FMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FMCRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPDIFRX_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPDIFRXRST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_CEC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#define __HAL_RCC_SPDIFRX_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPDIFRXRST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#define __HAL_RCC_CEC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SAI2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI2RST)) +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) + +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) +#define __HAL_RCC_SAI2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI2RST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_BKPSRAMLPEN)) + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSLPEN)) +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_OTGHSULPILPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#define __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_BKPSRAMLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) + +#define __HAL_RCC_DCMI_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_DCMILPEN)) +#define __HAL_RCC_DCMI_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_DCMILPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_FMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) + +#define __HAL_RCC_FMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_SPDIFRX_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPDIFRXLPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_CEC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CECLPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#define __HAL_RCC_SPDIFRX_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPDIFRXLPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#define __HAL_RCC_CEC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CECLPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SAI2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI2LPEN)) +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE()(RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) + +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE()(RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#define __HAL_RCC_ADC2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC2LPEN)) +#define __HAL_RCC_ADC3_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_ADC3LPEN)) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) +#define __HAL_RCC_SAI2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI2LPEN)) +/** + * @} + */ + +#endif /* STM32F446xx */ +/*----------------------------------------------------------------------------*/ + +/*-------STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx-------*/ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @defgroup RCCEx_AHB1_Clock_Enable_Disable AHB1 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOEEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOFEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_GPIOG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIODEN)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOEEN)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOFEN)) +#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_GPIOGEN)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_CLK_DISABLE() (RCC->AHB1ENR &= ~(RCC_AHB1ENR_CRCEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) != RESET) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) != RESET) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) != RESET) +#define __HAL_RCC_GPIOG_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) != RESET) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_IS_CLK_ENABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) != RESET) + +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIODEN)) == RESET) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOEEN)) == RESET) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOFEN)) == RESET) +#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_GPIOGEN)) == RESET) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_IS_CLK_DISABLED() ((RCC->AHB1ENR & (RCC_AHB1ENR_CRCEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Clock_Enable_Disable AHB2 Peripheral Clock Enable Disable + * @brief Enable or disable the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_AESEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_AESEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_AES_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_AESEN)) +#endif /* STM32F423xx */ + +#define __HAL_RCC_RNG_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_RNG_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_RNGEN)) + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() do {(RCC->AHB2ENR |= (RCC_AHB2ENR_OTGFSEN));\ + __HAL_RCC_SYSCFG_CLK_ENABLE();\ + }while(0U) + +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHB2ENR &= ~(RCC_AHB2ENR_OTGFSEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Peripheral_Clock_Enable_Disable_Status AHB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_AESEN)) != RESET) +#define __HAL_RCC_AES_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_AESEN)) == RESET) +#endif /* STM32F423xx */ + +#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) != RESET) +#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_OTGFSEN)) == RESET) + +#define __HAL_RCC_RNG_IS_CLK_ENABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) != RESET) +#define __HAL_RCC_RNG_IS_CLK_DISABLED() ((RCC->AHB2ENR & (RCC_AHB2ENR_RNGEN)) == RESET) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Clock_Enable_Disable AHB3 Peripheral Clock Enable Disable + * @brief Enables or disables the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_QSPI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN);\ + UNUSED(tmpreg); \ + } while(0U) + +#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_FSMCEN)) +#define __HAL_RCC_QSPI_CLK_DISABLE() (RCC->AHB3ENR &= ~(RCC_AHB3ENR_QSPIEN)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Peripheral_Clock_Enable_Disable_Status AHB3 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the AHB3 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) != RESET) +#define __HAL_RCC_QSPI_IS_CLK_ENABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) != RESET) + +#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_FSMCEN)) == RESET) +#define __HAL_RCC_QSPI_IS_CLK_DISABLED() ((RCC->AHB3ENR & (RCC_AHB3ENR_QSPIEN)) == RESET) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Peripheral Clock Enable Disable + * @brief Enable or disable the Low Speed APB (APB1) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM6_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM12_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM13_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM14_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_RTCAPBEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_USART3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);\ + UNUSED(tmpreg); \ + } while(0U) + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_FMPI2C1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_FMPI2C1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_CAN2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_TIM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_I2C3_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C3EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DAC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART7_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART7EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN)) +#define __HAL_RCC_TIM3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN)) +#define __HAL_RCC_TIM4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN)) +#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN)) +#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN)) +#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN)) +#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN)) +#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_LPTIM1EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_RTCAPBEN)) +#define __HAL_RCC_SPI3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN)) +#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN)) +#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C3EN)) +#define __HAL_RCC_FMPI2C1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_FMPI2C1EN)) +#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN)) +#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN3EN)) +#define __HAL_RCC_DAC_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN)) +#define __HAL_RCC_UART7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART7EN)) +#define __HAL_RCC_UART8_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART8EN)) +#endif /* STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB1 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET) +#define __HAL_RCC_TIM3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET) +#define __HAL_RCC_TIM4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET) +#define __HAL_RCC_TIM6_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET) +#define __HAL_RCC_TIM7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET) +#define __HAL_RCC_TIM12_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET) +#define __HAL_RCC_TIM13_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET) +#define __HAL_RCC_TIM14_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) != RESET) +#define __HAL_RCC_SPI3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET) +#define __HAL_RCC_USART3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET) +#define __HAL_RCC_UART5_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) != RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) != RESET) +#define __HAL_RCC_CAN1_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN))!= RESET) +#define __HAL_RCC_CAN2_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN3EN)) != RESET) +#define __HAL_RCC_DAC_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET) +#define __HAL_RCC_UART7_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) != RESET) +#define __HAL_RCC_UART8_IS_CLK_ENABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET) +#define __HAL_RCC_TIM3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET) +#define __HAL_RCC_TIM4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET) +#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET) +#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET) +#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET) +#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET) +#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_LPTIM1EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_RTCAPBEN)) == RESET) +#define __HAL_RCC_SPI3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET) +#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET) +#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_I2C3EN)) == RESET) +#define __HAL_RCC_FMPI2C1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_FMPI2C1EN)) == RESET) +#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET) +#define __HAL_RCC_CAN2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN3EN)) == RESET) +#define __HAL_RCC_DAC_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET) +#define __HAL_RCC_UART7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART7EN)) == RESET) +#define __HAL_RCC_UART8_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART8EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ +/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Peripheral Clock Enable Disable + * @brief Enable or disable the High Speed APB (APB2) peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_UART9EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_UART9EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_UART10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_UART10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_UART10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDIOEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI4_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI4EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_EXTIT_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_EXTITEN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_TIM10_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);\ + UNUSED(tmpreg); \ + } while(0U) +#define __HAL_RCC_SPI5_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI5EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SAI1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN);\ + UNUSED(tmpreg); \ + } while(0U) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM2EN);\ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM2EN);\ + UNUSED(tmpreg); \ + } while(0U) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_UART9EN)) +#define __HAL_RCC_UART10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_UART10EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SDIOEN)) +#define __HAL_RCC_SPI4_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI4EN)) +#define __HAL_RCC_EXTIT_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_EXTITEN)) +#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN)) +#define __HAL_RCC_SPI5_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI5EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_SAI1EN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DFSDM1EN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_DFSDM2EN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status + * @brief Get the enable or disable status of the APB2 peripheral clock. + * @note After reset, the peripheral clock (used for registers read/write access) + * is disabled and the application software has to enable this clock before + * using it. + * @{ + */ +#define __HAL_RCC_TIM8_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART9EN)) != RESET) +#define __HAL_RCC_UART10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART10EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) != RESET) +#define __HAL_RCC_SPI4_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) != RESET) +#define __HAL_RCC_EXTIT_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) != RESET) +#define __HAL_RCC_TIM10_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET) +#define __HAL_RCC_SPI5_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM1EN)) != RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_IS_CLK_ENABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM2EN)) != RESET) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART9EN)) == RESET) +#define __HAL_RCC_UART10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_UART10EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SDIOEN)) == RESET) +#define __HAL_RCC_SPI4_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI4EN)) == RESET) +#define __HAL_RCC_EXTIT_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_EXTITEN)) == RESET) +#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET) +#define __HAL_RCC_SPI5_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SPI5EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_SAI1EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM1EN)) == RESET) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_DFSDM2EN)) == RESET) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_Force_Release_Reset AHB1 Force Release Reset + * @brief Force or release AHB1 peripheral reset. + * @{ + */ +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIODRST)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOERST)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_GPIOGRST)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_FORCE_RESET() (RCC->AHB1RSTR |= (RCC_AHB1RSTR_CRCRST)) + +#if defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIODRST)) +#endif /* STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOERST)) +#endif /* STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Zx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOFRST)) +#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_GPIOGRST)) +#endif /* STM32F412Zx || STM32F413xx || STM32F423xx */ +#define __HAL_RCC_CRC_RELEASE_RESET() (RCC->AHB1RSTR &= ~(RCC_AHB1RSTR_CRCRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_Force_Release_Reset AHB2 Force Release Reset + * @brief Force or release AHB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_AHB2_FORCE_RESET() (RCC->AHB2RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB2_RELEASE_RESET() (RCC->AHB2RSTR = 0x00U) + +#if defined(STM32F423xx) +#define __HAL_RCC_AES_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_AESRST)) +#define __HAL_RCC_AES_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_AESRST)) +#endif /* STM32F423xx */ + +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_OTGFSRST)) +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_OTGFSRST)) + +#define __HAL_RCC_RNG_FORCE_RESET() (RCC->AHB2RSTR |= (RCC_AHB2RSTR_RNGRST)) +#define __HAL_RCC_RNG_RELEASE_RESET() (RCC->AHB2RSTR &= ~(RCC_AHB2RSTR_RNGRST)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_Force_Release_Reset AHB3 Force Release Reset + * @brief Force or release AHB3 peripheral reset. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_AHB3_FORCE_RESET() (RCC->AHB3RSTR = 0xFFFFFFFFU) +#define __HAL_RCC_AHB3_RELEASE_RESET() (RCC->AHB3RSTR = 0x00U) + +#define __HAL_RCC_FSMC_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_QSPI_FORCE_RESET() (RCC->AHB3RSTR |= (RCC_AHB3RSTR_QSPIRST)) + +#define __HAL_RCC_FSMC_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_FSMCRST)) +#define __HAL_RCC_QSPI_RELEASE_RESET() (RCC->AHB3RSTR &= ~(RCC_AHB3RSTR_QSPIRST)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ +#if defined(STM32F412Cx) +#define __HAL_RCC_AHB3_FORCE_RESET() +#define __HAL_RCC_AHB3_RELEASE_RESET() + +#define __HAL_RCC_FSMC_FORCE_RESET() +#define __HAL_RCC_QSPI_FORCE_RESET() + +#define __HAL_RCC_FSMC_RELEASE_RESET() +#define __HAL_RCC_QSPI_RELEASE_RESET() +#endif /* STM32F412Cx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset + * @brief Force or release APB1 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_LPTIM1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SPI3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_FMPI2C1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN3RST)) +#define __HAL_RCC_DAC_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART8RST)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST)) +#define __HAL_RCC_TIM3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST)) +#define __HAL_RCC_TIM4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST)) +#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST)) +#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST)) +#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST)) +#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST)) +#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_LPTIM1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SPI3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST)) +#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST)) +#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C3RST)) +#define __HAL_RCC_FMPI2C1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_FMPI2C1RST)) +#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST)) +#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN3RST)) +#define __HAL_RCC_DAC_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST)) +#define __HAL_RCC_UART7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART7RST)) +#define __HAL_RCC_UART8_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART8RST)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset + * @brief Force or release APB2 peripheral reset. + * @{ + */ +#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_UART9RST)) +#define __HAL_RCC_UART10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_UART10RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI5RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_SAI1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DFSDM1RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_DFSDM2RST)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART9RST)) +#define __HAL_RCC_UART10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_UART10RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SDIORST)) +#define __HAL_RCC_SPI4_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI4RST)) +#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST)) +#define __HAL_RCC_SPI5_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI5RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SAI1RST)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DFSDM1RST)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_DFSDM2RST)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB1_LowPower_Enable_Disable AHB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() (RCC->AHB1LPENR |= (RCC_AHB1LPENR_SRAM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIODLPEN)) +#define __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOELPEN)) +#define __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOFLPEN)) +#define __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_GPIOGLPEN)) +#define __HAL_RCC_CRC_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_CRCLPEN)) +#define __HAL_RCC_FLITF_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_FLITFLPEN)) +#define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() (RCC->AHB1LPENR &= ~(RCC_AHB1LPENR_SRAM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_AHB2_LowPower_Enable_Disable AHB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wake-up from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#if defined(STM32F423xx) +#define __HAL_RCC_AES_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_AESLPEN)) +#define __HAL_RCC_AES_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_AESLPEN)) +#endif /* STM32F423xx */ + +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_OTGFSLPEN)) +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_OTGFSLPEN)) + +#define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() (RCC->AHB2LPENR |= (RCC_AHB2LPENR_RNGLPEN)) +#define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() (RCC->AHB2LPENR &= ~(RCC_AHB2LPENR_RNGLPEN)) +/** + * @} + */ + +/** @defgroup RCCEx_AHB3_LowPower_Enable_Disable AHB3 Peripheral Low Power Enable Disable + * @brief Enable or disable the AHB3 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_FSMC_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() (RCC->AHB3LPENR |= (RCC_AHB3LPENR_QSPILPEN)) + +#define __HAL_RCC_FSMC_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_FSMCLPEN)) +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() (RCC->AHB3LPENR &= ~(RCC_AHB3LPENR_QSPILPEN)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F413xx || STM32F423xx */ + +/** + * @} + */ + +/** @defgroup RCCEx_APB1_LowPower_Enable_Disable APB1 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB1 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_TIM14LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_LPTIM1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_USART3LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART5LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN2LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_CAN3LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_ENABLE() (RCC->APB1LPENR |= (RCC_APB1LPENR_UART8LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM2LPEN)) +#define __HAL_RCC_TIM3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM3LPEN)) +#define __HAL_RCC_TIM4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM4LPEN)) +#define __HAL_RCC_TIM6_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM6LPEN)) +#define __HAL_RCC_TIM7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM7LPEN)) +#define __HAL_RCC_TIM12_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM12LPEN)) +#define __HAL_RCC_TIM13_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM13LPEN)) +#define __HAL_RCC_TIM14_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_TIM14LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_LPTIM1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_RTCAPB_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_RTCAPBLPEN)) +#define __HAL_RCC_SPI3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_SPI3LPEN)) +#define __HAL_RCC_USART3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_USART3LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART4_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART4LPEN)) +#define __HAL_RCC_UART5_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART5LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_I2C3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_I2C3LPEN)) +#define __HAL_RCC_FMPI2C1_CLK_SLEEP_DISABLE()(RCC->APB1LPENR &= ~(RCC_APB1LPENR_FMPI2C1LPEN)) +#define __HAL_RCC_CAN1_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN1LPEN)) +#define __HAL_RCC_CAN2_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN2LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_CAN3_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_CAN3LPEN)) +#define __HAL_RCC_DAC_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_DACLPEN)) +#define __HAL_RCC_UART7_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART7LPEN)) +#define __HAL_RCC_UART8_CLK_SLEEP_DISABLE() (RCC->APB1LPENR &= ~(RCC_APB1LPENR_UART8LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ + +/** @defgroup RCCEx_APB2_LowPower_Enable_Disable APB2 Peripheral Low Power Enable Disable + * @brief Enable or disable the APB2 peripheral clock during Low Power (Sleep) mode. + * @note Peripheral clock gating in SLEEP mode can be used to further reduce + * power consumption. + * @note After wakeup from SLEEP mode, the peripheral clock is enabled again. + * @note By default, all peripheral clocks are enabled during SLEEP mode. + * @{ + */ +#define __HAL_RCC_TIM8_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM8LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_UART9LPEN)) +#define __HAL_RCC_UART10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_UART10LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SPI5LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_SAI1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DFSDM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_SLEEP_ENABLE() (RCC->APB2LPENR |= (RCC_APB2LPENR_DFSDM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ + +#define __HAL_RCC_TIM8_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM8LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_UART9_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_UART9LPEN)) +#define __HAL_RCC_UART10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_UART10LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SDIOLPEN)) +#define __HAL_RCC_SPI4_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI4LPEN)) +#define __HAL_RCC_EXTIT_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_EXTITLPEN)) +#define __HAL_RCC_TIM10_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_TIM10LPEN)) +#define __HAL_RCC_SPI5_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SPI5LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_SAI1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_SAI1LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +#define __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DFSDM1LPEN)) +#if defined(STM32F413xx) || defined(STM32F423xx) +#define __HAL_RCC_DFSDM2_CLK_SLEEP_DISABLE() (RCC->APB2LPENR &= ~(RCC_APB2LPENR_DFSDM2LPEN)) +#endif /* STM32F413xx || STM32F423xx */ +/** + * @} + */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------- PLL Configuration --------------------------*/ +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the main PLL clock source, multiplication and division factors. + * @note This function must be used only when the main 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: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * @param __PLLN__ specifies the multiplication factor for PLL VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLN parameter correctly to ensure that the VCO + * output frequency is between 100 and 432 MHz. + * + * @param __PLLP__ specifies the division factor for main system clock (SYSCLK) + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLQ__ specifies the division factor for OTG FS, SDIO and RNG clocks + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note If the USB OTG FS is used in your application, you have to set the + * PLLQ parameter correctly to have 48 MHz clock for the USB. However, + * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work + * correctly. + * + * @param __PLLR__ PLL division factor for I2S, SAI, SYSTEM, SPDIFRX clocks. + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note This parameter is only available in STM32F446xx/STM32F469xx/STM32F479xx/ + STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/STM32F413xx/STM32F423xx devices. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__) \ + (RCC->PLLCFGR = ((__RCC_PLLSource__) | (__PLLM__) | \ + ((__PLLN__) << RCC_PLLCFGR_PLLN_Pos) | \ + ((((__PLLP__) >> 1U) -1U) << RCC_PLLCFGR_PLLP_Pos) | \ + ((__PLLQ__) << RCC_PLLCFGR_PLLQ_Pos) | \ + ((__PLLR__) << RCC_PLLCFGR_PLLR_Pos))) +#else +/** @brief Macro to configure the main PLL clock source, multiplication and division factors. + * @note This function must be used only when the main 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: HSI oscillator clock selected as PLL clock entry + * @arg RCC_PLLSOURCE_HSE: HSE oscillator clock selected as PLL clock entry + * @note This clock source (RCC_PLLSource) is common for the main PLL and PLLI2S. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLL jitter. + * @param __PLLN__ specifies the multiplication factor for PLL VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432 + * Except for STM32F411xE devices where Min_Data = 192. + * @note You have to set the PLLN parameter correctly to ensure that the VCO + * output frequency is between 100 and 432 MHz, Except for STM32F411xE devices + * where frequency is between 192 and 432 MHz. + * @param __PLLP__ specifies the division factor for main system clock (SYSCLK) + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLQ__ specifies the division factor for OTG FS, SDIO and RNG clocks + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note If the USB OTG FS is used in your application, you have to set the + * PLLQ parameter correctly to have 48 MHz clock for the USB. However, + * the SDIO and RNG need a frequency lower than or equal to 48 MHz to work + * correctly. + * + */ +#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSource__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__) \ + (RCC->PLLCFGR = (0x20000000U | (__RCC_PLLSource__) | (__PLLM__)| \ + ((__PLLN__) << RCC_PLLCFGR_PLLN_Pos) | \ + ((((__PLLP__) >> 1U) -1U) << RCC_PLLCFGR_PLLP_Pos) | \ + ((__PLLQ__) << RCC_PLLCFGR_PLLQ_Pos))) + #endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------PLLI2S Configuration ---------------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + +/** @brief Macros to enable or disable the PLLI2S. + * @note The PLLI2S is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = ENABLE) +#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLI2SON_BB = DISABLE) + +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F412Cx */ +#if defined(STM32F446xx) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SP__ specifies division factor for SPDIFRX Clock. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * @note the PLLI2SP parameter is only available with STM32F446xx Devices + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + * @param __PLLI2SQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SP__, __PLLI2SQ__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((((__PLLI2SP__) >> 1U) -1U) << RCC_PLLI2SCFGR_PLLI2SP_Pos) |\ + ((__PLLI2SQ__) << RCC_PLLI2SCFGR_PLLI2SQ_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#elif defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + * @param __PLLI2SQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SQ__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SQ__) << RCC_PLLI2SCFGR_PLLI2SQ_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#else +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + * + */ +#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SN__, __PLLI2SR__) \ + (RCC->PLLI2SCFGR = (((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#endif /* STM32F446xx */ + +#if defined(STM32F411xE) +/** @brief Macro to configure the PLLI2S clock multiplication and division factors . + * @note This macro must be used only when the PLLI2S is disabled. + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API). + * @param __PLLI2SM__ specifies the division factor for PLLI2S VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note The PLLI2SM parameter is only used with STM32F411xE/STM32F410xx Devices + * @note You have to set the PLLI2SM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 2 MHz to limit PLLI2S jitter. + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock + * This parameter must be a number between Min_Data = 192 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 192 and Max_Data = 432 MHz. + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + */ +#define __HAL_RCC_PLLI2S_I2SCLK_CONFIG(__PLLI2SM__, __PLLI2SN__, __PLLI2SR__) (RCC->PLLI2SCFGR = ((__PLLI2SM__) |\ + ((__PLLI2SN__) << RCC_PLLI2SCFGR_PLLI2SN_Pos) |\ + ((__PLLI2SR__) << RCC_PLLI2SCFGR_PLLI2SR_Pos))) +#endif /* STM32F411xE */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro used by the SAI HAL driver to configure the PLLI2S clock multiplication and division factors. + * @note This macro must be used only when the PLLI2S is disabled. + * @note PLLI2S clock source is common with the main PLL (configured in + * HAL_RCC_ClockConfig() API) + * @param __PLLI2SN__ specifies the multiplication factor for PLLI2S VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLI2SN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * @param __PLLI2SQ__ specifies the division factor for SAI1 clock. + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * @note the PLLI2SQ parameter is only available with STM32F427xx/437xx/429xx/439xx/469xx/479xx + * Devices and can be configured using the __HAL_RCC_PLLI2S_PLLSAICLK_CONFIG() macro + * @param __PLLI2SR__ specifies the division factor for I2S clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note You have to set the PLLI2SR parameter correctly to not exceed 192 MHz + * on the I2S clock frequency. + */ +#define __HAL_RCC_PLLI2S_SAICLK_CONFIG(__PLLI2SN__, __PLLI2SQ__, __PLLI2SR__) (RCC->PLLI2SCFGR = ((__PLLI2SN__) << 6U) |\ + ((__PLLI2SQ__) << 24U) |\ + ((__PLLI2SR__) << 28U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------------ PLLSAI Configuration ------------------------*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macros to Enable or Disable the PLLISAI. + * @note The PLLSAI is only available with STM32F429x/439x Devices. + * @note The PLLSAI is disabled by hardware when entering STOP and STANDBY modes. + */ +#define __HAL_RCC_PLLSAI_ENABLE() (*(__IO uint32_t *) RCC_CR_PLLSAION_BB = ENABLE) +#define __HAL_RCC_PLLSAI_DISABLE() (*(__IO uint32_t *) RCC_CR_PLLSAION_BB = DISABLE) + +#if defined(STM32F446xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIM__ specifies the division factor for PLLSAI VCO input clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 63. + * @note You have to set the PLLSAIM parameter correctly to ensure that the VCO input + * frequency ranges from 1 to 2 MHz. It is recommended to select a frequency + * of 1 MHz to limit PLLI2S jitter. + * @note The PLLSAIM parameter is only used with STM32F446xx Devices + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIP__ specifies division factor for OTG FS, SDIO and RNG clocks. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * @note the PLLSAIP parameter is only available with STM32F446xx Devices + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note the PLLI2SR parameter is only available with STM32F427/437/429/439xx Devices + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIM__, __PLLSAIN__, __PLLSAIP__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = ((__PLLSAIM__) | \ + ((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) | \ + ((((__PLLSAIP__) >> 1U) -1U) << RCC_PLLSAICFGR_PLLSAIP_Pos) | \ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos))) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIP__ specifies division factor for SDIO and CLK48 clocks. + * This parameter must be a number in the range {2, 4, 6, or 8}. + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIN__, __PLLSAIP__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = (((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) |\ + ((((__PLLSAIP__) >> 1U) -1U) << RCC_PLLSAICFGR_PLLSAIP_Pos) |\ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos) |\ + ((__PLLSAIR__) << RCC_PLLSAICFGR_PLLSAIR_Pos))) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +/** @brief Macro to configure the PLLSAI clock multiplication and division factors. + * + * @param __PLLSAIN__ specifies the multiplication factor for PLLSAI VCO output clock. + * This parameter must be a number between Min_Data = 50 and Max_Data = 432. + * @note You have to set the PLLSAIN parameter correctly to ensure that the VCO + * output frequency is between Min_Data = 100 and Max_Data = 432 MHz. + * + * @param __PLLSAIQ__ specifies the division factor for SAI clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 15. + * + * @param __PLLSAIR__ specifies the division factor for LTDC clock + * This parameter must be a number between Min_Data = 2 and Max_Data = 7. + * @note the PLLI2SR parameter is only available with STM32F427/437/429/439xx Devices + */ +#define __HAL_RCC_PLLSAI_CONFIG(__PLLSAIN__, __PLLSAIQ__, __PLLSAIR__) \ + (RCC->PLLSAICFGR = (((__PLLSAIN__) << RCC_PLLSAICFGR_PLLSAIN_Pos) | \ + ((__PLLSAIQ__) << RCC_PLLSAICFGR_PLLSAIQ_Pos) | \ + ((__PLLSAIR__) << RCC_PLLSAICFGR_PLLSAIR_Pos))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------- PLLSAI/PLLI2S Dividers Configuration -------------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the SAI clock Divider coming from PLLI2S. + * @note This function must be called before enabling the PLLI2S. + * @param __PLLI2SDivR__ specifies the PLLI2S division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLI2SR) / __PLLI2SDivR__ + */ +#define __HAL_RCC_PLLI2S_PLLSAICLKDIVR_CONFIG(__PLLI2SDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR, (__PLLI2SDivR__)-1U)) + +/** @brief Macro to configure the SAI clock Divider coming from PLL. + * @param __PLLDivR__ specifies the PLL division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLR) / __PLLDivR__ + */ +#define __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(__PLLDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR, ((__PLLDivR__)-1U)<<8U)) +#endif /* STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the SAI clock Divider coming from PLLI2S. + * @note This function must be called before enabling the PLLI2S. + * @param __PLLI2SDivQ__ specifies the PLLI2S division factor for SAI1 clock. + * This parameter must be a number between 1 and 32. + * SAI1 clock frequency = f(PLLI2SQ) / __PLLI2SDivQ__ + */ +#define __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(__PLLI2SDivQ__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ, (__PLLI2SDivQ__)-1U)) + +/** @brief Macro to configure the SAI clock Divider coming from PLLSAI. + * @note This function must be called before enabling the PLLSAI. + * @param __PLLSAIDivQ__ specifies the PLLSAI division factor for SAI1 clock . + * This parameter must be a number between Min_Data = 1 and Max_Data = 32. + * SAI1 clock frequency = f(PLLSAIQ) / __PLLSAIDivQ__ + */ +#define __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(__PLLSAIDivQ__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ, ((__PLLSAIDivQ__)-1U)<<8U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Macro to configure the LTDC clock Divider coming from PLLSAI. + * + * @note The LTDC peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling the PLLSAI. + * @param __PLLSAIDivR__ specifies the PLLSAI division factor for LTDC clock . + * This parameter must be a number between Min_Data = 2 and Max_Data = 16. + * LTDC clock frequency = f(PLLSAIR) / __PLLSAIDivR__ + */ +#define __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(__PLLSAIDivR__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR, (__PLLSAIDivR__))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/*----------------------------------------------------------------------------*/ + +/*------------------------- Peripheral Clock selection -----------------------*/ +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) ||\ + defined(STM32F479xx) +/** @brief Macro to configure the I2S clock source (I2SCLK). + * @note This function must be called before enabling the I2S APB clock. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SCLKSOURCE_PLLI2S: PLLI2S clock used as I2S clock source. + * @arg RCC_I2SCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin + * used as I2S clock source. + */ +#define __HAL_RCC_I2S_CONFIG(__SOURCE__) (*(__IO uint32_t *) RCC_CFGR_I2SSRC_BB = (__SOURCE__)) + + +/** @brief Macro to get the I2S clock source (I2SCLK). + * @retval The clock source can be one of the following values: + * @arg @ref RCC_I2SCLKSOURCE_PLLI2S: PLLI2S clock used as I2S clock source. + * @arg @ref RCC_I2SCLKSOURCE_EXT External clock mapped on the I2S_CKIN pin + * used as I2S clock source + */ +#define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC))) +#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + +/** @brief Macro to configure SAI1BlockA clock source selection. + * @note The SAI peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used + * as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used + * as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_Ext: External clock mapped on the I2S_CKIN pin + * used as SAI1 Block A clock. + */ +#define __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC, (__SOURCE__))) + +/** @brief Macro to configure SAI1BlockB clock source selection. + * @note The SAI peripheral is only available with STM32F427/437/429/439/469/479xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block B clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used + * as SAI1 Block B clock. + * @arg RCC_SAIBCLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used + * as SAI1 Block B clock. + * @arg RCC_SAIBCLKSOURCE_Ext: External clock mapped on the I2S_CKIN pin + * used as SAI1 Block B clock. + */ +#define __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC, (__SOURCE__))) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F446xx) +/** @brief Macro to configure SAI1 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @note This function must be called before enabling PLL, PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI1 clock source. + * This parameter can be one of the following values: + * @arg RCC_SAI1CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 clock. + */ +#define __HAL_RCC_SAI1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1SRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAI1CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI1 clock. + * @arg RCC_SAI1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 clock. + */ +#define __HAL_RCC_GET_SAI1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1SRC)) + +/** @brief Macro to configure SAI2 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @note This function must be called before enabling PLL, PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI2 clock source. + * This parameter can be one of the following values: + * @arg RCC_SAI2CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL Source clock used as SAI2 clock. + */ +#define __HAL_RCC_SAI2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI2SRC, (__SOURCE__))) + +/** @brief Macro to Get SAI2 clock source selection. + * @note This configuration is only available with STM32F446xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAI2CLKSOURCE_PLLI2S: PLLI2S_Q clock divided by PLLI2SDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSAI: PLLISAI_Q clock divided by PLLSAIDIVQ used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SAI2 clock. + * @arg RCC_SAI2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL Source clock used as SAI2 clock. + */ +#define __HAL_RCC_GET_SAI2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI2SRC)) + +/** @brief Macro to configure I2S APB1 clock source selection. + * @note This function must be called before enabling PLL, PLLI2S and the I2S clock. + * @param __SOURCE__ specifies the I2S APB1 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB1 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB1 clock. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC)) + +/** @brief Macro to configure I2S APB2 clock source selection. + * @note This function must be called before enabling PLL, PLLI2S and the I2S clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB2 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR used as I2S clock. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as I2S APB2 clock. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC)) + +/** @brief Macro to configure the CEC clock. + * @param __SOURCE__ specifies the CEC clock source. + * This parameter can be one of the following values: + * @arg RCC_CECCLKSOURCE_HSI: HSI selected as CEC clock + * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock + */ +#define __HAL_RCC_CEC_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CEC clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CECCLKSOURCE_HSI488: HSI selected as CEC clock + * @arg RCC_CECCLKSOURCE_LSE: LSE selected as CEC clock + */ +#define __HAL_RCC_GET_CEC_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL)) + +/** @brief Macro to configure the SPDIFRX clock. + * @param __SOURCE__ specifies the SPDIFRX clock source. + * This parameter can be one of the following values: + * @arg RCC_SPDIFRXCLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SPDIFRX clock. + * @arg RCC_SPDIFRXCLKSOURCE_PLLI2SP: PLLI2S VCO Output divided by PLLI2SP used as SPDIFRX clock. + */ +#define __HAL_RCC_SPDIFRX_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SPDIFRX clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SPDIFRXCLKSOURCE_PLLR: PLL VCO Output divided by PLLR used as SPDIFRX clock. + * @arg RCC_SPDIFRXCLKSOURCE_PLLI2SP: PLLI2S VCO Output divided by PLLI2SP used as SPDIFRX clock. + */ +#define __HAL_RCC_GET_SPDIFRX_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLSAIP: PLLSAI VCO Output divided by PLLSAIP used as CLK48 clock. + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL)) + +/** @brief Macro to configure the DSI clock. + * @param __SOURCE__ specifies the DSI clock source. + * This parameter can be one of the following values: + * @arg RCC_DSICLKSOURCE_PLLR: PLLR output used as DSI clock. + * @arg RCC_DSICLKSOURCE_DSIPHY: DSI-PHY output used as DSI clock. + */ +#define __HAL_RCC_DSI_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the DSI clock. + * @retval The clock source can be one of the following values: + * @arg RCC_DSICLKSOURCE_PLLR: PLLR output used as DSI clock. + * @arg RCC_DSICLKSOURCE_DSIPHY: DSI-PHY output used as DSI clock. + */ +#define __HAL_RCC_GET_DSI_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL)) + +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) + /** @brief Macro to configure the DFSDM1 clock. + * @param __DFSDM1_CLKSOURCE__ specifies the DFSDM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM1CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM1CLKSOURCE_SYSCLK: System clock used as kernel clock. + * @retval None + */ +#define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1_CLKSOURCE__) MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, (__DFSDM1_CLKSOURCE__)) + +/** @brief Macro to get the DFSDM1 clock source. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM1CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM1CLKSOURCE_SYSCLK: System clock used as kernel clock. + */ +#define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL))) + +/** @brief Macro to configure DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/ + STM32F413xx/STM32F423xx Devices. + * @param __SOURCE__ specifies the DFSDM1 Audio clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_DFSDM1AUDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1ASEL, (__SOURCE__))) + +/** @brief Macro to Get DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx/ + STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM1AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_GET_DFSDM1AUDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1ASEL)) + +#if defined(STM32F413xx) || defined(STM32F423xx) + /** @brief Macro to configure the DFSDM2 clock. + * @param __DFSDM2_CLKSOURCE__ specifies the DFSDM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM2CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM2CLKSOURCE_SYSCLK: System clock used as kernel clock. + * @retval None + */ +#define __HAL_RCC_DFSDM2_CONFIG(__DFSDM2_CLKSOURCE__) MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, (__DFSDM2_CLKSOURCE__)) + +/** @brief Macro to get the DFSDM2 clock source. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM2CLKSOURCE_PCLK2: PCLK2 clock used as kernel clock. + * @arg RCC_DFSDM2CLKSOURCE_SYSCLK: System clock used as kernel clock. + */ +#define __HAL_RCC_GET_DFSDM2_SOURCE() ((uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL))) + +/** @brief Macro to configure DFSDM1 Audio clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @param __SOURCE__ specifies the DFSDM2 Audio clock source. + * This parameter can be one of the following values: + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_DFSDM2AUDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM2ASEL, (__SOURCE__))) + +/** @brief Macro to Get DFSDM2 Audio clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S1: CK_I2S_PCLK1 selected as audio clock + * @arg RCC_DFSDM2AUDIOCLKSOURCE_I2S2: CK_I2S_PCLK2 selected as audio clock + */ +#define __HAL_RCC_GET_DFSDM2AUDIO_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM2ASEL)) + +/** @brief Macro to configure SAI1BlockA clock source selection. + * @note The SAI peripheral is only available with STM32F413xx/STM32F423xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block A clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_EXT: External clock mapped on the I2S_CKIN pinused as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 BlockA clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAIACLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_EXT: External clock mapped on the I2S_CKIN pinused as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIACLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_SAI_BLOCKA_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1ASRC)) + +/** @brief Macro to configure SAI1 BlockB clock source selection. + * @note The SAI peripheral is only available with STM32F413xx/STM32F423xx Devices. + * @note This function must be called before enabling PLLSAI, PLLI2S and + * the SAI clock. + * @param __SOURCE__ specifies the SAI Block B clock source. + * This parameter can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC, (__SOURCE__))) + +/** @brief Macro to Get SAI1 BlockB clock source selection. + * @note This configuration is only available with STM32F413xx/STM32F423xx Devices. + * @retval The clock source can be one of the following values: + * @arg RCC_SAIBCLKSOURCE_PLLI2SR: PLLI2S_R clock divided (R2) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLR: PLL_R clock divided (R1) used as SAI1 Block A clock. + * @arg RCC_SAIBCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_SAI_BLOCKB_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_SAI1BSRC)) + +/** @brief Macro to configure the LPTIM1 clock. + * @param __SOURCE__ specifies the LPTIM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_LPTIM1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the LPTIM1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_GET_LPTIM1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)) +#endif /* STM32F413xx || STM32F423xx */ + +/** @brief Macro to configure I2S APB1 clock source selection. + * @param __SOURCE__ specifies the I2S APB1 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB1 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB1CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB1CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB1CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB1CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB1_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S1SRC)) + +/** @brief Macro to configure I2S APB2 clock source selection. + * @param __SOURCE__ specifies the I2S APB2 clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_I2S_APB2_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC, (__SOURCE__))) + +/** @brief Macro to Get I2S APB2 clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPB2CLKSOURCE_PLLI2S: PLLI2S VCO output clock divided by PLLI2SR. + * @arg RCC_I2SAPB2CLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPB2CLKSOURCE_PLLR: PLL VCO Output divided by PLLR. + * @arg RCC_I2SAPB2CLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + */ +#define __HAL_RCC_GET_I2S_APB2_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2S2SRC)) + +/** @brief Macro to configure the PLL I2S clock source (PLLI2SCLK). + * @note This macro must be called before enabling the I2S APB clock. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_PLLI2SCLKSOURCE_PLLSRC: HSI or HSE depending from PLL source Clock. + * @arg RCC_PLLI2SCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin + * used as I2S clock source. + */ +#define __HAL_RCC_PLL_I2S_CONFIG(__SOURCE__) (*(__IO uint32_t *) RCC_PLLI2SCFGR_PLLI2SSRC_BB = (__SOURCE__)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the CLK48 clock. + * @param __SOURCE__ specifies the CLK48 clock source. + * This parameter can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLI2SQ: PLLI2S VCO Output divided by PLLI2SQ used as CLK48 clock. + */ +#define __HAL_RCC_CLK48_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the CLK48 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_CLK48CLKSOURCE_PLLQ: PLL VCO Output divided by PLLQ used as CLK48 clock. + * @arg RCC_CLK48CLKSOURCE_PLLI2SQ: PLLI2S VCO Output divided by PLLI2SQ used as CLK48 clock + */ +#define __HAL_RCC_GET_CLK48_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL)) + +/** @brief Macro to configure the SDIO clock. + * @param __SOURCE__ specifies the SDIO clock source. + * This parameter can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_SDIO_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the SDIO clock. + * @retval The clock source can be one of the following values: + * @arg RCC_SDIOCLKSOURCE_CLK48: CLK48 output used as SDIO clock. + * @arg RCC_SDIOCLKSOURCE_SYSCLK: System clock output used as SDIO clock. + */ +#define __HAL_RCC_GET_SDIO_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL)) + +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @brief Macro to configure I2S clock source selection. + * @param __SOURCE__ specifies the I2S clock source. + * This parameter can be one of the following values: + * @arg RCC_I2SAPBCLKSOURCE_PLLR: PLL VCO output clock divided by PLLR. + * @arg RCC_I2SAPBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPBCLKSOURCE_PLLSRC: HSI/HSE depends on PLLSRC. + */ +#define __HAL_RCC_I2S_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_I2SSRC, (__SOURCE__))) + +/** @brief Macro to Get I2S clock source selection. + * @retval The clock source can be one of the following values: + * @arg RCC_I2SAPBCLKSOURCE_PLLR: PLL VCO output clock divided by PLLR. + * @arg RCC_I2SAPBCLKSOURCE_EXT: External clock mapped on the I2S_CKIN pin. + * @arg RCC_I2SAPBCLKSOURCE_PLLSRC: HSI/HSE depends on PLLSRC. + */ +#define __HAL_RCC_GET_I2S_SOURCE() (READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_I2SSRC)) + +/** @brief Macro to configure the FMPI2C1 clock. + * @param __SOURCE__ specifies the FMPI2C1 clock source. + * This parameter can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_FMPI2C1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the FMPI2C1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_FMPI2C1CLKSOURCE_PCLK1: PCLK1 selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_SYSCLK: SYS clock selected as FMPI2C1 clock + * @arg RCC_FMPI2C1CLKSOURCE_HSI: HSI selected as FMPI2C1 clock + */ +#define __HAL_RCC_GET_FMPI2C1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL)) + +/** @brief Macro to configure the LPTIM1 clock. + * @param __SOURCE__ specifies the LPTIM1 clock source. + * This parameter can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK1 selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_LPTIM1_CONFIG(__SOURCE__) (MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, (uint32_t)(__SOURCE__))) + +/** @brief Macro to Get the LPTIM1 clock. + * @retval The clock source can be one of the following values: + * @arg RCC_LPTIM1CLKSOURCE_PCLK1: PCLK1 selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_HSI: HSI clock selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSI: LSI selected as LPTIM1 clock + * @arg RCC_LPTIM1CLKSOURCE_LSE: LSE selected as LPTIM1 clock + */ +#define __HAL_RCC_GET_LPTIM1_SOURCE() (READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** @brief Macro to configure the Timers clocks prescalers + * @note This feature is only available with STM32F429x/439x Devices. + * @param __PRESC__ specifies the Timers clocks prescalers selection + * This parameter can be one of the following values: + * @arg RCC_TIMPRES_DESACTIVATED: The Timers kernels clocks prescaler is + * equal to HPRE if PPREx is corresponding to division by 1 or 2, + * else it is equal to [(HPRE * PPREx) / 2] if PPREx is corresponding to + * division by 4 or more. + * @arg RCC_TIMPRES_ACTIVATED: The Timers kernels clocks prescaler is + * equal to HPRE if PPREx is corresponding to division by 1, 2 or 4, + * else it is equal to [(HPRE * PPREx) / 4] if PPREx is corresponding + * to division by 8 or more. + */ +#define __HAL_RCC_TIMCLKPRESCALER(__PRESC__) (*(__IO uint32_t *) RCC_DCKCFGR_TIMPRE_BB = (__PRESC__)) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx) || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE ||\ + STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx ||\ + STM32F423xx */ + +/*----------------------------------------------------------------------------*/ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** @brief Enable PLLSAI_RDY interrupt. + */ +#define __HAL_RCC_PLLSAI_ENABLE_IT() (RCC->CIR |= (RCC_CIR_PLLSAIRDYIE)) + +/** @brief Disable PLLSAI_RDY interrupt. + */ +#define __HAL_RCC_PLLSAI_DISABLE_IT() (RCC->CIR &= ~(RCC_CIR_PLLSAIRDYIE)) + +/** @brief Clear the PLLSAI RDY interrupt pending bits. + */ +#define __HAL_RCC_PLLSAI_CLEAR_IT() (RCC->CIR |= (RCC_CIR_PLLSAIRDYF)) + +/** @brief Check the PLLSAI RDY interrupt has occurred or not. + * @retval The new state (TRUE or FALSE). + */ +#define __HAL_RCC_PLLSAI_GET_IT() ((RCC->CIR & (RCC_CIR_PLLSAIRDYIE)) == (RCC_CIR_PLLSAIRDYIE)) + +/** @brief Check PLLSAI RDY flag is set or not. + * @retval The new state (TRUE or FALSE). + */ +#define __HAL_RCC_PLLSAI_GET_FLAG() ((RCC->CR & (RCC_CR_PLLSAIRDY)) == (RCC_CR_PLLSAIRDY)) + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** @brief Macros to enable or disable the RCC MCO1 feature. + */ +#define __HAL_RCC_MCO1_ENABLE() (*(__IO uint32_t *) RCC_CFGR_MCO1EN_BB = ENABLE) +#define __HAL_RCC_MCO1_DISABLE() (*(__IO uint32_t *) RCC_CFGR_MCO1EN_BB = DISABLE) + +/** @brief Macros to enable or disable the RCC MCO2 feature. + */ +#define __HAL_RCC_MCO2_ENABLE() (*(__IO uint32_t *) RCC_CFGR_MCO2EN_BB = ENABLE) +#define __HAL_RCC_MCO2_DISABLE() (*(__IO uint32_t *) RCC_CFGR_MCO2EN_BB = DISABLE) + +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup RCCEx_Exported_Functions + * @{ + */ + +/** @addtogroup RCCEx_Exported_Functions_Group1 + * @{ + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit); + +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk); + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +void HAL_RCCEx_SelectLSEMode(uint8_t Mode); +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ +#if defined(RCC_PLLI2S_SUPPORT) +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit); +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void); +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI(RCC_PLLSAIInitTypeDef *PLLSAIInit); +HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI(void); +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Constants RCCEx Private Constants + * @{ + */ + +/** @defgroup RCCEx_BitAddress_AliasRegion RCC BitAddress AliasRegion + * @brief RCC registers bit address in the alias region + * @{ + */ +/* --- CR Register ---*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/* Alias word address of PLLSAION bit */ +#define RCC_PLLSAION_BIT_NUMBER 0x1CU +#define RCC_CR_PLLSAION_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLSAION_BIT_NUMBER * 4U)) + +#define PLLSAI_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/* Alias word address of PLLI2SON bit */ +#define RCC_PLLI2SON_BIT_NUMBER 0x1AU +#define RCC_CR_PLLI2SON_BB (PERIPH_BB_BASE + (RCC_CR_OFFSET * 32U) + (RCC_PLLI2SON_BIT_NUMBER * 4U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || + STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/* --- DCKCFGR Register ---*/ +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\ + defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/* Alias word address of TIMPRE bit */ +#define RCC_DCKCFGR_OFFSET (RCC_OFFSET + 0x8CU) +#define RCC_TIMPRE_BIT_NUMBER 0x18U +#define RCC_DCKCFGR_TIMPRE_BB (PERIPH_BB_BASE + (RCC_DCKCFGR_OFFSET * 32U) + (RCC_TIMPRE_BIT_NUMBER * 4U)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F410xx || STM32F401xC ||\ + STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ + STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/* --- CFGR Register ---*/ +#define RCC_CFGR_OFFSET (RCC_OFFSET + 0x08U) +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) +/* Alias word address of I2SSRC bit */ +#define RCC_I2SSRC_BIT_NUMBER 0x17U +#define RCC_CFGR_I2SSRC_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_I2SSRC_BIT_NUMBER * 4U)) + +#define PLLI2S_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/* --- PLLI2SCFGR Register ---*/ +#define RCC_PLLI2SCFGR_OFFSET (RCC_OFFSET + 0x84U) +/* Alias word address of PLLI2SSRC bit */ +#define RCC_PLLI2SSRC_BIT_NUMBER 0x16U +#define RCC_PLLI2SCFGR_PLLI2SSRC_BB (PERIPH_BB_BASE + (RCC_PLLI2SCFGR_OFFSET * 32U) + (RCC_PLLI2SSRC_BIT_NUMBER * 4U)) + +#define PLLI2S_TIMEOUT_VALUE 2U /* Timeout value fixed to 2 ms */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx | STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/* Alias word address of MCO1EN bit */ +#define RCC_MCO1EN_BIT_NUMBER 0x8U +#define RCC_CFGR_MCO1EN_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_MCO1EN_BIT_NUMBER * 4U)) + +/* Alias word address of MCO2EN bit */ +#define RCC_MCO2EN_BIT_NUMBER 0x9U +#define RCC_CFGR_MCO2EN_BB (PERIPH_BB_BASE + (RCC_CFGR_OFFSET * 32U) + (RCC_MCO2EN_BIT_NUMBER * 4U)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#define PLL_TIMEOUT_VALUE 2U /* 2 ms */ +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup RCCEx_Private_Macros RCCEx Private Macros + * @{ + */ +/** @defgroup RCCEx_IS_RCC_Definitions RCC Private macros to check input parameters + * @{ + */ +#define IS_RCC_PLLN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) +#define IS_RCC_PLLI2SN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000007FU)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00000007U)) +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000000FU)) +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x0000001FU)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F446xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00000FFFU)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x000001FFU)) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x000003FFU)) +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PERIPHCLOCK(SELECTION) ((1U <= (SELECTION)) && ((SELECTION) <= 0x00007FFFU)) +#endif /* STM32F413xx || STM32F423xx */ + +#define IS_RCC_PLLI2SR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PLLI2SQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLSAIN_VALUE(VALUE) ((50U <= (VALUE)) && ((VALUE) <= 432U)) + +#define IS_RCC_PLLSAIQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLSAIR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLSAI_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLI2S_DIVQ_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLSAI_DIVR_VALUE(VALUE) (((VALUE) == RCC_PLLSAIDIVR_2) ||\ + ((VALUE) == RCC_PLLSAIDIVR_4) ||\ + ((VALUE) == RCC_PLLSAIDIVR_8) ||\ + ((VALUE) == RCC_PLLSAIDIVR_16)) +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PLLI2SM_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 63U)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) +#endif /* STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_LPTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPTIM1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)) + +#define IS_RCC_I2SAPBCLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPBCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPBCLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPBCLKSOURCE_PLLSRC)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F446xx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLI2SP_VALUE(VALUE) (((VALUE) == RCC_PLLI2SP_DIV2) ||\ + ((VALUE) == RCC_PLLI2SP_DIV4) ||\ + ((VALUE) == RCC_PLLI2SP_DIV6) ||\ + ((VALUE) == RCC_PLLI2SP_DIV8)) + +#define IS_RCC_PLLSAIM_VALUE(VALUE) ((VALUE) <= 63U) + +#define IS_RCC_PLLSAIP_VALUE(VALUE) (((VALUE) == RCC_PLLSAIP_DIV2) ||\ + ((VALUE) == RCC_PLLSAIP_DIV4) ||\ + ((VALUE) == RCC_PLLSAIP_DIV6) ||\ + ((VALUE) == RCC_PLLSAIP_DIV8)) + +#define IS_RCC_SAI1CLKSOURCE(SOURCE) (((SOURCE) == RCC_SAI1CLKSOURCE_PLLSAI) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAI1CLKSOURCE_EXT)) + +#define IS_RCC_SAI2CLKSOURCE(SOURCE) (((SOURCE) == RCC_SAI2CLKSOURCE_PLLSAI) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAI2CLKSOURCE_PLLSRC)) + +#define IS_RCC_I2SAPB1CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLSRC)) + + #define IS_RCC_I2SAPB2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLSRC)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_CECCLKSOURCE(SOURCE) (((SOURCE) == RCC_CECCLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_CECCLKSOURCE_LSE)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLSAIP)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_SPDIFRXCLKSOURCE(SOURCE) (((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SPDIFRXCLKSOURCE_PLLI2SP)) +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLSAIP_VALUE(VALUE) (((VALUE) == RCC_PLLSAIP_DIV2) ||\ + ((VALUE) == RCC_PLLSAIP_DIV4) ||\ + ((VALUE) == RCC_PLLSAIP_DIV6) ||\ + ((VALUE) == RCC_PLLSAIP_DIV8)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLSAIP)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_DSIBYTELANECLKSOURCE(SOURCE) (((SOURCE) == RCC_DSICLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_DSICLKSOURCE_DSIPHY)) + +#define IS_RCC_LSE_MODE(MODE) (((MODE) == RCC_LSE_LOWPOWER_MODE) ||\ + ((MODE) == RCC_LSE_HIGHDRIVE_MODE)) +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_PLLI2SQ_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 15U)) + +#define IS_RCC_PLLR_VALUE(VALUE) ((2U <= (VALUE)) && ((VALUE) <= 7U)) + +#define IS_RCC_PLLI2SCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLI2SCLKSOURCE_PLLSRC) || \ + ((__SOURCE__) == RCC_PLLI2SCLKSOURCE_EXT)) + +#define IS_RCC_I2SAPB1CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB1CLKSOURCE_PLLSRC)) + + #define IS_RCC_I2SAPB2CLKSOURCE(SOURCE) (((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLI2S) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_I2SAPB2CLKSOURCE_PLLSRC)) + +#define IS_RCC_FMPI2C1CLKSOURCE(SOURCE) (((SOURCE) == RCC_FMPI2C1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_SYSCLK) ||\ + ((SOURCE) == RCC_FMPI2C1CLKSOURCE_HSI)) + +#define IS_RCC_CLK48CLKSOURCE(SOURCE) (((SOURCE) == RCC_CLK48CLKSOURCE_PLLQ) ||\ + ((SOURCE) == RCC_CLK48CLKSOURCE_PLLI2SQ)) + +#define IS_RCC_SDIOCLKSOURCE(SOURCE) (((SOURCE) == RCC_SDIOCLKSOURCE_CLK48) ||\ + ((SOURCE) == RCC_SDIOCLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM1CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM1CLKSOURCE_PCLK2) || \ + ((__SOURCE__) == RCC_DFSDM1CLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM1AUDIOCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_I2S1) || \ + ((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_I2S2)) + +#if defined(STM32F413xx) || defined(STM32F423xx) +#define IS_RCC_DFSDM2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM2CLKSOURCE_PCLK2) || \ + ((__SOURCE__) == RCC_DFSDM2CLKSOURCE_SYSCLK)) + +#define IS_RCC_DFSDM2AUDIOCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_DFSDM2AUDIOCLKSOURCE_I2S1) || \ + ((__SOURCE__) == RCC_DFSDM2AUDIOCLKSOURCE_I2S2)) + +#define IS_RCC_LPTIM1CLKSOURCE(SOURCE) (((SOURCE) == RCC_LPTIM1CLKSOURCE_PCLK1) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_HSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSI) ||\ + ((SOURCE) == RCC_LPTIM1CLKSOURCE_LSE)) + +#define IS_RCC_SAIACLKSOURCE(SOURCE) (((SOURCE) == RCC_SAIACLKSOURCE_PLLI2SR) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAIACLKSOURCE_PLLSRC)) + +#define IS_RCC_SAIBCLKSOURCE(SOURCE) (((SOURCE) == RCC_SAIBCLKSOURCE_PLLI2SR) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_EXT) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_PLLR) ||\ + ((SOURCE) == RCC_SAIBCLKSOURCE_PLLSRC)) + +#define IS_RCC_PLL_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#define IS_RCC_PLLI2S_DIVR_VALUE(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 32U)) + +#endif /* STM32F413xx || STM32F423xx */ +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ + defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ + defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F413xx) || defined(STM32F423xx) + +#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2SOURCE_SYSCLK) || ((SOURCE) == RCC_MCO2SOURCE_PLLI2SCLK)|| \ + ((SOURCE) == RCC_MCO2SOURCE_HSE) || ((SOURCE) == RCC_MCO2SOURCE_PLLCLK)) + +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || + STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || \ + STM32F412Rx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +#define IS_RCC_MCO2SOURCE(SOURCE) (((SOURCE) == RCC_MCO2SOURCE_SYSCLK) || ((SOURCE) == RCC_MCO2SOURCE_I2SCLK)|| \ + ((SOURCE) == RCC_MCO2SOURCE_HSE) || ((SOURCE) == RCC_MCO2SOURCE_PLLCLK)) +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_RCC_EX_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h new file mode 100644 index 0000000..8c81414 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h @@ -0,0 +1,2146 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim.h + * @author MCD Application Team + * @brief Header file of TIM HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_TIM_H +#define STM32F4xx_HAL_TIM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIM + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIM_Exported_Types TIM Exported Types + * @{ + */ + +/** + * @brief TIM Time base Configuration Structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t CounterMode; /*!< Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint32_t Period; /*!< Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ + + uint32_t ClockDivision; /*!< Specifies the clock division. + This parameter can be a value of @ref TIM_ClockDivision */ + + uint32_t 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 + GP timers: this parameter must be a number between Min_Data = 0x00 and + Max_Data = 0xFF. + Advanced timers: this parameter must be a number between Min_Data = 0x0000 and + Max_Data = 0xFFFF. */ + + uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload. + This parameter can be a value of @ref TIM_AutoReloadPreload */ +} TIM_Base_InitTypeDef; + +/** + * @brief TIM Output Compare Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCFastMode; /*!< Specifies the Fast mode state. + This parameter can be a value of @ref TIM_Output_Fast_State + @note This parameter is valid only in PWM1 and PWM2 mode. */ + + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ +} TIM_OC_InitTypeDef; + +/** + * @brief TIM One Pulse Mode Configuration Structure definition + */ +typedef struct +{ + uint32_t OCMode; /*!< Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t OCPolarity; /*!< Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint32_t OCNPolarity; /*!< Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for timer instances supporting break feature. */ + + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_OnePulse_InitTypeDef; + +/** + * @brief TIM Input Capture Configuration Structure definition + */ +typedef struct +{ + uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t ICSelection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t ICFilter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_IC_InitTypeDef; + +/** + * @brief TIM Encoder Configuration Structure definition + */ +typedef struct +{ + uint32_t EncoderMode; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Mode */ + + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC1Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Encoder_Input_Polarity */ + + uint32_t IC2Selection; /*!< Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC2Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_Encoder_InitTypeDef; + +/** + * @brief Clock Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClockSource; /*!< TIM clock sources + This parameter can be a value of @ref TIM_Clock_Source */ + uint32_t ClockPolarity; /*!< TIM clock polarity + This parameter can be a value of @ref TIM_Clock_Polarity */ + uint32_t ClockPrescaler; /*!< TIM clock prescaler + This parameter can be a value of @ref TIM_Clock_Prescaler */ + uint32_t ClockFilter; /*!< TIM clock filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClockConfigTypeDef; + +/** + * @brief TIM Clear Input Configuration Handle Structure definition + */ +typedef struct +{ + uint32_t ClearInputState; /*!< TIM clear Input state + This parameter can be ENABLE or DISABLE */ + uint32_t ClearInputSource; /*!< TIM clear Input sources + This parameter can be a value of @ref TIM_ClearInput_Source */ + uint32_t ClearInputPolarity; /*!< TIM Clear Input polarity + This parameter can be a value of @ref TIM_ClearInput_Polarity */ + uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler + This parameter must be 0: When OCRef clear feature is used with ETR source, + ETR prescaler must be off */ + uint32_t ClearInputFilter; /*!< TIM Clear Input filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ +} TIM_ClearInputConfigTypeDef; + +/** + * @brief TIM Master configuration Structure definition + */ +typedef struct +{ + uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection + This parameter can be a value of @ref TIM_Master_Mode_Selection */ + uint32_t MasterSlaveMode; /*!< Master/slave mode selection + This parameter can be a value of @ref TIM_Master_Slave_Mode + @note When the Master/slave mode is enabled, the effect of + an event on the trigger input (TRGI) is delayed to allow a + perfect synchronization between the current timer and its + slaves (through TRGO). It is not mandatory in case of timer + synchronization mode. */ +} TIM_MasterConfigTypeDef; + +/** + * @brief TIM Slave configuration Structure definition + */ +typedef struct +{ + uint32_t SlaveMode; /*!< Slave mode selection + This parameter can be a value of @ref TIM_Slave_Mode */ + uint32_t InputTrigger; /*!< Input Trigger source + This parameter can be a value of @ref TIM_Trigger_Selection */ + uint32_t TriggerPolarity; /*!< Input Trigger polarity + This parameter can be a value of @ref TIM_Trigger_Polarity */ + uint32_t TriggerPrescaler; /*!< Input trigger prescaler + This parameter can be a value of @ref TIM_Trigger_Prescaler */ + uint32_t TriggerFilter; /*!< Input trigger filter + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + +} TIM_SlaveConfigTypeDef; + +/** + * @brief TIM Break input(s) and Dead time configuration Structure definition + * @note 2 break inputs can be configured (BKIN and BKIN2) with configurable + * filter and polarity. + */ +typedef struct +{ + uint32_t OffStateRunMode; /*!< TIM off state in run mode, This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ + + uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode, This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ + + uint32_t LockLevel; /*!< TIM Lock level, This parameter can be a value of @ref TIM_Lock_level */ + + uint32_t DeadTime; /*!< TIM dead Time, This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ + + uint32_t BreakState; /*!< TIM Break State, This parameter can be a value of @ref TIM_Break_Input_enable_disable */ + + uint32_t BreakPolarity; /*!< TIM Break input polarity, This parameter can be a value of @ref TIM_Break_Polarity */ + + uint32_t BreakFilter; /*!< Specifies the break input filter.This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state, This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ + +} TIM_BreakDeadTimeConfigTypeDef; + +/** + * @brief HAL State structures definition + */ +typedef enum +{ + HAL_TIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ + HAL_TIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ + HAL_TIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ + HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ + HAL_TIM_STATE_ERROR = 0x04U /*!< Reception process is ongoing */ +} HAL_TIM_StateTypeDef; + +/** + * @brief TIM Channel States definition + */ +typedef enum +{ + HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state */ + HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use */ + HAL_TIM_CHANNEL_STATE_BUSY = 0x02U, /*!< An internal process is ongoing on the TIM channel */ +} HAL_TIM_ChannelStateTypeDef; + +/** + * @brief DMA Burst States definition + */ +typedef enum +{ + HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */ + HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */ + HAL_DMA_BURST_STATE_BUSY = 0x02U, /*!< Ongoing DMA Burst */ +} HAL_TIM_DMABurstStateTypeDef; + +/** + * @brief HAL Active channel structures definition + */ +typedef enum +{ + HAL_TIM_ACTIVE_CHANNEL_1 = 0x01U, /*!< The active channel is 1 */ + HAL_TIM_ACTIVE_CHANNEL_2 = 0x02U, /*!< The active channel is 2 */ + HAL_TIM_ACTIVE_CHANNEL_3 = 0x04U, /*!< The active channel is 3 */ + HAL_TIM_ACTIVE_CHANNEL_4 = 0x08U, /*!< The active channel is 4 */ + HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U /*!< All active channels cleared */ +} HAL_TIM_ActiveChannel; + +/** + * @brief TIM Time Base Handle Structure definition + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +typedef struct __TIM_HandleTypeDef +#else +typedef struct +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +{ + TIM_TypeDef *Instance; /*!< Register base address */ + TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */ + HAL_TIM_ActiveChannel Channel; /*!< Active channel */ + DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array + This array is accessed by a @ref DMA_Handle_index */ + HAL_LockTypeDef Lock; /*!< Locking object */ + __IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelState[4]; /*!< TIM channel operation state */ + __IO HAL_TIM_ChannelStateTypeDef ChannelNState[4]; /*!< TIM complementary channel operation state */ + __IO HAL_TIM_DMABurstStateTypeDef DMABurstState; /*!< DMA burst operation state */ + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + void (* Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp Init Callback */ + void (* Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Base Msp DeInit Callback */ + void (* IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp Init Callback */ + void (* IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM IC Msp DeInit Callback */ + void (* OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp Init Callback */ + void (* OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM OC Msp DeInit Callback */ + void (* PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp Init Callback */ + void (* PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Msp DeInit Callback */ + void (* OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp Init Callback */ + void (* OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM One Pulse Msp DeInit Callback */ + void (* Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp Init Callback */ + void (* Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Encoder Msp DeInit Callback */ + void (* HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp Init Callback */ + void (* HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Hall Sensor Msp DeInit Callback */ + void (* PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed Callback */ + void (* PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Period Elapsed half complete Callback */ + void (* TriggerCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger Callback */ + void (* TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Trigger half complete Callback */ + void (* IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture Callback */ + void (* IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Input Capture half complete Callback */ + void (* OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Output Compare Delay Elapsed Callback */ + void (* PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished Callback */ + void (* PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback */ + void (* ErrorCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Error Callback */ + void (* CommutationCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation Callback */ + void (* CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Commutation half complete Callback */ + void (* BreakCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM Break Callback */ +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} TIM_HandleTypeDef; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief HAL TIM Callback ID enumeration definition + */ +typedef enum +{ + HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID */ + , HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID */ + , HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID */ + , HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID */ + , HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID */ + , HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID */ + , HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID */ + , HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID */ + , HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID */ + , HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID */ + , HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID */ + , HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID */ + , HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID */ + , HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID */ + + , HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID */ + , HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID */ + , HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID */ + , HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID */ + , HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID */ + , HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID */ + , HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID */ + , HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID */ +} HAL_TIM_CallbackIDTypeDef; + +/** + * @brief HAL TIM Callback pointer definition + */ +typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */ + +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIM_Exported_Constants TIM Exported Constants + * @{ + */ + +/** @defgroup TIM_ClearInput_Source TIM Clear Input Source + * @{ + */ +#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */ +#define TIM_CLEARINPUTSOURCE_ETR 0x00000001U /*!< OCREF_CLR is connected to ETRF input */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Base_address TIM DMA Base Address + * @{ + */ +#define TIM_DMABASE_CR1 0x00000000U +#define TIM_DMABASE_CR2 0x00000001U +#define TIM_DMABASE_SMCR 0x00000002U +#define TIM_DMABASE_DIER 0x00000003U +#define TIM_DMABASE_SR 0x00000004U +#define TIM_DMABASE_EGR 0x00000005U +#define TIM_DMABASE_CCMR1 0x00000006U +#define TIM_DMABASE_CCMR2 0x00000007U +#define TIM_DMABASE_CCER 0x00000008U +#define TIM_DMABASE_CNT 0x00000009U +#define TIM_DMABASE_PSC 0x0000000AU +#define TIM_DMABASE_ARR 0x0000000BU +#define TIM_DMABASE_RCR 0x0000000CU +#define TIM_DMABASE_CCR1 0x0000000DU +#define TIM_DMABASE_CCR2 0x0000000EU +#define TIM_DMABASE_CCR3 0x0000000FU +#define TIM_DMABASE_CCR4 0x00000010U +#define TIM_DMABASE_BDTR 0x00000011U +#define TIM_DMABASE_DCR 0x00000012U +#define TIM_DMABASE_DMAR 0x00000013U +/** + * @} + */ + +/** @defgroup TIM_Event_Source TIM Event Source + * @{ + */ +#define TIM_EVENTSOURCE_UPDATE TIM_EGR_UG /*!< Reinitialize the counter and generates an update of the registers */ +#define TIM_EVENTSOURCE_CC1 TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */ +#define TIM_EVENTSOURCE_CC2 TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */ +#define TIM_EVENTSOURCE_CC3 TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */ +#define TIM_EVENTSOURCE_CC4 TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */ +#define TIM_EVENTSOURCE_COM TIM_EGR_COMG /*!< A commutation event is generated */ +#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG /*!< A trigger event is generated */ +#define TIM_EVENTSOURCE_BREAK TIM_EGR_BG /*!< A break event is generated */ +/** + * @} + */ + +/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity + * @{ + */ +#define TIM_INPUTCHANNELPOLARITY_RISING 0x00000000U /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_FALLING TIM_CCER_CC1P /*!< Polarity for TIx source */ +#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Polarity TIM ETR Polarity + * @{ + */ +#define TIM_ETRPOLARITY_INVERTED TIM_SMCR_ETP /*!< Polarity for ETR source */ +#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U /*!< Polarity for ETR source */ +/** + * @} + */ + +/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler + * @{ + */ +#define TIM_ETRPRESCALER_DIV1 0x00000000U /*!< No prescaler is used */ +#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */ +#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */ +#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS /*!< ETR input source is divided by 8 */ +/** + * @} + */ + +/** @defgroup TIM_Counter_Mode TIM Counter Mode + * @{ + */ +#define TIM_COUNTERMODE_UP 0x00000000U /*!< Counter used as up-counter */ +#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR /*!< Counter used as down-counter */ +#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1 */ +#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2 */ +#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS /*!< Center-aligned mode 3 */ +/** + * @} + */ + +/** @defgroup TIM_ClockDivision TIM Clock Division + * @{ + */ +#define TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< Clock division: tDTS=tCK_INT */ +#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */ +#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_State TIM Output Compare State + * @{ + */ +#define TIM_OUTPUTSTATE_DISABLE 0x00000000U /*!< Capture/Compare 1 output disabled */ +#define TIM_OUTPUTSTATE_ENABLE TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */ +/** + * @} + */ + +/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload + * @{ + */ +#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U /*!< TIMx_ARR register is not buffered */ +#define TIM_AUTORELOAD_PRELOAD_ENABLE TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */ + +/** + * @} + */ + +/** @defgroup TIM_Output_Fast_State TIM Output Fast State + * @{ + */ +#define TIM_OCFAST_DISABLE 0x00000000U /*!< Output Compare fast disable */ +#define TIM_OCFAST_ENABLE TIM_CCMR1_OC1FE /*!< Output Compare fast enable */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State + * @{ + */ +#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U /*!< OCxN is disabled */ +#define TIM_OUTPUTNSTATE_ENABLE TIM_CCER_CC1NE /*!< OCxN is enabled */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity + * @{ + */ +#define TIM_OCPOLARITY_HIGH 0x00000000U /*!< Capture/Compare output polarity */ +#define TIM_OCPOLARITY_LOW TIM_CCER_CC1P /*!< Capture/Compare output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity + * @{ + */ +#define TIM_OCNPOLARITY_HIGH 0x00000000U /*!< Capture/Compare complementary output polarity */ +#define TIM_OCNPOLARITY_LOW TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State + * @{ + */ +#define TIM_OCIDLESTATE_SET TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */ +#define TIM_OCIDLESTATE_RESET 0x00000000U /*!< Output Idle state: OCx=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State + * @{ + */ +#define TIM_OCNIDLESTATE_SET TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */ +#define TIM_OCNIDLESTATE_RESET 0x00000000U /*!< Complementary output Idle state: OCxN=0 when MOE=0 */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity + * @{ + */ +#define TIM_ICPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Capture triggered by rising edge on timer input */ +#define TIM_ICPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Capture triggered by falling edge on timer input */ +#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity + * @{ + */ +#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */ +#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection + * @{ + */ +#define TIM_ICSELECTION_DIRECTTI TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSELECTION_INDIRECTTI TIM_CCMR1_CC1S_1 /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */ +#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */ +/** + * @} + */ + +/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler + * @{ + */ +#define TIM_ICPSC_DIV1 0x00000000U /*!< Capture performed each time an edge is detected on the capture input */ +#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events */ +#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events */ +#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC /*!< Capture performed once every 8 events */ +/** + * @} + */ + +/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode + * @{ + */ +#define TIM_OPMODE_SINGLE TIM_CR1_OPM /*!< Counter stops counting at the next update event */ +#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event */ +/** + * @} + */ + +/** @defgroup TIM_Encoder_Mode TIM Encoder Mode + * @{ + */ +#define TIM_ENCODERMODE_TI1 TIM_SMCR_SMS_0 /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level */ +#define TIM_ENCODERMODE_TI2 TIM_SMCR_SMS_1 /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */ +#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */ +/** + * @} + */ + +/** @defgroup TIM_Interrupt_definition TIM interrupt Definition + * @{ + */ +#define TIM_IT_UPDATE TIM_DIER_UIE /*!< Update interrupt */ +#define TIM_IT_CC1 TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */ +#define TIM_IT_CC2 TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */ +#define TIM_IT_CC3 TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */ +#define TIM_IT_CC4 TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */ +#define TIM_IT_COM TIM_DIER_COMIE /*!< Commutation interrupt */ +#define TIM_IT_TRIGGER TIM_DIER_TIE /*!< Trigger interrupt */ +#define TIM_IT_BREAK TIM_DIER_BIE /*!< Break interrupt */ +/** + * @} + */ + +/** @defgroup TIM_Commutation_Source TIM Commutation Source + * @{ + */ +#define TIM_COMMUTATION_TRGI TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */ +#define TIM_COMMUTATION_SOFTWARE 0x00000000U /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */ +/** + * @} + */ + +/** @defgroup TIM_DMA_sources TIM DMA Sources + * @{ + */ +#define TIM_DMA_UPDATE TIM_DIER_UDE /*!< DMA request is triggered by the update event */ +#define TIM_DMA_CC1 TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */ +#define TIM_DMA_CC2 TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */ +#define TIM_DMA_CC3 TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */ +#define TIM_DMA_CC4 TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */ +#define TIM_DMA_COM TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */ +#define TIM_DMA_TRIGGER TIM_DIER_TDE /*!< DMA request is triggered by the trigger event */ +/** + * @} + */ + +/** @defgroup TIM_CC_DMA_Request CCx DMA request selection + * @{ + */ +#define TIM_CCDMAREQUEST_CC 0x00000000U /*!< CCx DMA request sent when capture or compare match event occurs */ +#define TIM_CCDMAREQUEST_UPDATE TIM_CR2_CCDS /*!< CCx DMA requests sent when update event occurs */ +/** + * @} + */ + +/** @defgroup TIM_Flag_definition TIM Flag Definition + * @{ + */ +#define TIM_FLAG_UPDATE TIM_SR_UIF /*!< Update interrupt flag */ +#define TIM_FLAG_CC1 TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */ +#define TIM_FLAG_CC2 TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */ +#define TIM_FLAG_CC3 TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */ +#define TIM_FLAG_CC4 TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */ +#define TIM_FLAG_COM TIM_SR_COMIF /*!< Commutation interrupt flag */ +#define TIM_FLAG_TRIGGER TIM_SR_TIF /*!< Trigger interrupt flag */ +#define TIM_FLAG_BREAK TIM_SR_BIF /*!< Break interrupt flag */ +#define TIM_FLAG_CC1OF TIM_SR_CC1OF /*!< Capture 1 overcapture flag */ +#define TIM_FLAG_CC2OF TIM_SR_CC2OF /*!< Capture 2 overcapture flag */ +#define TIM_FLAG_CC3OF TIM_SR_CC3OF /*!< Capture 3 overcapture flag */ +#define TIM_FLAG_CC4OF TIM_SR_CC4OF /*!< Capture 4 overcapture flag */ +/** + * @} + */ + +/** @defgroup TIM_Channel TIM Channel + * @{ + */ +#define TIM_CHANNEL_1 0x00000000U /*!< Capture/compare channel 1 identifier */ +#define TIM_CHANNEL_2 0x00000004U /*!< Capture/compare channel 2 identifier */ +#define TIM_CHANNEL_3 0x00000008U /*!< Capture/compare channel 3 identifier */ +#define TIM_CHANNEL_4 0x0000000CU /*!< Capture/compare channel 4 identifier */ +#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Source TIM Clock Source + * @{ + */ +#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source */ +#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF /*!< External clock source mode 1 (ETRF) */ +#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2 */ +#define TIM_CLOCKSOURCE_TI1ED TIM_TS_TI1F_ED /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */ +#define TIM_CLOCKSOURCE_TI1 TIM_TS_TI1FP1 /*!< External clock source mode 1 (TTI1FP1) */ +#define TIM_CLOCKSOURCE_TI2 TIM_TS_TI2FP2 /*!< External clock source mode 1 (TTI2FP2) */ +#define TIM_CLOCKSOURCE_ITR0 TIM_TS_ITR0 /*!< External clock source mode 1 (ITR0) */ +#define TIM_CLOCKSOURCE_ITR1 TIM_TS_ITR1 /*!< External clock source mode 1 (ITR1) */ +#define TIM_CLOCKSOURCE_ITR2 TIM_TS_ITR2 /*!< External clock source mode 1 (ITR2) */ +#define TIM_CLOCKSOURCE_ITR3 TIM_TS_ITR3 /*!< External clock source mode 1 (ITR3) */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Polarity TIM Clock Polarity + * @{ + */ +#define TIM_CLOCKPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx clock sources */ +#define TIM_CLOCKPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIx clock sources */ +#define TIM_CLOCKPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */ +/** + * @} + */ + +/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler + * @{ + */ +#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */ +#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */ +#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity + * @{ + */ +#define TIM_CLEARINPUTPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx pin */ +#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */ +/** + * @} + */ + +/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler + * @{ + */ +#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */ +#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state + * @{ + */ +#define TIM_OSSR_ENABLE TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSR_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ + +/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state + * @{ + */ +#define TIM_OSSI_ENABLE TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer) */ +#define TIM_OSSI_DISABLE 0x00000000U /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */ +/** + * @} + */ +/** @defgroup TIM_Lock_level TIM Lock level + * @{ + */ +#define TIM_LOCKLEVEL_OFF 0x00000000U /*!< LOCK OFF */ +#define TIM_LOCKLEVEL_1 TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */ +#define TIM_LOCKLEVEL_2 TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */ +#define TIM_LOCKLEVEL_3 TIM_BDTR_LOCK /*!< LOCK Level 3 */ +/** + * @} + */ + +/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable + * @{ + */ +#define TIM_BREAK_ENABLE TIM_BDTR_BKE /*!< Break input BRK is enabled */ +#define TIM_BREAK_DISABLE 0x00000000U /*!< Break input BRK is disabled */ +/** + * @} + */ + +/** @defgroup TIM_Break_Polarity TIM Break Input Polarity + * @{ + */ +#define TIM_BREAKPOLARITY_LOW 0x00000000U /*!< Break input BRK is active low */ +#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */ +/** + * @} + */ + +/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable + * @{ + */ +#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */ +#define TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event (if none of the break inputs BRK and BRK2 is active) */ +/** + * @} + */ + +/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection + * @{ + */ +#define TIM_TRGO_RESET 0x00000000U /*!< TIMx_EGR.UG bit is used as trigger output (TRGO) */ +#define TIM_TRGO_ENABLE TIM_CR2_MMS_0 /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO) */ +#define TIM_TRGO_UPDATE TIM_CR2_MMS_1 /*!< Update event is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1 (TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< Capture or a compare match 1 is used as trigger output (TRGO) */ +#define TIM_TRGO_OC1REF TIM_CR2_MMS_2 /*!< OC1REF signal is used as trigger output (TRGO) */ +#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0) /*!< OC2REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1) /*!< OC3REF signal is used as trigger output(TRGO) */ +#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO) */ +/** + * @} + */ + +/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode + * @{ + */ +#define TIM_MASTERSLAVEMODE_ENABLE TIM_SMCR_MSM /*!< No action */ +#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U /*!< Master/slave mode is selected */ +/** + * @} + */ + +/** @defgroup TIM_Slave_Mode TIM Slave mode + * @{ + */ +#define TIM_SLAVEMODE_DISABLE 0x00000000U /*!< Slave mode disabled */ +#define TIM_SLAVEMODE_RESET TIM_SMCR_SMS_2 /*!< Reset Mode */ +#define TIM_SLAVEMODE_GATED (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0) /*!< Gated Mode */ +#define TIM_SLAVEMODE_TRIGGER (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1) /*!< Trigger Mode */ +#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1 */ +/** + * @} + */ + +/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes + * @{ + */ +#define TIM_OCMODE_TIMING 0x00000000U /*!< Frozen */ +#define TIM_OCMODE_ACTIVE TIM_CCMR1_OC1M_0 /*!< Set channel to active level on match */ +#define TIM_OCMODE_INACTIVE TIM_CCMR1_OC1M_1 /*!< Set channel to inactive level on match */ +#define TIM_OCMODE_TOGGLE (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< Toggle */ +#define TIM_OCMODE_PWM1 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1) /*!< PWM mode 1 */ +#define TIM_OCMODE_PWM2 (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2 */ +#define TIM_OCMODE_FORCED_ACTIVE (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0) /*!< Force active level */ +#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2 /*!< Force inactive level */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Selection TIM Trigger Selection + * @{ + */ +#define TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) */ +#define TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) */ +#define TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) */ +#define TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) */ +#define TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) */ +#define TIM_TS_TI1FP1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 1 (TI1FP1) */ +#define TIM_TS_TI2FP2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered Timer Input 2 (TI2FP2) */ +#define TIM_TS_ETRF (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */ +#define TIM_TS_NONE 0x0000FFFFU /*!< No trigger selected */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity + * @{ + */ +#define TIM_TRIGGERPOLARITY_INVERTED TIM_ETRPOLARITY_INVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx trigger sources */ +#define TIM_TRIGGERPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +#define TIM_TRIGGERPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */ +/** + * @} + */ + +/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler + * @{ + */ +#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used */ +#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */ +#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */ +#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */ +/** + * @} + */ + +/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection + * @{ + */ +#define TIM_TI1SELECTION_CH1 0x00000000U /*!< The TIMx_CH1 pin is connected to TI1 input */ +#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */ +/** + * @} + */ + +/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length + * @{ + */ +#define TIM_DMABURSTLENGTH_1TRANSFER 0x00000000U /*!< The transfer is done to 1 register starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_2TRANSFERS 0x00000100U /*!< The transfer is done to 2 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_3TRANSFERS 0x00000200U /*!< The transfer is done to 3 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_4TRANSFERS 0x00000300U /*!< The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_5TRANSFERS 0x00000400U /*!< The transfer is done to 5 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_6TRANSFERS 0x00000500U /*!< The transfer is done to 6 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_7TRANSFERS 0x00000600U /*!< The transfer is done to 7 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_8TRANSFERS 0x00000700U /*!< The transfer is done to 8 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_9TRANSFERS 0x00000800U /*!< The transfer is done to 9 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting from TIMx_CR1 + TIMx_DCR.DBA */ +/** + * @} + */ + +/** @defgroup DMA_Handle_index TIM DMA Handle Index + * @{ + */ +#define TIM_DMA_ID_UPDATE ((uint16_t) 0x0000) /*!< Index of the DMA handle used for Update DMA requests */ +#define TIM_DMA_ID_CC1 ((uint16_t) 0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */ +#define TIM_DMA_ID_CC2 ((uint16_t) 0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */ +#define TIM_DMA_ID_CC3 ((uint16_t) 0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */ +#define TIM_DMA_ID_CC4 ((uint16_t) 0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */ +#define TIM_DMA_ID_COMMUTATION ((uint16_t) 0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */ +#define TIM_DMA_ID_TRIGGER ((uint16_t) 0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */ +/** + * @} + */ + +/** @defgroup Channel_CC_State TIM Capture/Compare Channel State + * @{ + */ +#define TIM_CCx_ENABLE 0x00000001U /*!< Input or output channel is enabled */ +#define TIM_CCx_DISABLE 0x00000000U /*!< Input or output channel is disabled */ +#define TIM_CCxN_ENABLE 0x00000004U /*!< Complementary output channel is enabled */ +#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup TIM_Exported_Macros TIM Exported Macros + * @{ + */ + +/** @brief Reset TIM handle state. + * @param __HANDLE__ TIM handle. + * @retval None + */ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + (__HANDLE__)->Base_MspInitCallback = NULL; \ + (__HANDLE__)->Base_MspDeInitCallback = NULL; \ + (__HANDLE__)->IC_MspInitCallback = NULL; \ + (__HANDLE__)->IC_MspDeInitCallback = NULL; \ + (__HANDLE__)->OC_MspInitCallback = NULL; \ + (__HANDLE__)->OC_MspDeInitCallback = NULL; \ + (__HANDLE__)->PWM_MspInitCallback = NULL; \ + (__HANDLE__)->PWM_MspDeInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspInitCallback = NULL; \ + (__HANDLE__)->OnePulse_MspDeInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspInitCallback = NULL; \ + (__HANDLE__)->Encoder_MspDeInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspInitCallback = NULL; \ + (__HANDLE__)->HallSensor_MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) do { \ + (__HANDLE__)->State = HAL_TIM_STATE_RESET; \ + (__HANDLE__)->ChannelState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \ + (__HANDLE__)->DMABurstState = HAL_DMA_BURST_STATE_RESET; \ + } while(0) +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @brief Enable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) + +/** + * @brief Enable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) + +/** + * @brief Disable the TIM peripheral. + * @param __HANDLE__ TIM handle + * @retval None + */ +#define __HAL_TIM_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been + * disabled + */ +#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \ + do { \ + if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \ + { \ + if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \ + { \ + (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \ + } \ + } \ + } while(0) + +/** + * @brief Disable the TIM main Output. + * @param __HANDLE__ TIM handle + * @retval None + * @note The Main Output Enable of a timer instance is disabled unconditionally + */ +#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE) + +/** @brief Enable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to enable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) + +/** @brief Disable the specified TIM interrupt. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to disable. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) + +/** @brief Enable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to enable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) + +/** @brief Disable the specified DMA request. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to disable. + * This parameter can be one of the following values: + * @arg TIM_DMA_UPDATE: Update DMA request + * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request + * @arg TIM_DMA_CC2: Capture/Compare 2 DMA request + * @arg TIM_DMA_CC3: Capture/Compare 3 DMA request + * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request + * @arg TIM_DMA_COM: Commutation DMA request + * @arg TIM_DMA_TRIGGER: Trigger DMA request + * @retval None + */ +#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) + +/** @brief Check whether the specified TIM interrupt flag is set or not. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to check. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) + +/** @brief Clear the specified TIM interrupt flag. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to clear. + * This parameter can be one of the following values: + * @arg TIM_FLAG_UPDATE: Update interrupt flag + * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag + * @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag + * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag + * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag + * @arg TIM_FLAG_COM: Commutation interrupt flag + * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag + * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag + * @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag + * @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** + * @brief Check whether the specified TIM interrupt source is enabled or not. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the TIM interrupt source to check. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval The state of TIM_IT (SET or RESET). + */ +#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \ + == (__INTERRUPT__)) ? SET : RESET) + +/** @brief Clear the TIM interrupt pending bits. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. + * This parameter can be one of the following values: + * @arg TIM_IT_UPDATE: Update interrupt + * @arg TIM_IT_CC1: Capture/Compare 1 interrupt + * @arg TIM_IT_CC2: Capture/Compare 2 interrupt + * @arg TIM_IT_CC3: Capture/Compare 3 interrupt + * @arg TIM_IT_CC4: Capture/Compare 4 interrupt + * @arg TIM_IT_COM: Commutation interrupt + * @arg TIM_IT_TRIGGER: Trigger interrupt + * @arg TIM_IT_BREAK: Break interrupt + * @retval None + */ +#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__)) + +/** + * @brief Indicates whether or not the TIM Counter is used as downcounter. + * @param __HANDLE__ TIM handle. + * @retval False (Counter used as upcounter) or True (Counter used as downcounter) + * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode + * or Encoder mode. + */ +#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR)) + +/** + * @brief Set the TIM Prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __PRESC__ specifies the Prescaler new value. + * @retval None + */ +#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) + +/** + * @brief Set the TIM Counter Register value on runtime. + * @param __HANDLE__ TIM handle. + * @param __COUNTER__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) + +/** + * @brief Get the TIM Counter Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT) + */ +#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT) + +/** + * @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __AUTORELOAD__ specifies the Counter register new value. + * @retval None + */ +#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ + do{ \ + (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \ + (__HANDLE__)->Init.Period = (__AUTORELOAD__); \ + } while(0) + +/** + * @brief Get the TIM Autoreload Register value on runtime. + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR) + */ +#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR) + +/** + * @brief Set the TIM Clock Division value on runtime without calling another time any Init function. + * @param __HANDLE__ TIM handle. + * @param __CKD__ specifies the clock division value. + * This parameter can be one of the following value: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + * @retval None + */ +#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ + do{ \ + (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \ + (__HANDLE__)->Instance->CR1 |= (__CKD__); \ + (__HANDLE__)->Init.ClockDivision = (__CKD__); \ + } while(0) + +/** + * @brief Get the TIM Clock Division value on runtime. + * @param __HANDLE__ TIM handle. + * @retval The clock division can be one of the following values: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT + */ +#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) + +/** + * @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() + * function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __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 + */ +#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \ + do{ \ + TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \ + } while(0) + +/** + * @brief Get the TIM Input Capture prescaler on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get input capture 1 prescaler value + * @arg TIM_CHANNEL_2: get input capture 2 prescaler value + * @arg TIM_CHANNEL_3: get input capture 3 prescaler value + * @arg TIM_CHANNEL_4: get input capture 4 prescaler value + * @retval The input capture prescaler 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 + */ +#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC) :\ + (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U) + +/** + * @brief Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __COMPARE__ specifies the Capture Compare register new value. + * @retval None + */ +#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\ + ((__HANDLE__)->Instance->CCR4 = (__COMPARE__))) + +/** + * @brief Get the TIM Capture Compare Register value on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channel associated with the capture compare register + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: get capture/compare 1 register value + * @arg TIM_CHANNEL_2: get capture/compare 2 register value + * @arg TIM_CHANNEL_3: get capture/compare 3 register value + * @arg TIM_CHANNEL_4: get capture/compare 4 register value + * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy) + */ +#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\ + ((__HANDLE__)->Instance->CCR4)) + +/** + * @brief Set the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval None + */ +#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE)) + +/** + * @brief Reset the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval None + */ +#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE)) + +/** + * @brief Enable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @note When fast mode is enabled an active edge on the trigger input acts + * like a compare match on CCx output. Delay to sample the trigger + * input and to activate CCx output is reduced to 3 clock cycles. + * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode. + * @retval None + */ +#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE)) + +/** + * @brief Disable fast mode for a given channel. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @note When fast mode is disabled CCx output behaves normally depending + * on counter and CCRx values even when the trigger is ON. The minimum + * delay to activate CCx output when an active edge occurs on the + * trigger input is 5 clock cycles. + * @retval None + */ +#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE)) + +/** + * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is set, only counter + * overflow/underflow generates an update interrupt or DMA request (if + * enabled) + * @retval None + */ +#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS) + +/** + * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register. + * @param __HANDLE__ TIM handle. + * @note When the URS bit of the TIMx_CR1 register is reset, any of the + * following events generate an update interrupt or DMA request (if + * enabled): + * _ Counter overflow underflow + * _ Setting the UG bit + * _ Update generation through the slave mode controller + * @retval None + */ +#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS) + +/** + * @brief Set the TIM Capture x input polarity on runtime. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param __POLARITY__ Polarity for TIx source + * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge + * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge + * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge + * @retval None + */ +#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + do{ \ + TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ + TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ + }while(0) + +/** @brief Select the Capture/compare DMA request source. + * @param __HANDLE__ specifies the TIM Handle. + * @param __CCDMA__ specifies Capture/compare DMA request source + * This parameter can be one of the following values: + * @arg TIM_CCDMAREQUEST_CC: CCx DMA request generated on Capture/Compare event + * @arg TIM_CCDMAREQUEST_UPDATE: CCx DMA request generated on Update event + * @retval None + */ +#define __HAL_TIM_SELECT_CCDMAREQUEST(__HANDLE__, __CCDMA__) \ + MODIFY_REG((__HANDLE__)->Instance->CR2, TIM_CR2_CCDS, (__CCDMA__)) + +/** + * @} + */ +/* End of exported macros ----------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup TIM_Private_Constants TIM Private Constants + * @{ + */ +/* The counter of a timer instance is disabled only if all the CCx and CCxN + channels have been disabled */ +#define TIM_CCER_CCxE_MASK ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E)) +#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) +/** + * @} + */ +/* End of private constants --------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup TIM_Private_Macros TIM Private Macros + * @{ + */ +#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || \ + ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR)) + +#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)) + +#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) + +#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)) + +#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \ + ((__DIV__) == TIM_CLOCKDIVISION_DIV4)) + +#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \ + ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE)) + +#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || \ + ((__STATE__) == TIM_OCFAST_ENABLE)) + +#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCPOLARITY_LOW)) + +#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || \ + ((__POLARITY__) == TIM_OCNPOLARITY_LOW)) + +#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCIDLESTATE_RESET)) + +#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \ + ((__STATE__) == TIM_OCNIDLESTATE_RESET)) + +#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING)) + +#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE)) + +#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || \ + ((__SELECTION__) == TIM_ICSELECTION_TRC)) + +#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV2) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV4) || \ + ((__PRESCALER__) == TIM_ICPSC_DIV8)) + +#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || \ + ((__MODE__) == TIM_OPMODE_REPETITIVE)) + +#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || \ + ((__MODE__) == TIM_ENCODERMODE_TI2) || \ + ((__MODE__) == TIM_ENCODERMODE_TI12)) + +#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) + +#define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3) || \ + ((__CHANNEL__) == TIM_CHANNEL_4) || \ + ((__CHANNEL__) == TIM_CHANNEL_ALL)) + +#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2)) + +#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ + ((__CHANNEL__) == TIM_CHANNEL_2) || \ + ((__CHANNEL__) == TIM_CHANNEL_3)) + +#define IS_TIM_CLOCKSOURCE(__CLOCK__) (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || \ + ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3)) + +#define IS_TIM_CLOCKPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || \ + ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE)) + +#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8)) + +#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || \ + ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED)) + +#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8)) + +#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || \ + ((__STATE__) == TIM_OSSR_DISABLE)) + +#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || \ + ((__STATE__) == TIM_OSSI_DISABLE)) + +#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_1) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_2) || \ + ((__LEVEL__) == TIM_LOCKLEVEL_3)) + +#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL) + + +#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || \ + ((__STATE__) == TIM_BREAK_DISABLE)) + +#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || \ + ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH)) + +#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || \ + ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE)) + +#define IS_TIM_TRGO_SOURCE(__SOURCE__) (((__SOURCE__) == TIM_TRGO_RESET) || \ + ((__SOURCE__) == TIM_TRGO_ENABLE) || \ + ((__SOURCE__) == TIM_TRGO_UPDATE) || \ + ((__SOURCE__) == TIM_TRGO_OC1) || \ + ((__SOURCE__) == TIM_TRGO_OC1REF) || \ + ((__SOURCE__) == TIM_TRGO_OC2REF) || \ + ((__SOURCE__) == TIM_TRGO_OC3REF) || \ + ((__SOURCE__) == TIM_TRGO_OC4REF)) + +#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || \ + ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE)) + +#define IS_TIM_SLAVE_MODE(__MODE__) (((__MODE__) == TIM_SLAVEMODE_DISABLE) || \ + ((__MODE__) == TIM_SLAVEMODE_RESET) || \ + ((__MODE__) == TIM_SLAVEMODE_GATED) || \ + ((__MODE__) == TIM_SLAVEMODE_TRIGGER) || \ + ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1)) + +#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || \ + ((__MODE__) == TIM_OCMODE_PWM2)) + +#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_FORCED_ACTIVE) || \ + ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE)) + +#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_TRIGGEREVENT_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_TS_ITR0) || \ + ((__SELECTION__) == TIM_TS_ITR1) || \ + ((__SELECTION__) == TIM_TS_ITR2) || \ + ((__SELECTION__) == TIM_TS_ITR3) || \ + ((__SELECTION__) == TIM_TS_NONE)) + +#define IS_TIM_TRIGGERPOLARITY(__POLARITY__) (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING ) || \ + ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE )) + +#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || \ + ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8)) + +#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || \ + ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION)) + +#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)) + +#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U)) + +#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU) + +#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU) + +#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER) + +#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\ + ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U))) + +#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\ + ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC)) + +#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\ + ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U)))) + +#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\ + ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP))) + +#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] :\ + (__HANDLE__)->ChannelState[3]) + +#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ + (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__); \ + } while(0) + +#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)\ + (((__CHANNEL__) == TIM_CHANNEL_1) ? (__HANDLE__)->ChannelNState[0] :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] :\ + (__HANDLE__)->ChannelNState[3]) + +#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) :\ + ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__))) + +#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) do { \ + (__HANDLE__)->ChannelNState[0] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[1] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[2] = \ + (__CHANNEL_STATE__); \ + (__HANDLE__)->ChannelNState[3] = \ + (__CHANNEL_STATE__); \ + } while(0) + +/** + * @} + */ +/* End of private macros -----------------------------------------------------*/ + +/* Include TIM HAL Extended module */ +#include "stm32f4xx_hal_tim_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * @{ + */ +/* Time Base functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * @{ + */ +/* Timer Output Compare functions *********************************************/ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * @{ + */ +/* Timer PWM functions ********************************************************/ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * @{ + */ +/* Timer Input Capture functions **********************************************/ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * @{ + */ +/* Timer One Pulse functions **************************************************/ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode); +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * @{ + */ +/* Timer Encoder functions ****************************************************/ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim); +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length); +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief IRQ handler management + * @{ + */ +/* Interrupt Handler functions ***********************************************/ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Control functions *********************************************************/ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel); +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel); +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig); +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength); +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc); +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource); +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * @{ + */ +/* Callback in non blocking modes (Interrupt and DMA) *************************/ +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief Peripheral State functions + * @{ + */ +/* Peripheral State functions ************************************************/ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim); + +/* Peripheral Channel state functions ************************************************/ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure); +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter); +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter); + +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_DMAError(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma); +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +void TIM_ResetCallback(TIM_HandleTypeDef *htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F4xx_HAL_TIM_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h new file mode 100644 index 0000000..39fb500 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h @@ -0,0 +1,354 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim_ex.h + * @author MCD Application Team + * @brief Header file of TIM HAL Extended module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F4xx_HAL_TIM_EX_H +#define STM32F4xx_HAL_TIM_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup TIMEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types + * @{ + */ + +/** + * @brief TIM Hall sensor Configuration Structure definition + */ + +typedef struct +{ + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint32_t IC1Filter; /*!< Specifies the input capture filter. + This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ + + uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ +} TIM_HallSensor_InitTypeDef; +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants + * @{ + */ + +/** @defgroup TIMEx_Remap TIM Extended Remapping + * @{ + */ +#if defined (TIM2) +#if defined(TIM8) +#define TIM_TIM2_TIM8_TRGO 0x00000000U /*!< TIM2 ITR1 is connected to TIM8 TRGO */ +#else +#define TIM_TIM2_ETH_PTP TIM_OR_ITR1_RMP_0 /*!< TIM2 ITR1 is connected to PTP trigger output */ +#endif /* TIM8 */ +#define TIM_TIM2_USBFS_SOF TIM_OR_ITR1_RMP_1 /*!< TIM2 ITR1 is connected to OTG FS SOF */ +#define TIM_TIM2_USBHS_SOF (TIM_OR_ITR1_RMP_1 | TIM_OR_ITR1_RMP_0) /*!< TIM2 ITR1 is connected to OTG HS SOF */ +#endif /* TIM2 */ + +#define TIM_TIM5_GPIO 0x00000000U /*!< TIM5 TI4 is connected to GPIO */ +#define TIM_TIM5_LSI TIM_OR_TI4_RMP_0 /*!< TIM5 TI4 is connected to LSI */ +#define TIM_TIM5_LSE TIM_OR_TI4_RMP_1 /*!< TIM5 TI4 is connected to LSE */ +#define TIM_TIM5_RTC (TIM_OR_TI4_RMP_1 | TIM_OR_TI4_RMP_0) /*!< TIM5 TI4 is connected to the RTC wakeup interrupt */ + +#define TIM_TIM11_GPIO 0x00000000U /*!< TIM11 TI1 is connected to GPIO */ +#define TIM_TIM11_HSE TIM_OR_TI1_RMP_1 /*!< TIM11 TI1 is connected to HSE_RTC clock */ +#if defined(SPDIFRX) +#define TIM_TIM11_SPDIFRX TIM_OR_TI1_RMP_0 /*!< TIM11 TI1 is connected to SPDIFRX_FRAME_SYNC */ +#endif /* SPDIFRX*/ + +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) +#define LPTIM_REMAP_MASK 0x10000000U + +#define TIM_TIM9_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM9 ITR1 is connected to TIM3 TRGO */ +#define TIM_TIM9_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM9_ITR1_RMP) /*!< TIM9 ITR1 is connected to LPTIM1 output */ + +#define TIM_TIM5_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM5 ITR1 is connected to TIM3 TRGO */ +#define TIM_TIM5_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM5_ITR1_RMP) /*!< TIM5 ITR1 is connected to LPTIM1 output */ + +#define TIM_TIM1_TIM3_TRGO LPTIM_REMAP_MASK /*!< TIM1 ITR2 is connected to TIM3 TRGO */ +#define TIM_TIM1_LPTIM (LPTIM_REMAP_MASK | LPTIM_OR_TIM1_ITR2_RMP) /*!< TIM1 ITR2 is connected to LPTIM1 output */ +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM5_ITR1_RMP */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros + * @{ + */ + +/** + * @} + */ +/* End of exported macro -----------------------------------------------------*/ + +/* Private macro -------------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros + * @{ + */ +#if defined(SPDIFRX) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_SPDIFRX) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#elif defined(TIM2) +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE))) || \ + (((INSTANCE) == TIM1) && (((TIM_REMAP) == TIM_TIM1_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM1_LPTIM))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM5_LPTIM))) || \ + (((INSTANCE) == TIM9) && (((TIM_REMAP) == TIM_TIM9_TIM3_TRGO) || \ + ((TIM_REMAP) == TIM_TIM9_LPTIM)))) +#elif defined(TIM8) +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#else +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM2) && (((TIM_REMAP) == TIM_TIM2_ETH_PTP) || \ + ((TIM_REMAP) == TIM_TIM2_USBFS_SOF) || \ + ((TIM_REMAP) == TIM_TIM2_USBHS_SOF))) || \ + (((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM5_ITR1_RMP */ +#else +#define IS_TIM_REMAP(INSTANCE, TIM_REMAP) \ + ((((INSTANCE) == TIM5) && (((TIM_REMAP) == TIM_TIM5_GPIO) || \ + ((TIM_REMAP) == TIM_TIM5_LSI) || \ + ((TIM_REMAP) == TIM_TIM5_LSE) || \ + ((TIM_REMAP) == TIM_TIM5_RTC))) || \ + (((INSTANCE) == TIM11) && (((TIM_REMAP) == TIM_TIM11_GPIO) || \ + ((TIM_REMAP) == TIM_TIM11_HSE)))) +#endif /* SPDIFRX */ + +/** + * @} + */ +/* End of private macro ------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * @{ + */ +/* Timer Hall Sensor functions **********************************************/ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim); + +void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim); +void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim); + +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * @{ + */ +/* Timer Complementary Output Compare functions *****************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * @{ + */ +/* Timer Complementary PWM functions ****************************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel); +/* Non-Blocking mode: DMA */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length); +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * @{ + */ +/* Timer Complementary One Pulse functions **********************************/ +/* Blocking mode: Polling */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel); + +/* Non-Blocking mode: Interrupt */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * @{ + */ +/* Extended Control functions ************************************************/ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource); +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + TIM_MasterConfigTypeDef *sMasterConfig); +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * @{ + */ +/* Extended Callback **********************************************************/ +void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim); +void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); +/** + * @} + */ + +/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * @{ + */ +/* Extended Peripheral State functions ***************************************/ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim); +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private functions----------------------------------------------------------*/ +/** @addtogroup TIMEx_Private_Functions TIM Extended Private Functions + * @{ + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma); +/** + * @} + */ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + + +#endif /* STM32F4xx_HAL_TIM_EX_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h new file mode 100644 index 0000000..c5f5d3e --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h @@ -0,0 +1,884 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_uart.h + * @author MCD Application Team + * @brief Header file of UART HAL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_UART_H +#define __STM32F4xx_HAL_UART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal_def.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup UART + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup UART_Exported_Types UART Exported Types + * @{ + */ + +/** + * @brief UART Init Structure definition + */ +typedef struct +{ + uint32_t BaudRate; /*!< This member configures the UART communication baud rate. + The baud rate is computed using the following formula: + - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (huart->Init.BaudRate))) + - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8 * (OVR8+1)) + 0.5 + Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */ + + uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref UART_Word_Length */ + + uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref UART_Stop_Bits */ + + uint32_t Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref UART_Parity + @note When parity is enabled, the computed parity is inserted + at the MSB position of the transmitted data (9th bit when + the word length is set to 9 data bits; 8th bit when the + word length is set to 8 data bits). */ + + uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. + This parameter can be a value of @ref UART_Mode */ + + uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. + This parameter can be a value of @ref UART_Hardware_Flow_Control */ + + uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). + This parameter can be a value of @ref UART_Over_Sampling */ +} UART_InitTypeDef; + +/** + * @brief HAL UART State structures definition + * @note HAL UART State value is a combination of 2 different substates: gState and RxState. + * - gState contains UART state information related to global Handle management + * and also information related to Tx operations. + * gState value coding follow below described bitmap : + * b7-b6 Error information + * 00 : No Error + * 01 : (Not Used) + * 10 : Timeout + * 11 : Error + * b5 Peripheral initialization status + * 0 : Reset (Peripheral not initialized) + * 1 : Init done (Peripheral initialized. HAL UART Init function already called) + * b4-b3 (not used) + * xx : Should be set to 00 + * b2 Intrinsic process state + * 0 : Ready + * 1 : Busy (Peripheral busy with some configuration or internal operations) + * b1 (not used) + * x : Should be set to 0 + * b0 Tx state + * 0 : Ready (no Tx operation ongoing) + * 1 : Busy (Tx operation ongoing) + * - RxState contains information related to Rx operations. + * RxState value coding follow below described bitmap : + * b7-b6 (not used) + * xx : Should be set to 00 + * b5 Peripheral initialization status + * 0 : Reset (Peripheral not initialized) + * 1 : Init done (Peripheral initialized) + * b4-b2 (not used) + * xxx : Should be set to 000 + * b1 Rx state + * 0 : Ready (no Rx operation ongoing) + * 1 : Busy (Rx operation ongoing) + * b0 (not used) + * x : Should be set to 0. + */ +typedef enum +{ + HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized + Value is allowed for gState and RxState */ + HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use + Value is allowed for gState and RxState */ + HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing + Value is allowed for gState only */ + HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing + Value is allowed for gState only */ + HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing + Value is allowed for RxState only */ + HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing + Not to be used for neither gState nor RxState. + Value is result of combination (Or) between gState and RxState values */ + HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state + Value is allowed for gState only */ + HAL_UART_STATE_ERROR = 0xE0U /*!< Error + Value is allowed for gState only */ +} HAL_UART_StateTypeDef; + +/** + * @brief HAL UART Reception type definition + * @note HAL UART Reception type value aims to identify which type of Reception is ongoing. + * It is expected to admit following values : + * HAL_UART_RECEPTION_STANDARD = 0x00U, + * HAL_UART_RECEPTION_TOIDLE = 0x01U, + */ +typedef uint32_t HAL_UART_RxTypeTypeDef; + +/** + * @brief UART handle Structure definition + */ +typedef struct __UART_HandleTypeDef +{ + USART_TypeDef *Instance; /*!< UART registers base address */ + + UART_InitTypeDef Init; /*!< UART communication parameters */ + + const uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ + + uint16_t TxXferSize; /*!< UART Tx Transfer size */ + + __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ + + uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ + + uint16_t RxXferSize; /*!< UART Rx Transfer size */ + + __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ + + __IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ + + DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management + and also related to Tx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO uint32_t ErrorCode; /*!< UART Error code */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Half Complete Callback */ + void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Complete Callback */ + void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Half Complete Callback */ + void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */ + void (* ErrorCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Error Callback */ + void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Complete Callback */ + void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */ + void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Receive Complete Callback */ + void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */ + void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback */ + + void (* MspInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp Init callback */ + void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp DeInit callback */ +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +} UART_HandleTypeDef; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +/** + * @brief HAL UART Callback ID enumeration definition + */ +typedef enum +{ + HAL_UART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< UART Tx Half Complete Callback ID */ + HAL_UART_TX_COMPLETE_CB_ID = 0x01U, /*!< UART Tx Complete Callback ID */ + HAL_UART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< UART Rx Half Complete Callback ID */ + HAL_UART_RX_COMPLETE_CB_ID = 0x03U, /*!< UART Rx Complete Callback ID */ + HAL_UART_ERROR_CB_ID = 0x04U, /*!< UART Error Callback ID */ + HAL_UART_ABORT_COMPLETE_CB_ID = 0x05U, /*!< UART Abort Complete Callback ID */ + HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U, /*!< UART Abort Transmit Complete Callback ID */ + HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID = 0x07U, /*!< UART Abort Receive Complete Callback ID */ + HAL_UART_WAKEUP_CB_ID = 0x08U, /*!< UART Wakeup Callback ID */ + + HAL_UART_MSPINIT_CB_ID = 0x0BU, /*!< UART MspInit callback ID */ + HAL_UART_MSPDEINIT_CB_ID = 0x0CU /*!< UART MspDeInit callback ID */ + +} HAL_UART_CallbackIDTypeDef; + +/** + * @brief HAL UART Callback pointer definition + */ +typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */ +typedef void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */ + +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup UART_Exported_Constants UART Exported Constants + * @{ + */ + +/** @defgroup UART_Error_Code UART Error Code + * @{ + */ +#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */ +#define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */ +#define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */ +#define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */ +#define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +#define HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U /*!< Invalid Callback error */ +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +/** + * @} + */ + +/** @defgroup UART_Word_Length UART Word Length + * @{ + */ +#define UART_WORDLENGTH_8B 0x00000000U +#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) +/** + * @} + */ + +/** @defgroup UART_Stop_Bits UART Number of Stop Bits + * @{ + */ +#define UART_STOPBITS_1 0x00000000U +#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) +/** + * @} + */ + +/** @defgroup UART_Parity UART Parity + * @{ + */ +#define UART_PARITY_NONE 0x00000000U +#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) +#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) +/** + * @} + */ + +/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control + * @{ + */ +#define UART_HWCONTROL_NONE 0x00000000U +#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) +#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) +#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) +/** + * @} + */ + +/** @defgroup UART_Mode UART Transfer Mode + * @{ + */ +#define UART_MODE_RX ((uint32_t)USART_CR1_RE) +#define UART_MODE_TX ((uint32_t)USART_CR1_TE) +#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE | USART_CR1_RE)) +/** + * @} + */ + +/** @defgroup UART_State UART State + * @{ + */ +#define UART_STATE_DISABLE 0x00000000U +#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) +/** + * @} + */ + +/** @defgroup UART_Over_Sampling UART Over Sampling + * @{ + */ +#define UART_OVERSAMPLING_16 0x00000000U +#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) +/** + * @} + */ + +/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length + * @{ + */ +#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U +#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) +/** + * @} + */ + +/** @defgroup UART_WakeUp_functions UART Wakeup Functions + * @{ + */ +#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U +#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE) +/** + * @} + */ + +/** @defgroup UART_Flags UART FLags + * Elements values convention: 0xXXXX + * - 0xXXXX : Flag mask in the SR register + * @{ + */ +#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS) +#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD) +#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE) +#define UART_FLAG_TC ((uint32_t)USART_SR_TC) +#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE) +#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE) +#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE) +#define UART_FLAG_NE ((uint32_t)USART_SR_NE) +#define UART_FLAG_FE ((uint32_t)USART_SR_FE) +#define UART_FLAG_PE ((uint32_t)USART_SR_PE) +/** + * @} + */ + +/** @defgroup UART_Interrupt_definition UART Interrupt Definitions + * Elements values convention: 0xY000XXXX + * - XXXX : Interrupt mask (16 bits) in the Y register + * - Y : Interrupt source register (2bits) + * - 0001: CR1 register + * - 0010: CR2 register + * - 0011: CR3 register + * @{ + */ + +#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE)) +#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE)) +#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE)) +#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE)) +#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE)) + +#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE)) + +#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE)) +#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE)) +/** + * @} + */ + +/** @defgroup UART_RECEPTION_TYPE_Values UART Reception type values + * @{ + */ +#define HAL_UART_RECEPTION_STANDARD (0x00000000U) /*!< Standard reception */ +#define HAL_UART_RECEPTION_TOIDLE (0x00000001U) /*!< Reception till completion or IDLE event */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup UART_Exported_Macros UART Exported Macros + * @{ + */ + +/** @brief Reset UART handle gstate & RxState + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0U) +#else +#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ + (__HANDLE__)->gState = HAL_UART_STATE_RESET; \ + (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ + } while(0U) +#endif /*USE_HAL_UART_REGISTER_CALLBACKS */ + +/** @brief Flushes the UART DR register + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + */ +#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) + +/** @brief Checks whether the specified UART flag is set or not. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of the following values: + * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) + * @arg UART_FLAG_LBD: LIN Break detection flag + * @arg UART_FLAG_TXE: Transmit data register empty flag + * @arg UART_FLAG_TC: Transmission Complete flag + * @arg UART_FLAG_RXNE: Receive data register not empty flag + * @arg UART_FLAG_IDLE: Idle Line detection flag + * @arg UART_FLAG_ORE: Overrun Error flag + * @arg UART_FLAG_NE: Noise Error flag + * @arg UART_FLAG_FE: Framing Error flag + * @arg UART_FLAG_PE: Parity Error flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) + +/** @brief Clears the specified UART pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __FLAG__ specifies the flag to check. + * This parameter can be any combination of the following values: + * @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). + * @arg UART_FLAG_LBD: LIN Break detection flag. + * @arg UART_FLAG_TC: Transmission Complete flag. + * @arg UART_FLAG_RXNE: Receive data register not empty flag. + * + * @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun + * error) and IDLE (Idle line detected) flags are cleared by software + * sequence: a read operation to USART_SR register followed by a read + * operation to USART_DR register. + * @note RXNE flag can be also cleared by a read to the USART_DR register. + * @note TC flag can be also cleared by software sequence: a read operation to + * USART_SR register followed by a write operation to USART_DR register. + * @note TXE flag is cleared only by a write to the USART_DR register. + * + * @retval None + */ +#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) + +/** @brief Clears the UART PE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \ + do{ \ + __IO uint32_t tmpreg = 0x00U; \ + tmpreg = (__HANDLE__)->Instance->SR; \ + tmpreg = (__HANDLE__)->Instance->DR; \ + UNUSED(tmpreg); \ + } while(0U) + +/** @brief Clears the UART FE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART NE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART ORE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Clears the UART IDLE pending flag. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @retval None + */ +#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) + +/** @brief Enable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __INTERRUPT__ specifies the UART interrupt source to enable. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_PE: Parity Error interrupt + * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ + (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ + ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK))) + +/** @brief Disable the specified UART interrupt. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __INTERRUPT__ specifies the UART interrupt source to disable. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_PE: Parity Error interrupt + * @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ + (((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ + ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK))) + +/** @brief Checks whether the specified UART interrupt source is enabled or not. + * @param __HANDLE__ specifies the UART Handle. + * UART Handle selects the USARTx or UARTy peripheral + * (USART,UART availability and x,y values depending on device). + * @param __IT__ specifies the UART interrupt source to check. + * This parameter can be one of the following values: + * @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) + * @arg UART_IT_LBD: LIN Break detection interrupt + * @arg UART_IT_TXE: Transmit Data Register empty interrupt + * @arg UART_IT_TC: Transmission complete interrupt + * @arg UART_IT_RXNE: Receive Data register not empty interrupt + * @arg UART_IT_IDLE: Idle line detection interrupt + * @arg UART_IT_ERR: Error interrupt + * @retval The new state of __IT__ (TRUE or FALSE). + */ +#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \ + (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK)) + +/** @brief Enable CTS flow control + * @note This macro allows to enable CTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \ + do{ \ + ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ + (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE; \ + } while(0U) + +/** @brief Disable CTS flow control + * @note This macro allows to disable CTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \ + do{ \ + ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ + (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE); \ + } while(0U) + +/** @brief Enable RTS flow control + * This macro allows to enable RTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \ + do{ \ + ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \ + (__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE; \ + } while(0U) + +/** @brief Disable RTS flow control + * This macro allows to disable RTS hardware flow control for a given UART instance, + * without need to call HAL_UART_Init() function. + * As involving direct access to UART registers, usage of this macro should be fully endorsed by user. + * @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need + * for USART instance Deinit/Init, following conditions for macro call should be fulfilled : + * - UART instance should have already been initialised (through call of HAL_UART_Init() ) + * - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) + * and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). + * @param __HANDLE__ specifies the UART Handle. + * The Handle Instance can be any USARTx (supporting the HW Flow control feature). + * It is used to select the USART peripheral (USART availability and x value depending on device). + * @retval None + */ +#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \ + do{ \ + ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\ + (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ + } while(0U) + +/** @brief Macro to enable the UART's one bit sample method + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) + +/** @brief Macro to disable the UART's one bit sample method + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\ + &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) + +/** @brief Enable UART + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) + +/** @brief Disable UART + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup UART_Exported_Functions + * @{ + */ + +/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ + +/* Initialization/de-initialization functions **********************************/ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); +HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod); +HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart); +void HAL_UART_MspInit(UART_HandleTypeDef *huart); +void HAL_UART_MspDeInit(UART_HandleTypeDef *huart); + +/* Callbacks Register/UnRegister functions ***********************************/ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, + pUART_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID); + +HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group2 IO operation functions + * @{ + */ + +/* IO operation functions *******************************************************/ +HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); +HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart); + +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, + uint32_t Timeout); +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); + +/* Transfer Abort functions */ +HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart); + +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart); +void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart); + +void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); + +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group3 + * @{ + */ +/* Peripheral Control functions ************************************************/ +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart); +/** + * @} + */ + +/** @addtogroup UART_Exported_Functions_Group4 + * @{ + */ +/* Peripheral State functions **************************************************/ +HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart); +uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart); +/** + * @} + */ + +/** + * @} + */ +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup UART_Private_Constants UART Private Constants + * @{ + */ +/** @brief UART interruptions flag mask + * + */ +#define UART_IT_MASK 0x0000FFFFU + +#define UART_CR1_REG_INDEX 1U +#define UART_CR2_REG_INDEX 2U +#define UART_CR3_REG_INDEX 3U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup UART_Private_Macros UART Private Macros + * @{ + */ +#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ + ((LENGTH) == UART_WORDLENGTH_9B)) +#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B)) +#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ + ((STOPBITS) == UART_STOPBITS_2)) +#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ + ((PARITY) == UART_PARITY_EVEN) || \ + ((PARITY) == UART_PARITY_ODD)) +#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ + (((CONTROL) == UART_HWCONTROL_NONE) || \ + ((CONTROL) == UART_HWCONTROL_RTS) || \ + ((CONTROL) == UART_HWCONTROL_CTS) || \ + ((CONTROL) == UART_HWCONTROL_RTS_CTS)) +#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U)) +#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ + ((STATE) == UART_STATE_ENABLE)) +#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ + ((SAMPLING) == UART_OVERSAMPLING_8)) +#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16)) +#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ + ((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) +#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \ + ((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK)) +#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 10500000U) +#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU) + +#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(4U*((uint64_t)(_BAUD_))))) +#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U) +#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U)\ + + 50U) / 100U) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */ +#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \ + (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U) + \ + (UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU)) + +#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) ((uint32_t)((((uint64_t)(_PCLK_))*25U)/(2U*((uint64_t)(_BAUD_))))) +#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U) +#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U)\ + + 50U) / 100U) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */ +#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) ((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \ + ((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U) + \ + (UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U)) + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup UART_Private_Functions UART Private Functions + * @{ + */ + +HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); +HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_UART_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h new file mode 100644 index 0000000..5083c10 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h @@ -0,0 +1,2105 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_bus.h + * @author MCD Application Team + * @brief Header file of BUS LL module. + + @verbatim + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (++) AHB & APB peripherals, 1 dummy read is necessary + + [..] + Workarounds: + (#) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each LL_{BUS}_GRP{x}_EnableClock() function. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_BUS_H +#define __STM32F4xx_LL_BUS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(RCC) + +/** @defgroup BUS_LL BUS + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup BUS_LL_Exported_Constants BUS Exported Constants + * @{ + */ + +/** @defgroup BUS_LL_EC_AHB1_GRP1_PERIPH AHB1 GRP1 PERIPH + * @{ + */ +#define LL_AHB1_GRP1_PERIPH_ALL 0xFFFFFFFFU +#define LL_AHB1_GRP1_PERIPH_GPIOA RCC_AHB1ENR_GPIOAEN +#define LL_AHB1_GRP1_PERIPH_GPIOB RCC_AHB1ENR_GPIOBEN +#define LL_AHB1_GRP1_PERIPH_GPIOC RCC_AHB1ENR_GPIOCEN +#if defined(GPIOD) +#define LL_AHB1_GRP1_PERIPH_GPIOD RCC_AHB1ENR_GPIODEN +#endif /* GPIOD */ +#if defined(GPIOE) +#define LL_AHB1_GRP1_PERIPH_GPIOE RCC_AHB1ENR_GPIOEEN +#endif /* GPIOE */ +#if defined(GPIOF) +#define LL_AHB1_GRP1_PERIPH_GPIOF RCC_AHB1ENR_GPIOFEN +#endif /* GPIOF */ +#if defined(GPIOG) +#define LL_AHB1_GRP1_PERIPH_GPIOG RCC_AHB1ENR_GPIOGEN +#endif /* GPIOG */ +#if defined(GPIOH) +#define LL_AHB1_GRP1_PERIPH_GPIOH RCC_AHB1ENR_GPIOHEN +#endif /* GPIOH */ +#if defined(GPIOI) +#define LL_AHB1_GRP1_PERIPH_GPIOI RCC_AHB1ENR_GPIOIEN +#endif /* GPIOI */ +#if defined(GPIOJ) +#define LL_AHB1_GRP1_PERIPH_GPIOJ RCC_AHB1ENR_GPIOJEN +#endif /* GPIOJ */ +#if defined(GPIOK) +#define LL_AHB1_GRP1_PERIPH_GPIOK RCC_AHB1ENR_GPIOKEN +#endif /* GPIOK */ +#define LL_AHB1_GRP1_PERIPH_CRC RCC_AHB1ENR_CRCEN +#if defined(RCC_AHB1ENR_BKPSRAMEN) +#define LL_AHB1_GRP1_PERIPH_BKPSRAM RCC_AHB1ENR_BKPSRAMEN +#endif /* RCC_AHB1ENR_BKPSRAMEN */ +#if defined(RCC_AHB1ENR_CCMDATARAMEN) +#define LL_AHB1_GRP1_PERIPH_CCMDATARAM RCC_AHB1ENR_CCMDATARAMEN +#endif /* RCC_AHB1ENR_CCMDATARAMEN */ +#define LL_AHB1_GRP1_PERIPH_DMA1 RCC_AHB1ENR_DMA1EN +#define LL_AHB1_GRP1_PERIPH_DMA2 RCC_AHB1ENR_DMA2EN +#if defined(RCC_AHB1ENR_RNGEN) +#define LL_AHB1_GRP1_PERIPH_RNG RCC_AHB1ENR_RNGEN +#endif /* RCC_AHB1ENR_RNGEN */ +#if defined(DMA2D) +#define LL_AHB1_GRP1_PERIPH_DMA2D RCC_AHB1ENR_DMA2DEN +#endif /* DMA2D */ +#if defined(ETH) +#define LL_AHB1_GRP1_PERIPH_ETHMAC RCC_AHB1ENR_ETHMACEN +#define LL_AHB1_GRP1_PERIPH_ETHMACTX RCC_AHB1ENR_ETHMACTXEN +#define LL_AHB1_GRP1_PERIPH_ETHMACRX RCC_AHB1ENR_ETHMACRXEN +#define LL_AHB1_GRP1_PERIPH_ETHMACPTP RCC_AHB1ENR_ETHMACPTPEN +#endif /* ETH */ +#if defined(USB_OTG_HS) +#define LL_AHB1_GRP1_PERIPH_OTGHS RCC_AHB1ENR_OTGHSEN +#define LL_AHB1_GRP1_PERIPH_OTGHSULPI RCC_AHB1ENR_OTGHSULPIEN +#endif /* USB_OTG_HS */ +#define LL_AHB1_GRP1_PERIPH_FLITF RCC_AHB1LPENR_FLITFLPEN +#define LL_AHB1_GRP1_PERIPH_SRAM1 RCC_AHB1LPENR_SRAM1LPEN +#if defined(RCC_AHB1LPENR_SRAM2LPEN) +#define LL_AHB1_GRP1_PERIPH_SRAM2 RCC_AHB1LPENR_SRAM2LPEN +#endif /* RCC_AHB1LPENR_SRAM2LPEN */ +#if defined(RCC_AHB1LPENR_SRAM3LPEN) +#define LL_AHB1_GRP1_PERIPH_SRAM3 RCC_AHB1LPENR_SRAM3LPEN +#endif /* RCC_AHB1LPENR_SRAM3LPEN */ +/** + * @} + */ + +#if defined(RCC_AHB2_SUPPORT) +/** @defgroup BUS_LL_EC_AHB2_GRP1_PERIPH AHB2 GRP1 PERIPH + * @{ + */ +#define LL_AHB2_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(DCMI) +#define LL_AHB2_GRP1_PERIPH_DCMI RCC_AHB2ENR_DCMIEN +#endif /* DCMI */ +#if defined(CRYP) +#define LL_AHB2_GRP1_PERIPH_CRYP RCC_AHB2ENR_CRYPEN +#endif /* CRYP */ +#if defined(AES) +#define LL_AHB2_GRP1_PERIPH_AES RCC_AHB2ENR_AESEN +#endif /* AES */ +#if defined(HASH) +#define LL_AHB2_GRP1_PERIPH_HASH RCC_AHB2ENR_HASHEN +#endif /* HASH */ +#if defined(RCC_AHB2ENR_RNGEN) +#define LL_AHB2_GRP1_PERIPH_RNG RCC_AHB2ENR_RNGEN +#endif /* RCC_AHB2ENR_RNGEN */ +#if defined(USB_OTG_FS) +#define LL_AHB2_GRP1_PERIPH_OTGFS RCC_AHB2ENR_OTGFSEN +#endif /* USB_OTG_FS */ +/** + * @} + */ +#endif /* RCC_AHB2_SUPPORT */ + +#if defined(RCC_AHB3_SUPPORT) +/** @defgroup BUS_LL_EC_AHB3_GRP1_PERIPH AHB3 GRP1 PERIPH + * @{ + */ +#define LL_AHB3_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(FSMC_Bank1) +#define LL_AHB3_GRP1_PERIPH_FSMC RCC_AHB3ENR_FSMCEN +#endif /* FSMC_Bank1 */ +#if defined(FMC_Bank1) +#define LL_AHB3_GRP1_PERIPH_FMC RCC_AHB3ENR_FMCEN +#endif /* FMC_Bank1 */ +#if defined(QUADSPI) +#define LL_AHB3_GRP1_PERIPH_QSPI RCC_AHB3ENR_QSPIEN +#endif /* QUADSPI */ +/** + * @} + */ +#endif /* RCC_AHB3_SUPPORT */ + +/** @defgroup BUS_LL_EC_APB1_GRP1_PERIPH APB1 GRP1 PERIPH + * @{ + */ +#define LL_APB1_GRP1_PERIPH_ALL 0xFFFFFFFFU +#if defined(TIM2) +#define LL_APB1_GRP1_PERIPH_TIM2 RCC_APB1ENR_TIM2EN +#endif /* TIM2 */ +#if defined(TIM3) +#define LL_APB1_GRP1_PERIPH_TIM3 RCC_APB1ENR_TIM3EN +#endif /* TIM3 */ +#if defined(TIM4) +#define LL_APB1_GRP1_PERIPH_TIM4 RCC_APB1ENR_TIM4EN +#endif /* TIM4 */ +#define LL_APB1_GRP1_PERIPH_TIM5 RCC_APB1ENR_TIM5EN +#if defined(TIM6) +#define LL_APB1_GRP1_PERIPH_TIM6 RCC_APB1ENR_TIM6EN +#endif /* TIM6 */ +#if defined(TIM7) +#define LL_APB1_GRP1_PERIPH_TIM7 RCC_APB1ENR_TIM7EN +#endif /* TIM7 */ +#if defined(TIM12) +#define LL_APB1_GRP1_PERIPH_TIM12 RCC_APB1ENR_TIM12EN +#endif /* TIM12 */ +#if defined(TIM13) +#define LL_APB1_GRP1_PERIPH_TIM13 RCC_APB1ENR_TIM13EN +#endif /* TIM13 */ +#if defined(TIM14) +#define LL_APB1_GRP1_PERIPH_TIM14 RCC_APB1ENR_TIM14EN +#endif /* TIM14 */ +#if defined(LPTIM1) +#define LL_APB1_GRP1_PERIPH_LPTIM1 RCC_APB1ENR_LPTIM1EN +#endif /* LPTIM1 */ +#if defined(RCC_APB1ENR_RTCAPBEN) +#define LL_APB1_GRP1_PERIPH_RTCAPB RCC_APB1ENR_RTCAPBEN +#endif /* RCC_APB1ENR_RTCAPBEN */ +#define LL_APB1_GRP1_PERIPH_WWDG RCC_APB1ENR_WWDGEN +#if defined(SPI2) +#define LL_APB1_GRP1_PERIPH_SPI2 RCC_APB1ENR_SPI2EN +#endif /* SPI2 */ +#if defined(SPI3) +#define LL_APB1_GRP1_PERIPH_SPI3 RCC_APB1ENR_SPI3EN +#endif /* SPI3 */ +#if defined(SPDIFRX) +#define LL_APB1_GRP1_PERIPH_SPDIFRX RCC_APB1ENR_SPDIFRXEN +#endif /* SPDIFRX */ +#define LL_APB1_GRP1_PERIPH_USART2 RCC_APB1ENR_USART2EN +#if defined(USART3) +#define LL_APB1_GRP1_PERIPH_USART3 RCC_APB1ENR_USART3EN +#endif /* USART3 */ +#if defined(UART4) +#define LL_APB1_GRP1_PERIPH_UART4 RCC_APB1ENR_UART4EN +#endif /* UART4 */ +#if defined(UART5) +#define LL_APB1_GRP1_PERIPH_UART5 RCC_APB1ENR_UART5EN +#endif /* UART5 */ +#define LL_APB1_GRP1_PERIPH_I2C1 RCC_APB1ENR_I2C1EN +#define LL_APB1_GRP1_PERIPH_I2C2 RCC_APB1ENR_I2C2EN +#if defined(I2C3) +#define LL_APB1_GRP1_PERIPH_I2C3 RCC_APB1ENR_I2C3EN +#endif /* I2C3 */ +#if defined(FMPI2C1) +#define LL_APB1_GRP1_PERIPH_FMPI2C1 RCC_APB1ENR_FMPI2C1EN +#endif /* FMPI2C1 */ +#if defined(CAN1) +#define LL_APB1_GRP1_PERIPH_CAN1 RCC_APB1ENR_CAN1EN +#endif /* CAN1 */ +#if defined(CAN2) +#define LL_APB1_GRP1_PERIPH_CAN2 RCC_APB1ENR_CAN2EN +#endif /* CAN2 */ +#if defined(CAN3) +#define LL_APB1_GRP1_PERIPH_CAN3 RCC_APB1ENR_CAN3EN +#endif /* CAN3 */ +#if defined(CEC) +#define LL_APB1_GRP1_PERIPH_CEC RCC_APB1ENR_CECEN +#endif /* CEC */ +#define LL_APB1_GRP1_PERIPH_PWR RCC_APB1ENR_PWREN +#if defined(DAC1) +#define LL_APB1_GRP1_PERIPH_DAC1 RCC_APB1ENR_DACEN +#endif /* DAC1 */ +#if defined(UART7) +#define LL_APB1_GRP1_PERIPH_UART7 RCC_APB1ENR_UART7EN +#endif /* UART7 */ +#if defined(UART8) +#define LL_APB1_GRP1_PERIPH_UART8 RCC_APB1ENR_UART8EN +#endif /* UART8 */ +/** + * @} + */ + +/** @defgroup BUS_LL_EC_APB2_GRP1_PERIPH APB2 GRP1 PERIPH + * @{ + */ +#define LL_APB2_GRP1_PERIPH_ALL 0xFFFFFFFFU +#define LL_APB2_GRP1_PERIPH_TIM1 RCC_APB2ENR_TIM1EN +#if defined(TIM8) +#define LL_APB2_GRP1_PERIPH_TIM8 RCC_APB2ENR_TIM8EN +#endif /* TIM8 */ +#define LL_APB2_GRP1_PERIPH_USART1 RCC_APB2ENR_USART1EN +#if defined(USART6) +#define LL_APB2_GRP1_PERIPH_USART6 RCC_APB2ENR_USART6EN +#endif /* USART6 */ +#if defined(UART9) +#define LL_APB2_GRP1_PERIPH_UART9 RCC_APB2ENR_UART9EN +#endif /* UART9 */ +#if defined(UART10) +#define LL_APB2_GRP1_PERIPH_UART10 RCC_APB2ENR_UART10EN +#endif /* UART10 */ +#define LL_APB2_GRP1_PERIPH_ADC1 RCC_APB2ENR_ADC1EN +#if defined(ADC2) +#define LL_APB2_GRP1_PERIPH_ADC2 RCC_APB2ENR_ADC2EN +#endif /* ADC2 */ +#if defined(ADC3) +#define LL_APB2_GRP1_PERIPH_ADC3 RCC_APB2ENR_ADC3EN +#endif /* ADC3 */ +#if defined(SDIO) +#define LL_APB2_GRP1_PERIPH_SDIO RCC_APB2ENR_SDIOEN +#endif /* SDIO */ +#define LL_APB2_GRP1_PERIPH_SPI1 RCC_APB2ENR_SPI1EN +#if defined(SPI4) +#define LL_APB2_GRP1_PERIPH_SPI4 RCC_APB2ENR_SPI4EN +#endif /* SPI4 */ +#define LL_APB2_GRP1_PERIPH_SYSCFG RCC_APB2ENR_SYSCFGEN +#if defined(RCC_APB2ENR_EXTITEN) +#define LL_APB2_GRP1_PERIPH_EXTI RCC_APB2ENR_EXTITEN +#endif /* RCC_APB2ENR_EXTITEN */ +#define LL_APB2_GRP1_PERIPH_TIM9 RCC_APB2ENR_TIM9EN +#if defined(TIM10) +#define LL_APB2_GRP1_PERIPH_TIM10 RCC_APB2ENR_TIM10EN +#endif /* TIM10 */ +#define LL_APB2_GRP1_PERIPH_TIM11 RCC_APB2ENR_TIM11EN +#if defined(SPI5) +#define LL_APB2_GRP1_PERIPH_SPI5 RCC_APB2ENR_SPI5EN +#endif /* SPI5 */ +#if defined(SPI6) +#define LL_APB2_GRP1_PERIPH_SPI6 RCC_APB2ENR_SPI6EN +#endif /* SPI6 */ +#if defined(SAI1) +#define LL_APB2_GRP1_PERIPH_SAI1 RCC_APB2ENR_SAI1EN +#endif /* SAI1 */ +#if defined(SAI2) +#define LL_APB2_GRP1_PERIPH_SAI2 RCC_APB2ENR_SAI2EN +#endif /* SAI2 */ +#if defined(LTDC) +#define LL_APB2_GRP1_PERIPH_LTDC RCC_APB2ENR_LTDCEN +#endif /* LTDC */ +#if defined(DSI) +#define LL_APB2_GRP1_PERIPH_DSI RCC_APB2ENR_DSIEN +#endif /* DSI */ +#if defined(DFSDM1_Channel0) +#define LL_APB2_GRP1_PERIPH_DFSDM1 RCC_APB2ENR_DFSDM1EN +#endif /* DFSDM1_Channel0 */ +#if defined(DFSDM2_Channel0) +#define LL_APB2_GRP1_PERIPH_DFSDM2 RCC_APB2ENR_DFSDM2EN +#endif /* DFSDM2_Channel0 */ +#define LL_APB2_GRP1_PERIPH_ADC RCC_APB2RSTR_ADCRST +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup BUS_LL_Exported_Functions BUS Exported Functions + * @{ + */ + +/** @defgroup BUS_LL_EF_AHB1 AHB1 + * @{ + */ + +/** + * @brief Enable AHB1 peripherals clock. + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB1ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB1ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB1 peripheral clock is enabled or not + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_AHB1_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB1ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB1 peripherals clock. + * @rmtoll AHB1ENR GPIOAEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOBEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOCEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIODEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOEEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOFEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOGEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOHEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOIEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOJEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GPIOKEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR CRCEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR BKPSRAMEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR CCMDATARAMEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA1EN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA2EN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR RNGEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMA2DEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACTXEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACRXEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR ETHMACPTPEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR OTGHSEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR OTGHSULPIEN LL_AHB1_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CCMDATARAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1ENR, Periphs); +} + +/** + * @brief Force AHB1 peripherals reset. + * @rmtoll AHB1RSTR GPIOARST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOBRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOCRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIODRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOERST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOFRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOGRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOHRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOIRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOJRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GPIOKRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR CRCRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA1RST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA2RST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR RNGRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR ETHMACRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR OTGHSRST LL_AHB1_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_ALL + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB1RSTR, Periphs); +} + +/** + * @brief Release AHB1 peripherals reset. + * @rmtoll AHB1RSTR GPIOARST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOBRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOCRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIODRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOERST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOFRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOGRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOHRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOIRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOJRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GPIOKRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR CRCRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA1RST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA2RST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR RNGRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR ETHMACRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR OTGHSRST LL_AHB1_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_ALL + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1RSTR, Periphs); +} + +/** + * @brief Enable AHB1 peripheral clocks in low-power mode + * @rmtoll AHB1LPENR GPIOALPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOBLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOCLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIODLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOELPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOFLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOGLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOHLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOILPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOJLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR GPIOKLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR CRCLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR FLITFLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM1LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM2LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR SRAM3LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA1LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA2LPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR DMA2DLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR RNGLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACTXLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACRXLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR ETHMACPTPLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR OTGHSLPEN LL_AHB1_GRP1_EnableClockLowPower\n + * AHB1LPENR OTGHSULPILPEN LL_AHB1_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_FLITF + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM3 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB1LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB1LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB1 peripheral clocks in low-power mode + * @rmtoll AHB1LPENR GPIOALPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOBLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOCLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIODLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOELPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOFLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOGLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOHLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOILPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOJLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR GPIOKLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR CRCLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR FLITFLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM1LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM2LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR SRAM3LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR BKPSRAMLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA1LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA2LPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR DMA2DLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR RNGLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACTXLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACRXLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR ETHMACPTPLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR OTGHSLPEN LL_AHB1_GRP1_DisableClockLowPower\n + * AHB1LPENR OTGHSULPILPEN LL_AHB1_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOA + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOB + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOC + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOD (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOE (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOF (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOH (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOI (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOJ (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GPIOK (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_CRC + * @arg @ref LL_AHB1_GRP1_PERIPH_BKPSRAM (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_FLITF + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM2 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM3 (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMAC (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACTX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACRX (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_ETHMACPTP (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHS (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_OTGHSULPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB1_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB1LPENR, Periphs); +} + +/** + * @} + */ + +#if defined(RCC_AHB2_SUPPORT) +/** @defgroup BUS_LL_EF_AHB2 AHB2 + * @{ + */ + +/** + * @brief Enable AHB2 peripherals clock. + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB2ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB2ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB2 peripheral clock is enabled or not + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_AHB2_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB2ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB2 peripherals clock. + * @rmtoll AHB2ENR DCMIEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR CRYPEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR AESEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR HASHEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR RNGEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR OTGFSEN LL_AHB2_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2ENR, Periphs); +} + +/** + * @brief Force AHB2 peripherals reset. + * @rmtoll AHB2RSTR DCMIRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR CRYPRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR AESRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR HASHRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR RNGRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR OTGFSRST LL_AHB2_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB2RSTR, Periphs); +} + +/** + * @brief Release AHB2 peripherals reset. + * @rmtoll AHB2RSTR DCMIRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR CRYPRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR AESRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR HASHRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR RNGRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR OTGFSRST LL_AHB2_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2RSTR, Periphs); +} + +/** + * @brief Enable AHB2 peripheral clocks in low-power mode + * @rmtoll AHB2LPENR DCMILPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR CRYPLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR AESLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR HASHLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR RNGLPEN LL_AHB2_GRP1_EnableClockLowPower\n + * AHB2LPENR OTGFSLPEN LL_AHB2_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB2LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB2LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB2 peripheral clocks in low-power mode + * @rmtoll AHB2LPENR DCMILPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR CRYPLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR AESLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR HASHLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR RNGLPEN LL_AHB2_GRP1_DisableClockLowPower\n + * AHB2LPENR OTGFSLPEN LL_AHB2_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_CRYP (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_RNG (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB2_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB2LPENR, Periphs); +} + +/** + * @} + */ +#endif /* RCC_AHB2_SUPPORT */ + +#if defined(RCC_AHB3_SUPPORT) +/** @defgroup BUS_LL_EF_AHB3 AHB3 + * @{ + */ + +/** + * @brief Enable AHB3 peripherals clock. + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB3ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB3ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if AHB3 peripheral clock is enabled or not + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_AHB3_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->AHB3ENR, Periphs) == Periphs); +} + +/** + * @brief Disable AHB3 peripherals clock. + * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR FSMCEN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR QSPIEN LL_AHB3_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3ENR, Periphs); +} + +/** + * @brief Force AHB3 peripherals reset. + * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR FSMCRST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_ALL + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->AHB3RSTR, Periphs); +} + +/** + * @brief Release AHB3 peripherals reset. + * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR FSMCRST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB2_GRP1_PERIPH_ALL + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3RSTR, Periphs); +} + +/** + * @brief Enable AHB3 peripheral clocks in low-power mode + * @rmtoll AHB3LPENR FMCLPEN LL_AHB3_GRP1_EnableClockLowPower\n + * AHB3LPENR FSMCLPEN LL_AHB3_GRP1_EnableClockLowPower\n + * AHB3LPENR QSPILPEN LL_AHB3_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->AHB3LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->AHB3LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable AHB3 peripheral clocks in low-power mode + * @rmtoll AHB3LPENR FMCLPEN LL_AHB3_GRP1_DisableClockLowPower\n + * AHB3LPENR FSMCLPEN LL_AHB3_GRP1_DisableClockLowPower\n + * AHB3LPENR QSPILPEN LL_AHB3_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_FSMC (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_AHB3_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->AHB3LPENR, Periphs); +} + +/** + * @} + */ +#endif /* RCC_AHB3_SUPPORT */ + +/** @defgroup BUS_LL_EF_APB1 APB1 + * @{ + */ + +/** + * @brief Enable APB1 peripherals clock. + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_EnableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_EnableClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART4EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART5EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_EnableClock\n + * APB1ENR CECEN LL_APB1_GRP1_EnableClock\n + * APB1ENR PWREN LL_APB1_GRP1_EnableClock\n + * APB1ENR DACEN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART7EN LL_APB1_GRP1_EnableClock\n + * APB1ENR UART8EN LL_APB1_GRP1_EnableClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB1ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB1ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if APB1 peripheral clock is enabled or not + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR USART3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART4EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART5EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR CECEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR PWREN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR DACEN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART7EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR UART8EN LL_APB1_GRP1_IsEnabledClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_APB1_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->APB1ENR, Periphs) == Periphs); +} + +/** + * @brief Disable APB1 peripherals clock. + * @rmtoll APB1ENR TIM2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM4EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM5EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM6EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM7EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM12EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM13EN LL_APB1_GRP1_DisableClock\n + * APB1ENR TIM14EN LL_APB1_GRP1_DisableClock\n + * APB1ENR LPTIM1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR WWDGEN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPI2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPI3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR SPDIFRXEN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR USART3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART4EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART5EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR I2C3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR FMPI2C1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN1EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN2EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CAN3EN LL_APB1_GRP1_DisableClock\n + * APB1ENR CECEN LL_APB1_GRP1_DisableClock\n + * APB1ENR PWREN LL_APB1_GRP1_DisableClock\n + * APB1ENR DACEN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART7EN LL_APB1_GRP1_DisableClock\n + * APB1ENR UART8EN LL_APB1_GRP1_DisableClock\n + * APB1ENR RTCAPBEN LL_APB1_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1ENR, Periphs); +} + +/** + * @brief Force APB1 peripherals reset. + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM4RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM5RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM12RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM13RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR LPTIM1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPI3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR SPDIFRXRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART4RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART5RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR I2C3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR FMPI2C1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN1RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN2RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CAN3RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART7RST LL_APB1_GRP1_ForceReset\n + * APB1RSTR UART8RST LL_APB1_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->APB1RSTR, Periphs); +} + +/** + * @brief Release APB1 peripherals reset. + * @rmtoll APB1RSTR TIM2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM4RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM5RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM6RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM7RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM12RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM13RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR TIM14RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR LPTIM1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR WWDGRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPI2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPI3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR SPDIFRXRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR USART3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART4RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART5RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR I2C3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR FMPI2C1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN1RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN2RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CAN3RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR CECRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR PWRRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR DACRST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART7RST LL_APB1_GRP1_ReleaseReset\n + * APB1RSTR UART8RST LL_APB1_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1RSTR, Periphs); +} + +/** + * @brief Enable APB1 peripheral clocks in low-power mode + * @rmtoll APB1LPENR TIM2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM4LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM5LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM6LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM7LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM12LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM13LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR TIM14LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR LPTIM1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR WWDGLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPI2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPI3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR SPDIFRXLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR USART2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR USART3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART4LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART5LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR I2C3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR FMPI2C1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN1LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN2LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CAN3LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR CECLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR PWRLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR DACLPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART7LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR UART8LPEN LL_APB1_GRP1_EnableClockLowPower\n + * APB1LPENR RTCAPBLPEN LL_APB1_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB1LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB1LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable APB1 peripheral clocks in low-power mode + * @rmtoll APB1LPENR TIM2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM4LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM5LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM6LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM7LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM12LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM13LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR TIM14LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR LPTIM1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR WWDGLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPI2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPI3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR SPDIFRXLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR USART2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR USART3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART4LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART5LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR I2C3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR FMPI2C1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN1LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN2LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CAN3LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR CECLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR PWRLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR DACLPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART7LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR UART8LPEN LL_APB1_GRP1_DisableClockLowPower\n + * APB1LPENR RTCAPBLPEN LL_APB1_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB1_GRP1_PERIPH_TIM2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM5 + * @arg @ref LL_APB1_GRP1_PERIPH_TIM6 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM12 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM13 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_TIM14 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_WWDG + * @arg @ref LL_APB1_GRP1_PERIPH_SPI2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPI3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_SPDIFRX (*) + * @arg @ref LL_APB1_GRP1_PERIPH_USART2 + * @arg @ref LL_APB1_GRP1_PERIPH_USART3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART4 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART5 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_I2C1 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C2 + * @arg @ref LL_APB1_GRP1_PERIPH_I2C3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_FMPI2C1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN2 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CAN3 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_CEC (*) + * @arg @ref LL_APB1_GRP1_PERIPH_PWR + * @arg @ref LL_APB1_GRP1_PERIPH_DAC1 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART7 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_UART8 (*) + * @arg @ref LL_APB1_GRP1_PERIPH_RTCAPB (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB1_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB1LPENR, Periphs); +} + +/** + * @} + */ + +/** @defgroup BUS_LL_EF_APB2 APB2 + * @{ + */ + +/** + * @brief Enable APB2 peripherals clock. + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_EnableClock\n + * APB2ENR USART1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR USART6EN LL_APB2_GRP1_EnableClock\n + * APB2ENR UART9EN LL_APB2_GRP1_EnableClock\n + * APB2ENR UART10EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_EnableClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_EnableClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_EnableClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_EnableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_EnableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_EnableClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_EnableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB2ENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2ENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Check if APB2 peripheral clock is enabled or not + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR USART1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR USART6EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR UART9EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR UART10EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DSIEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_IsEnabledClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval State of Periphs (1 or 0). +*/ +__STATIC_INLINE uint32_t LL_APB2_GRP1_IsEnabledClock(uint32_t Periphs) +{ + return (READ_BIT(RCC->APB2ENR, Periphs) == Periphs); +} + +/** + * @brief Disable APB2 peripherals clock. + * @rmtoll APB2ENR TIM1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM8EN LL_APB2_GRP1_DisableClock\n + * APB2ENR USART1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR USART6EN LL_APB2_GRP1_DisableClock\n + * APB2ENR UART9EN LL_APB2_GRP1_DisableClock\n + * APB2ENR UART10EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC2EN LL_APB2_GRP1_DisableClock\n + * APB2ENR ADC3EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SDIOEN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI4EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SYSCFGEN LL_APB2_GRP1_DisableClock\n + * APB2ENR EXTITEN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM9EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM10EN LL_APB2_GRP1_DisableClock\n + * APB2ENR TIM11EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI5EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SPI6EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SAI1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR SAI2EN LL_APB2_GRP1_DisableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_DisableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_DisableClock\n + * APB2ENR DFSDM1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR DFSDM2EN LL_APB2_GRP1_DisableClock + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_DisableClock(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2ENR, Periphs); +} + +/** + * @brief Force APB2 peripherals reset. + * @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM8RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR USART1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR USART6RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR UART9RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR UART10RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR ADCRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SDIORST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI4RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SYSCFGRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM9RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM10RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR TIM11RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI5RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SPI6RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SAI1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR SAI2RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DFSDM2RST LL_APB2_GRP1_ForceReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_ALL + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs) +{ + SET_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @brief Release APB2 peripherals reset. + * @rmtoll APB2RSTR TIM1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM8RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR USART1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR USART6RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR UART9RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR UART10RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR ADCRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SDIORST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI4RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SYSCFGRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM9RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM10RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR TIM11RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI5RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SPI6RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SAI1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR SAI2RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DFSDM2RST LL_APB2_GRP1_ReleaseReset + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_ALL + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2RSTR, Periphs); +} + +/** + * @brief Enable APB2 peripheral clocks in low-power mode + * @rmtoll APB2LPENR TIM1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM8LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR USART1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR USART6LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR UART9LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR UART10LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC2LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR ADC3LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SDIOLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI4LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SYSCFGLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR EXTITLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM9LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM10LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR TIM11LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI5LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SPI6LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SAI1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR SAI2LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR LTDCLPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DFSDM1LPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_EnableClockLowPower\n + * APB2LPENR DFSDM2LPEN LL_APB2_GRP1_EnableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_EnableClockLowPower(uint32_t Periphs) +{ + __IO uint32_t tmpreg; + SET_BIT(RCC->APB2LPENR, Periphs); + /* Delay after an RCC peripheral clock enabling */ + tmpreg = READ_BIT(RCC->APB2LPENR, Periphs); + (void)tmpreg; +} + +/** + * @brief Disable APB2 peripheral clocks in low-power mode + * @rmtoll APB2LPENR TIM1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM8LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR USART1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR USART6LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR UART9LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR UART10LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC2LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR ADC3LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SDIOLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI4LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SYSCFGLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR EXTITLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM9LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM10LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR TIM11LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI5LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SPI6LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SAI1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR SAI2LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR LTDCLPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DFSDM1LPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DSILPEN LL_APB2_GRP1_DisableClockLowPower\n + * APB2LPENR DFSDM2LPEN LL_APB2_GRP1_DisableClockLowPower + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_APB2_GRP1_PERIPH_TIM1 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM8 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_USART1 + * @arg @ref LL_APB2_GRP1_PERIPH_USART6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART9 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_UART10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC1 + * @arg @ref LL_APB2_GRP1_PERIPH_ADC2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_ADC3 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SDIO (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI1 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI4 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG + * @arg @ref LL_APB2_GRP1_PERIPH_EXTI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM9 + * @arg @ref LL_APB2_GRP1_PERIPH_TIM10 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_TIM11 + * @arg @ref LL_APB2_GRP1_PERIPH_SPI5 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SPI6 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM2 (*) + * + * (*) value not defined in all devices. + * @retval None +*/ +__STATIC_INLINE void LL_APB2_GRP1_DisableClockLowPower(uint32_t Periphs) +{ + CLEAR_BIT(RCC->APB2LPENR, Periphs); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(RCC) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_BUS_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h new file mode 100644 index 0000000..d478e13 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h @@ -0,0 +1,637 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_cortex.h + * @author MCD Application Team + * @brief Header file of CORTEX LL module. + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL CORTEX driver contains a set of generic APIs that can be + used by user: + (+) SYSTICK configuration used by LL_mDelay and LL_Init1msTick + functions + (+) Low power mode configuration (SCB register of Cortex-MCU) + (+) MPU API to configure and enable regions + (MPU services provided only on some devices) + (+) API to access to MCU info (CPUID register) + (+) API to enable fault handler (SHCSR accesses) + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_CORTEX_H +#define __STM32F4xx_LL_CORTEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +/** @defgroup CORTEX_LL CORTEX + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup CORTEX_LL_Exported_Constants CORTEX Exported Constants + * @{ + */ + +/** @defgroup CORTEX_LL_EC_CLKSOURCE_HCLK SYSTICK Clock Source + * @{ + */ +#define LL_SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U /*!< AHB clock divided by 8 selected as SysTick clock source.*/ +#define LL_SYSTICK_CLKSOURCE_HCLK SysTick_CTRL_CLKSOURCE_Msk /*!< AHB clock selected as SysTick clock source. */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_FAULT Handler Fault type + * @{ + */ +#define LL_HANDLER_FAULT_USG SCB_SHCSR_USGFAULTENA_Msk /*!< Usage fault */ +#define LL_HANDLER_FAULT_BUS SCB_SHCSR_BUSFAULTENA_Msk /*!< Bus fault */ +#define LL_HANDLER_FAULT_MEM SCB_SHCSR_MEMFAULTENA_Msk /*!< Memory management fault */ +/** + * @} + */ + +#if __MPU_PRESENT + +/** @defgroup CORTEX_LL_EC_CTRL_HFNMI_PRIVDEF MPU Control + * @{ + */ +#define LL_MPU_CTRL_HFNMI_PRIVDEF_NONE 0x00000000U /*!< Disable NMI and privileged SW access */ +#define LL_MPU_CTRL_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk /*!< Enables the operation of MPU during hard fault, NMI, and FAULTMASK handlers */ +#define LL_MPU_CTRL_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk /*!< Enable privileged software access to default memory map */ +#define LL_MPU_CTRL_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) /*!< Enable NMI and privileged SW access */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION MPU Region Number + * @{ + */ +#define LL_MPU_REGION_NUMBER0 0x00U /*!< REGION Number 0 */ +#define LL_MPU_REGION_NUMBER1 0x01U /*!< REGION Number 1 */ +#define LL_MPU_REGION_NUMBER2 0x02U /*!< REGION Number 2 */ +#define LL_MPU_REGION_NUMBER3 0x03U /*!< REGION Number 3 */ +#define LL_MPU_REGION_NUMBER4 0x04U /*!< REGION Number 4 */ +#define LL_MPU_REGION_NUMBER5 0x05U /*!< REGION Number 5 */ +#define LL_MPU_REGION_NUMBER6 0x06U /*!< REGION Number 6 */ +#define LL_MPU_REGION_NUMBER7 0x07U /*!< REGION Number 7 */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION_SIZE MPU Region Size + * @{ + */ +#define LL_MPU_REGION_SIZE_32B (0x04U << MPU_RASR_SIZE_Pos) /*!< 32B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64B (0x05U << MPU_RASR_SIZE_Pos) /*!< 64B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128B (0x06U << MPU_RASR_SIZE_Pos) /*!< 128B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256B (0x07U << MPU_RASR_SIZE_Pos) /*!< 256B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512B (0x08U << MPU_RASR_SIZE_Pos) /*!< 512B Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1KB (0x09U << MPU_RASR_SIZE_Pos) /*!< 1KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2KB (0x0AU << MPU_RASR_SIZE_Pos) /*!< 2KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4KB (0x0BU << MPU_RASR_SIZE_Pos) /*!< 4KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_8KB (0x0CU << MPU_RASR_SIZE_Pos) /*!< 8KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_16KB (0x0DU << MPU_RASR_SIZE_Pos) /*!< 16KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_32KB (0x0EU << MPU_RASR_SIZE_Pos) /*!< 32KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64KB (0x0FU << MPU_RASR_SIZE_Pos) /*!< 64KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128KB (0x10U << MPU_RASR_SIZE_Pos) /*!< 128KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256KB (0x11U << MPU_RASR_SIZE_Pos) /*!< 256KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512KB (0x12U << MPU_RASR_SIZE_Pos) /*!< 512KB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1MB (0x13U << MPU_RASR_SIZE_Pos) /*!< 1MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2MB (0x14U << MPU_RASR_SIZE_Pos) /*!< 2MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4MB (0x15U << MPU_RASR_SIZE_Pos) /*!< 4MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_8MB (0x16U << MPU_RASR_SIZE_Pos) /*!< 8MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_16MB (0x17U << MPU_RASR_SIZE_Pos) /*!< 16MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_32MB (0x18U << MPU_RASR_SIZE_Pos) /*!< 32MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_64MB (0x19U << MPU_RASR_SIZE_Pos) /*!< 64MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_128MB (0x1AU << MPU_RASR_SIZE_Pos) /*!< 128MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_256MB (0x1BU << MPU_RASR_SIZE_Pos) /*!< 256MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_512MB (0x1CU << MPU_RASR_SIZE_Pos) /*!< 512MB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_1GB (0x1DU << MPU_RASR_SIZE_Pos) /*!< 1GB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_2GB (0x1EU << MPU_RASR_SIZE_Pos) /*!< 2GB Size of the MPU protection region */ +#define LL_MPU_REGION_SIZE_4GB (0x1FU << MPU_RASR_SIZE_Pos) /*!< 4GB Size of the MPU protection region */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_REGION_PRIVILEDGES MPU Region Privileges + * @{ + */ +#define LL_MPU_REGION_NO_ACCESS (0x00U << MPU_RASR_AP_Pos) /*!< No access*/ +#define LL_MPU_REGION_PRIV_RW (0x01U << MPU_RASR_AP_Pos) /*!< RW privileged (privileged access only)*/ +#define LL_MPU_REGION_PRIV_RW_URO (0x02U << MPU_RASR_AP_Pos) /*!< RW privileged - RO user (Write in a user program generates a fault) */ +#define LL_MPU_REGION_FULL_ACCESS (0x03U << MPU_RASR_AP_Pos) /*!< RW privileged & user (Full access) */ +#define LL_MPU_REGION_PRIV_RO (0x05U << MPU_RASR_AP_Pos) /*!< RO privileged (privileged read only)*/ +#define LL_MPU_REGION_PRIV_RO_URO (0x06U << MPU_RASR_AP_Pos) /*!< RO privileged & user (read only) */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_TEX MPU TEX Level + * @{ + */ +#define LL_MPU_TEX_LEVEL0 (0x00U << MPU_RASR_TEX_Pos) /*!< b000 for TEX bits */ +#define LL_MPU_TEX_LEVEL1 (0x01U << MPU_RASR_TEX_Pos) /*!< b001 for TEX bits */ +#define LL_MPU_TEX_LEVEL2 (0x02U << MPU_RASR_TEX_Pos) /*!< b010 for TEX bits */ +#define LL_MPU_TEX_LEVEL4 (0x04U << MPU_RASR_TEX_Pos) /*!< b100 for TEX bits */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_INSTRUCTION_ACCESS MPU Instruction Access + * @{ + */ +#define LL_MPU_INSTRUCTION_ACCESS_ENABLE 0x00U /*!< Instruction fetches enabled */ +#define LL_MPU_INSTRUCTION_ACCESS_DISABLE MPU_RASR_XN_Msk /*!< Instruction fetches disabled*/ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_SHAREABLE_ACCESS MPU Shareable Access + * @{ + */ +#define LL_MPU_ACCESS_SHAREABLE MPU_RASR_S_Msk /*!< Shareable memory attribute */ +#define LL_MPU_ACCESS_NOT_SHAREABLE 0x00U /*!< Not Shareable memory attribute */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_CACHEABLE_ACCESS MPU Cacheable Access + * @{ + */ +#define LL_MPU_ACCESS_CACHEABLE MPU_RASR_C_Msk /*!< Cacheable memory attribute */ +#define LL_MPU_ACCESS_NOT_CACHEABLE 0x00U /*!< Not Cacheable memory attribute */ +/** + * @} + */ + +/** @defgroup CORTEX_LL_EC_BUFFERABLE_ACCESS MPU Bufferable Access + * @{ + */ +#define LL_MPU_ACCESS_BUFFERABLE MPU_RASR_B_Msk /*!< Bufferable memory attribute */ +#define LL_MPU_ACCESS_NOT_BUFFERABLE 0x00U /*!< Not Bufferable memory attribute */ +/** + * @} + */ +#endif /* __MPU_PRESENT */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup CORTEX_LL_Exported_Functions CORTEX Exported Functions + * @{ + */ + +/** @defgroup CORTEX_LL_EF_SYSTICK SYSTICK + * @{ + */ + +/** + * @brief This function checks if the Systick counter flag is active or not. + * @note It can be used in timeout function on application side. + * @rmtoll STK_CTRL COUNTFLAG LL_SYSTICK_IsActiveCounterFlag + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSTICK_IsActiveCounterFlag(void) +{ + return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk)); +} + +/** + * @brief Configures the SysTick clock source + * @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_SetClkSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8 + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_SetClkSource(uint32_t Source) +{ + if (Source == LL_SYSTICK_CLKSOURCE_HCLK) + { + SET_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); + } + else + { + CLEAR_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); + } +} + +/** + * @brief Get the SysTick clock source + * @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_GetClkSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8 + * @arg @ref LL_SYSTICK_CLKSOURCE_HCLK + */ +__STATIC_INLINE uint32_t LL_SYSTICK_GetClkSource(void) +{ + return READ_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK); +} + +/** + * @brief Enable SysTick exception request + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_EnableIT + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_EnableIT(void) +{ + SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief Disable SysTick exception request + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_DisableIT + * @retval None + */ +__STATIC_INLINE void LL_SYSTICK_DisableIT(void) +{ + CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); +} + +/** + * @brief Checks if the SYSTICK interrupt is enabled or disabled. + * @rmtoll STK_CTRL TICKINT LL_SYSTICK_IsEnabledIT + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSTICK_IsEnabledIT(void) +{ + return (READ_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) == (SysTick_CTRL_TICKINT_Msk)); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_LOW_POWER_MODE LOW POWER MODE + * @{ + */ + +/** + * @brief Processor uses sleep as its low power mode + * @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableSleep + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableSleep(void) +{ + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Processor uses deep sleep as its low power mode + * @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableDeepSleep + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableDeepSleep(void) +{ + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Configures sleep-on-exit when returning from Handler mode to Thread mode. + * @note Setting this bit to 1 enables an interrupt-driven application to avoid returning to an + * empty main application. + * @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_EnableSleepOnExit + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Do not sleep when returning to Thread mode. + * @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_DisableSleepOnExit + * @retval None + */ +__STATIC_INLINE void LL_LPM_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Enabled events and all interrupts, including disabled interrupts, can wakeup the + * processor. + * @rmtoll SCB_SCR SEVEONPEND LL_LPM_EnableEventOnPend + * @retval None + */ +__STATIC_INLINE void LL_LPM_EnableEventOnPend(void) +{ + /* Set SEVEONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @brief Only enabled interrupts or events can wakeup the processor, disabled interrupts are + * excluded + * @rmtoll SCB_SCR SEVEONPEND LL_LPM_DisableEventOnPend + * @retval None + */ +__STATIC_INLINE void LL_LPM_DisableEventOnPend(void) +{ + /* Clear SEVEONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_HANDLER HANDLER + * @{ + */ + +/** + * @brief Enable a fault in System handler control register (SHCSR) + * @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_EnableFault + * @param Fault This parameter can be a combination of the following values: + * @arg @ref LL_HANDLER_FAULT_USG + * @arg @ref LL_HANDLER_FAULT_BUS + * @arg @ref LL_HANDLER_FAULT_MEM + * @retval None + */ +__STATIC_INLINE void LL_HANDLER_EnableFault(uint32_t Fault) +{ + /* Enable the system handler fault */ + SET_BIT(SCB->SHCSR, Fault); +} + +/** + * @brief Disable a fault in System handler control register (SHCSR) + * @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_DisableFault + * @param Fault This parameter can be a combination of the following values: + * @arg @ref LL_HANDLER_FAULT_USG + * @arg @ref LL_HANDLER_FAULT_BUS + * @arg @ref LL_HANDLER_FAULT_MEM + * @retval None + */ +__STATIC_INLINE void LL_HANDLER_DisableFault(uint32_t Fault) +{ + /* Disable the system handler fault */ + CLEAR_BIT(SCB->SHCSR, Fault); +} + +/** + * @} + */ + +/** @defgroup CORTEX_LL_EF_MCU_INFO MCU INFO + * @{ + */ + +/** + * @brief Get Implementer code + * @rmtoll SCB_CPUID IMPLEMENTER LL_CPUID_GetImplementer + * @retval Value should be equal to 0x41 for ARM + */ +__STATIC_INLINE uint32_t LL_CPUID_GetImplementer(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos); +} + +/** + * @brief Get Variant number (The r value in the rnpn product revision identifier) + * @rmtoll SCB_CPUID VARIANT LL_CPUID_GetVariant + * @retval Value between 0 and 255 (0x0: revision 0) + */ +__STATIC_INLINE uint32_t LL_CPUID_GetVariant(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos); +} + +/** + * @brief Get Constant number + * @rmtoll SCB_CPUID ARCHITECTURE LL_CPUID_GetConstant + * @retval Value should be equal to 0xF for Cortex-M4 devices + */ +__STATIC_INLINE uint32_t LL_CPUID_GetConstant(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_ARCHITECTURE_Msk) >> SCB_CPUID_ARCHITECTURE_Pos); +} + +/** + * @brief Get Part number + * @rmtoll SCB_CPUID PARTNO LL_CPUID_GetParNo + * @retval Value should be equal to 0xC24 for Cortex-M4 + */ +__STATIC_INLINE uint32_t LL_CPUID_GetParNo(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos); +} + +/** + * @brief Get Revision number (The p value in the rnpn product revision identifier, indicates patch release) + * @rmtoll SCB_CPUID REVISION LL_CPUID_GetRevision + * @retval Value between 0 and 255 (0x1: patch 1) + */ +__STATIC_INLINE uint32_t LL_CPUID_GetRevision(void) +{ + return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos); +} + +/** + * @} + */ + +#if __MPU_PRESENT +/** @defgroup CORTEX_LL_EF_MPU MPU + * @{ + */ + +/** + * @brief Enable MPU with input options + * @rmtoll MPU_CTRL ENABLE LL_MPU_Enable + * @param Options This parameter can be one of the following values: + * @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF_NONE + * @arg @ref LL_MPU_CTRL_HARDFAULT_NMI + * @arg @ref LL_MPU_CTRL_PRIVILEGED_DEFAULT + * @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF + * @retval None + */ +__STATIC_INLINE void LL_MPU_Enable(uint32_t Options) +{ + /* Enable the MPU*/ + WRITE_REG(MPU->CTRL, (MPU_CTRL_ENABLE_Msk | Options)); + /* Ensure MPU settings take effects */ + __DSB(); + /* Sequence instruction fetches using update settings */ + __ISB(); +} + +/** + * @brief Disable MPU + * @rmtoll MPU_CTRL ENABLE LL_MPU_Disable + * @retval None + */ +__STATIC_INLINE void LL_MPU_Disable(void) +{ + /* Make sure outstanding transfers are done */ + __DMB(); + /* Disable MPU*/ + WRITE_REG(MPU->CTRL, 0U); +} + +/** + * @brief Check if MPU is enabled or not + * @rmtoll MPU_CTRL ENABLE LL_MPU_IsEnabled + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_MPU_IsEnabled(void) +{ + return (READ_BIT(MPU->CTRL, MPU_CTRL_ENABLE_Msk) == (MPU_CTRL_ENABLE_Msk)); +} + +/** + * @brief Enable a MPU region + * @rmtoll MPU_RASR ENABLE LL_MPU_EnableRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @retval None + */ +__STATIC_INLINE void LL_MPU_EnableRegion(uint32_t Region) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Enable the MPU region */ + SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @brief Configure and enable a region + * @rmtoll MPU_RNR REGION LL_MPU_ConfigRegion\n + * MPU_RBAR REGION LL_MPU_ConfigRegion\n + * MPU_RBAR ADDR LL_MPU_ConfigRegion\n + * MPU_RASR XN LL_MPU_ConfigRegion\n + * MPU_RASR AP LL_MPU_ConfigRegion\n + * MPU_RASR S LL_MPU_ConfigRegion\n + * MPU_RASR C LL_MPU_ConfigRegion\n + * MPU_RASR B LL_MPU_ConfigRegion\n + * MPU_RASR SIZE LL_MPU_ConfigRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @param Address Value of region base address + * @param SubRegionDisable Sub-region disable value between Min_Data = 0x00 and Max_Data = 0xFF + * @param Attributes This parameter can be a combination of the following values: + * @arg @ref LL_MPU_REGION_SIZE_32B or @ref LL_MPU_REGION_SIZE_64B or @ref LL_MPU_REGION_SIZE_128B or @ref LL_MPU_REGION_SIZE_256B or @ref LL_MPU_REGION_SIZE_512B + * or @ref LL_MPU_REGION_SIZE_1KB or @ref LL_MPU_REGION_SIZE_2KB or @ref LL_MPU_REGION_SIZE_4KB or @ref LL_MPU_REGION_SIZE_8KB or @ref LL_MPU_REGION_SIZE_16KB + * or @ref LL_MPU_REGION_SIZE_32KB or @ref LL_MPU_REGION_SIZE_64KB or @ref LL_MPU_REGION_SIZE_128KB or @ref LL_MPU_REGION_SIZE_256KB or @ref LL_MPU_REGION_SIZE_512KB + * or @ref LL_MPU_REGION_SIZE_1MB or @ref LL_MPU_REGION_SIZE_2MB or @ref LL_MPU_REGION_SIZE_4MB or @ref LL_MPU_REGION_SIZE_8MB or @ref LL_MPU_REGION_SIZE_16MB + * or @ref LL_MPU_REGION_SIZE_32MB or @ref LL_MPU_REGION_SIZE_64MB or @ref LL_MPU_REGION_SIZE_128MB or @ref LL_MPU_REGION_SIZE_256MB or @ref LL_MPU_REGION_SIZE_512MB + * or @ref LL_MPU_REGION_SIZE_1GB or @ref LL_MPU_REGION_SIZE_2GB or @ref LL_MPU_REGION_SIZE_4GB + * @arg @ref LL_MPU_REGION_NO_ACCESS or @ref LL_MPU_REGION_PRIV_RW or @ref LL_MPU_REGION_PRIV_RW_URO or @ref LL_MPU_REGION_FULL_ACCESS + * or @ref LL_MPU_REGION_PRIV_RO or @ref LL_MPU_REGION_PRIV_RO_URO + * @arg @ref LL_MPU_TEX_LEVEL0 or @ref LL_MPU_TEX_LEVEL1 or @ref LL_MPU_TEX_LEVEL2 or @ref LL_MPU_TEX_LEVEL4 + * @arg @ref LL_MPU_INSTRUCTION_ACCESS_ENABLE or @ref LL_MPU_INSTRUCTION_ACCESS_DISABLE + * @arg @ref LL_MPU_ACCESS_SHAREABLE or @ref LL_MPU_ACCESS_NOT_SHAREABLE + * @arg @ref LL_MPU_ACCESS_CACHEABLE or @ref LL_MPU_ACCESS_NOT_CACHEABLE + * @arg @ref LL_MPU_ACCESS_BUFFERABLE or @ref LL_MPU_ACCESS_NOT_BUFFERABLE + * @retval None + */ +__STATIC_INLINE void LL_MPU_ConfigRegion(uint32_t Region, uint32_t SubRegionDisable, uint32_t Address, uint32_t Attributes) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Set base address */ + WRITE_REG(MPU->RBAR, (Address & 0xFFFFFFE0U)); + /* Configure MPU */ + WRITE_REG(MPU->RASR, (MPU_RASR_ENABLE_Msk | Attributes | SubRegionDisable << MPU_RASR_SRD_Pos)); +} + +/** + * @brief Disable a region + * @rmtoll MPU_RNR REGION LL_MPU_DisableRegion\n + * MPU_RASR ENABLE LL_MPU_DisableRegion + * @param Region This parameter can be one of the following values: + * @arg @ref LL_MPU_REGION_NUMBER0 + * @arg @ref LL_MPU_REGION_NUMBER1 + * @arg @ref LL_MPU_REGION_NUMBER2 + * @arg @ref LL_MPU_REGION_NUMBER3 + * @arg @ref LL_MPU_REGION_NUMBER4 + * @arg @ref LL_MPU_REGION_NUMBER5 + * @arg @ref LL_MPU_REGION_NUMBER6 + * @arg @ref LL_MPU_REGION_NUMBER7 + * @retval None + */ +__STATIC_INLINE void LL_MPU_DisableRegion(uint32_t Region) +{ + /* Set Region number */ + WRITE_REG(MPU->RNR, Region); + /* Disable the MPU region */ + CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk); +} + +/** + * @} + */ + +#endif /* __MPU_PRESENT */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_CORTEX_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h new file mode 100644 index 0000000..76444fc --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h @@ -0,0 +1,2868 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_dma.h + * @author MCD Application Team + * @brief Header file of DMA LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_DMA_H +#define __STM32F4xx_LL_DMA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (DMA1) || defined (DMA2) + +/** @defgroup DMA_LL DMA + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup DMA_LL_Private_Variables DMA Private Variables + * @{ + */ +/* Array used to get the DMA stream register offset versus stream index LL_DMA_STREAM_x */ +static const uint8_t STREAM_OFFSET_TAB[] = +{ + (uint8_t)(DMA1_Stream0_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream1_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream2_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream3_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream4_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream5_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream6_BASE - DMA1_BASE), + (uint8_t)(DMA1_Stream7_BASE - DMA1_BASE) +}; + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup DMA_LL_Private_Constants DMA Private Constants + * @{ + */ +/** + * @} + */ + + +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup DMA_LL_ES_INIT DMA Exported Init structure + * @{ + */ +typedef struct +{ + uint32_t PeriphOrM2MSrcAddress; /*!< Specifies the peripheral base address for DMA transfer + or as Source base address in case of memory to memory transfer direction. + + This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */ + + uint32_t MemoryOrM2MDstAddress; /*!< Specifies the memory base address for DMA transfer + or as Destination base address in case of memory to memory transfer direction. + + This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */ + + uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, + from memory to memory or from peripheral to memory. + This parameter can be a value of @ref DMA_LL_EC_DIRECTION + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */ + + uint32_t Mode; /*!< Specifies the normal or circular operation mode. + This parameter can be a value of @ref DMA_LL_EC_MODE + @note The circular buffer mode cannot be used if the memory to memory + data transfer direction is configured on the selected Stream + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */ + + uint32_t PeriphOrM2MSrcIncMode; /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction + is incremented or not. + This parameter can be a value of @ref DMA_LL_EC_PERIPH + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */ + + uint32_t MemoryOrM2MDstIncMode; /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction + is incremented or not. + This parameter can be a value of @ref DMA_LL_EC_MEMORY + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */ + + uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word) + in case of memory to memory transfer direction. + This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */ + + uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word) + in case of memory to memory transfer direction. + This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */ + + uint32_t NbData; /*!< Specifies the number of data to transfer, in data unit. + The data unit is equal to the source buffer configuration set in PeripheralSize + or MemorySize parameters depending in the transfer direction. + This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */ + + uint32_t Channel; /*!< Specifies the peripheral channel. + This parameter can be a value of @ref DMA_LL_EC_CHANNEL + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelSelection(). */ + + uint32_t Priority; /*!< Specifies the channel priority level. + This parameter can be a value of @ref DMA_LL_EC_PRIORITY + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetStreamPriorityLevel(). */ + + uint32_t FIFOMode; /*!< Specifies if the FIFO mode or Direct mode will be used for the specified stream. + This parameter can be a value of @ref DMA_LL_FIFOMODE + @note The Direct mode (FIFO mode disabled) cannot be used if the + memory-to-memory data transfer is configured on the selected stream + + This feature can be modified afterwards using unitary functions @ref LL_DMA_EnableFifoMode() or @ref LL_DMA_EnableFifoMode() . */ + + uint32_t FIFOThreshold; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_LL_EC_FIFOTHRESHOLD + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetFIFOThreshold(). */ + + uint32_t MemBurst; /*!< Specifies the Burst transfer configuration for the memory transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_LL_EC_MBURST + @note The burst mode is possible only if the address Increment mode is enabled. + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryBurstxfer(). */ + + uint32_t PeriphBurst; /*!< Specifies the Burst transfer configuration for the peripheral transfers. + It specifies the amount of data to be transferred in a single non interruptible + transaction. + This parameter can be a value of @ref DMA_LL_EC_PBURST + @note The burst mode is possible only if the address Increment mode is enabled. + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphBurstxfer(). */ + +} LL_DMA_InitTypeDef; +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Constants DMA Exported Constants + * @{ + */ + +/** @defgroup DMA_LL_EC_STREAM STREAM + * @{ + */ +#define LL_DMA_STREAM_0 0x00000000U +#define LL_DMA_STREAM_1 0x00000001U +#define LL_DMA_STREAM_2 0x00000002U +#define LL_DMA_STREAM_3 0x00000003U +#define LL_DMA_STREAM_4 0x00000004U +#define LL_DMA_STREAM_5 0x00000005U +#define LL_DMA_STREAM_6 0x00000006U +#define LL_DMA_STREAM_7 0x00000007U +#define LL_DMA_STREAM_ALL 0xFFFF0000U +/** + * @} + */ + +/** @defgroup DMA_LL_EC_DIRECTION DIRECTION + * @{ + */ +#define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_SxCR_DIR_0 /*!< Memory to peripheral direction */ +#define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_SxCR_DIR_1 /*!< Memory to memory direction */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MODE MODE + * @{ + */ +#define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */ +#define LL_DMA_MODE_CIRCULAR DMA_SxCR_CIRC /*!< Circular Mode */ +#define LL_DMA_MODE_PFCTRL DMA_SxCR_PFCTRL /*!< Peripheral flow control mode */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_DOUBLEBUFFER_MODE DOUBLEBUFFER MODE + * @{ + */ +#define LL_DMA_DOUBLEBUFFER_MODE_DISABLE 0x00000000U /*!< Disable double buffering mode */ +#define LL_DMA_DOUBLEBUFFER_MODE_ENABLE DMA_SxCR_DBM /*!< Enable double buffering mode */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PERIPH PERIPH + * @{ + */ +#define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */ +#define LL_DMA_PERIPH_INCREMENT DMA_SxCR_PINC /*!< Peripheral increment mode Enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MEMORY MEMORY + * @{ + */ +#define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */ +#define LL_DMA_MEMORY_INCREMENT DMA_SxCR_MINC /*!< Memory increment mode Enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PDATAALIGN PDATAALIGN + * @{ + */ +#define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */ +#define LL_DMA_PDATAALIGN_HALFWORD DMA_SxCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */ +#define LL_DMA_PDATAALIGN_WORD DMA_SxCR_PSIZE_1 /*!< Peripheral data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MDATAALIGN MDATAALIGN + * @{ + */ +#define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */ +#define LL_DMA_MDATAALIGN_HALFWORD DMA_SxCR_MSIZE_0 /*!< Memory data alignment : HalfWord */ +#define LL_DMA_MDATAALIGN_WORD DMA_SxCR_MSIZE_1 /*!< Memory data alignment : Word */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_OFFSETSIZE OFFSETSIZE + * @{ + */ +#define LL_DMA_OFFSETSIZE_PSIZE 0x00000000U /*!< Peripheral increment offset size is linked to the PSIZE */ +#define LL_DMA_OFFSETSIZE_FIXEDTO4 DMA_SxCR_PINCOS /*!< Peripheral increment offset size is fixed to 4 (32-bit alignment) */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PRIORITY PRIORITY + * @{ + */ +#define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */ +#define LL_DMA_PRIORITY_MEDIUM DMA_SxCR_PL_0 /*!< Priority level : Medium */ +#define LL_DMA_PRIORITY_HIGH DMA_SxCR_PL_1 /*!< Priority level : High */ +#define LL_DMA_PRIORITY_VERYHIGH DMA_SxCR_PL /*!< Priority level : Very_High */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_CHANNEL CHANNEL + * @{ + */ +#define LL_DMA_CHANNEL_0 0x00000000U /* Select Channel0 of DMA Instance */ +#define LL_DMA_CHANNEL_1 DMA_SxCR_CHSEL_0 /* Select Channel1 of DMA Instance */ +#define LL_DMA_CHANNEL_2 DMA_SxCR_CHSEL_1 /* Select Channel2 of DMA Instance */ +#define LL_DMA_CHANNEL_3 (DMA_SxCR_CHSEL_0 | DMA_SxCR_CHSEL_1) /* Select Channel3 of DMA Instance */ +#define LL_DMA_CHANNEL_4 DMA_SxCR_CHSEL_2 /* Select Channel4 of DMA Instance */ +#define LL_DMA_CHANNEL_5 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_0) /* Select Channel5 of DMA Instance */ +#define LL_DMA_CHANNEL_6 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1) /* Select Channel6 of DMA Instance */ +#define LL_DMA_CHANNEL_7 (DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel7 of DMA Instance */ +#if defined (DMA_SxCR_CHSEL_3) +#define LL_DMA_CHANNEL_8 DMA_SxCR_CHSEL_3 /* Select Channel8 of DMA Instance */ +#define LL_DMA_CHANNEL_9 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_0) /* Select Channel9 of DMA Instance */ +#define LL_DMA_CHANNEL_10 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_1) /* Select Channel10 of DMA Instance */ +#define LL_DMA_CHANNEL_11 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel11 of DMA Instance */ +#define LL_DMA_CHANNEL_12 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2) /* Select Channel12 of DMA Instance */ +#define LL_DMA_CHANNEL_13 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_0) /* Select Channel13 of DMA Instance */ +#define LL_DMA_CHANNEL_14 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1) /* Select Channel14 of DMA Instance */ +#define LL_DMA_CHANNEL_15 (DMA_SxCR_CHSEL_3 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0) /* Select Channel15 of DMA Instance */ +#endif /* DMA_SxCR_CHSEL_3 */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_MBURST MBURST + * @{ + */ +#define LL_DMA_MBURST_SINGLE 0x00000000U /*!< Memory burst single transfer configuration */ +#define LL_DMA_MBURST_INC4 DMA_SxCR_MBURST_0 /*!< Memory burst of 4 beats transfer configuration */ +#define LL_DMA_MBURST_INC8 DMA_SxCR_MBURST_1 /*!< Memory burst of 8 beats transfer configuration */ +#define LL_DMA_MBURST_INC16 (DMA_SxCR_MBURST_0 | DMA_SxCR_MBURST_1) /*!< Memory burst of 16 beats transfer configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_PBURST PBURST + * @{ + */ +#define LL_DMA_PBURST_SINGLE 0x00000000U /*!< Peripheral burst single transfer configuration */ +#define LL_DMA_PBURST_INC4 DMA_SxCR_PBURST_0 /*!< Peripheral burst of 4 beats transfer configuration */ +#define LL_DMA_PBURST_INC8 DMA_SxCR_PBURST_1 /*!< Peripheral burst of 8 beats transfer configuration */ +#define LL_DMA_PBURST_INC16 (DMA_SxCR_PBURST_0 | DMA_SxCR_PBURST_1) /*!< Peripheral burst of 16 beats transfer configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_FIFOMODE DMA_LL_FIFOMODE + * @{ + */ +#define LL_DMA_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable (direct mode is enabled) */ +#define LL_DMA_FIFOMODE_ENABLE DMA_SxFCR_DMDIS /*!< FIFO mode enable */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_FIFOSTATUS_0 FIFOSTATUS 0 + * @{ + */ +#define LL_DMA_FIFOSTATUS_0_25 0x00000000U /*!< 0 < fifo_level < 1/4 */ +#define LL_DMA_FIFOSTATUS_25_50 DMA_SxFCR_FS_0 /*!< 1/4 < fifo_level < 1/2 */ +#define LL_DMA_FIFOSTATUS_50_75 DMA_SxFCR_FS_1 /*!< 1/2 < fifo_level < 3/4 */ +#define LL_DMA_FIFOSTATUS_75_100 (DMA_SxFCR_FS_1 | DMA_SxFCR_FS_0) /*!< 3/4 < fifo_level < full */ +#define LL_DMA_FIFOSTATUS_EMPTY DMA_SxFCR_FS_2 /*!< FIFO is empty */ +#define LL_DMA_FIFOSTATUS_FULL (DMA_SxFCR_FS_2 | DMA_SxFCR_FS_0) /*!< FIFO is full */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_FIFOTHRESHOLD FIFOTHRESHOLD + * @{ + */ +#define LL_DMA_FIFOTHRESHOLD_1_4 0x00000000U /*!< FIFO threshold 1 quart full configuration */ +#define LL_DMA_FIFOTHRESHOLD_1_2 DMA_SxFCR_FTH_0 /*!< FIFO threshold half full configuration */ +#define LL_DMA_FIFOTHRESHOLD_3_4 DMA_SxFCR_FTH_1 /*!< FIFO threshold 3 quarts full configuration */ +#define LL_DMA_FIFOTHRESHOLD_FULL DMA_SxFCR_FTH /*!< FIFO threshold full configuration */ +/** + * @} + */ + +/** @defgroup DMA_LL_EC_CURRENTTARGETMEM CURRENTTARGETMEM + * @{ + */ +#define LL_DMA_CURRENTTARGETMEM0 0x00000000U /*!< Set CurrentTarget Memory to Memory 0 */ +#define LL_DMA_CURRENTTARGETMEM1 DMA_SxCR_CT /*!< Set CurrentTarget Memory to Memory 1 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMA_LL_Exported_Macros DMA Exported Macros + * @{ + */ + +/** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros + * @{ + */ +/** + * @brief Write a value in DMA register + * @param __INSTANCE__ DMA Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in DMA register + * @param __INSTANCE__ DMA Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxStreamy + * @{ + */ +/** + * @brief Convert DMAx_Streamy into DMAx + * @param __STREAM_INSTANCE__ DMAx_Streamy + * @retval DMAx + */ +#define __LL_DMA_GET_INSTANCE(__STREAM_INSTANCE__) \ +(((uint32_t)(__STREAM_INSTANCE__) > ((uint32_t)DMA1_Stream7)) ? DMA2 : DMA1) + +/** + * @brief Convert DMAx_Streamy into LL_DMA_STREAM_y + * @param __STREAM_INSTANCE__ DMAx_Streamy + * @retval LL_DMA_CHANNEL_y + */ +#define __LL_DMA_GET_STREAM(__STREAM_INSTANCE__) \ +(((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream0)) ? LL_DMA_STREAM_0 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream0)) ? LL_DMA_STREAM_0 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream1)) ? LL_DMA_STREAM_1 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream1)) ? LL_DMA_STREAM_1 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream2)) ? LL_DMA_STREAM_2 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream2)) ? LL_DMA_STREAM_2 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream3)) ? LL_DMA_STREAM_3 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream3)) ? LL_DMA_STREAM_3 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream4)) ? LL_DMA_STREAM_4 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream4)) ? LL_DMA_STREAM_4 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream5)) ? LL_DMA_STREAM_5 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream5)) ? LL_DMA_STREAM_5 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA1_Stream6)) ? LL_DMA_STREAM_6 : \ + ((uint32_t)(__STREAM_INSTANCE__) == ((uint32_t)DMA2_Stream6)) ? LL_DMA_STREAM_6 : \ + LL_DMA_STREAM_7) + +/** + * @brief Convert DMA Instance DMAx and LL_DMA_STREAM_y into DMAx_Streamy + * @param __DMA_INSTANCE__ DMAx + * @param __STREAM__ LL_DMA_STREAM_y + * @retval DMAx_Streamy + */ +#define __LL_DMA_GET_STREAM_INSTANCE(__DMA_INSTANCE__, __STREAM__) \ +((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_0))) ? DMA1_Stream0 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_0))) ? DMA2_Stream0 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_1))) ? DMA1_Stream1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_1))) ? DMA2_Stream1 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_2))) ? DMA1_Stream2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_2))) ? DMA2_Stream2 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_3))) ? DMA1_Stream3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_3))) ? DMA2_Stream3 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_4))) ? DMA1_Stream4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_4))) ? DMA2_Stream4 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_5))) ? DMA1_Stream5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_5))) ? DMA2_Stream5 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_6))) ? DMA1_Stream6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_6))) ? DMA2_Stream6 : \ + (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__STREAM__) == ((uint32_t)LL_DMA_STREAM_7))) ? DMA1_Stream7 : \ + DMA2_Stream7) + +/** + * @} + */ + +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ + /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions + * @{ + */ + +/** @defgroup DMA_LL_EF_Configuration Configuration + * @{ + */ +/** + * @brief Enable DMA stream. + * @rmtoll CR EN LL_DMA_EnableStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN); +} + +/** + * @brief Disable DMA stream. + * @rmtoll CR EN LL_DMA_DisableStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN); +} + +/** + * @brief Check if DMA stream is enabled or disabled. + * @rmtoll CR EN LL_DMA_IsEnabledStream + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledStream(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_EN) == (DMA_SxCR_EN)); +} + +/** + * @brief Configure all parameters linked to DMA transfer. + * @rmtoll CR DIR LL_DMA_ConfigTransfer\n + * CR CIRC LL_DMA_ConfigTransfer\n + * CR PINC LL_DMA_ConfigTransfer\n + * CR MINC LL_DMA_ConfigTransfer\n + * CR PSIZE LL_DMA_ConfigTransfer\n + * CR MSIZE LL_DMA_ConfigTransfer\n + * CR PL LL_DMA_ConfigTransfer\n + * CR PFCTRL LL_DMA_ConfigTransfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Configuration This parameter must be a combination of all the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR or @ref LL_DMA_MODE_PFCTRL + * @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD + * @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD + * @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH + *@retval None + */ +__STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Configuration) +{ + MODIFY_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, + DMA_SxCR_DIR | DMA_SxCR_CIRC | DMA_SxCR_PINC | DMA_SxCR_MINC | DMA_SxCR_PSIZE | DMA_SxCR_MSIZE | DMA_SxCR_PL | DMA_SxCR_PFCTRL, + Configuration); +} + +/** + * @brief Set Data transfer direction (read from peripheral or from memory). + * @rmtoll CR DIR LL_DMA_SetDataTransferDirection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Direction This parameter can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Direction) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DIR, Direction); +} + +/** + * @brief Get Data transfer direction (read from peripheral or from memory). + * @rmtoll CR DIR LL_DMA_GetDataTransferDirection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + */ +__STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DIR)); +} + +/** + * @brief Set DMA mode normal, circular or peripheral flow control. + * @rmtoll CR CIRC LL_DMA_SetMode\n + * CR PFCTRL LL_DMA_SetMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + * @arg @ref LL_DMA_MODE_PFCTRL + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Mode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CIRC | DMA_SxCR_PFCTRL, Mode); +} + +/** + * @brief Get DMA mode normal, circular or peripheral flow control. + * @rmtoll CR CIRC LL_DMA_GetMode\n + * CR PFCTRL LL_DMA_GetMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MODE_NORMAL + * @arg @ref LL_DMA_MODE_CIRCULAR + * @arg @ref LL_DMA_MODE_PFCTRL + */ +__STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CIRC | DMA_SxCR_PFCTRL)); +} + +/** + * @brief Set Peripheral increment mode. + * @rmtoll CR PINC LL_DMA_SetPeriphIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param IncrementMode This parameter can be one of the following values: + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_PERIPH_INCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t IncrementMode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINC, IncrementMode); +} + +/** + * @brief Get Peripheral increment mode. + * @rmtoll CR PINC LL_DMA_GetPeriphIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PERIPH_NOINCREMENT + * @arg @ref LL_DMA_PERIPH_INCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINC)); +} + +/** + * @brief Set Memory increment mode. + * @rmtoll CR MINC LL_DMA_SetMemoryIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param IncrementMode This parameter can be one of the following values: + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t IncrementMode) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MINC, IncrementMode); +} + +/** + * @brief Get Memory increment mode. + * @rmtoll CR MINC LL_DMA_GetMemoryIncMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MEMORY_NOINCREMENT + * @arg @ref LL_DMA_MEMORY_INCREMENT + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MINC)); +} + +/** + * @brief Set Peripheral size. + * @rmtoll CR PSIZE LL_DMA_SetPeriphSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Size This parameter can be one of the following values: + * @arg @ref LL_DMA_PDATAALIGN_BYTE + * @arg @ref LL_DMA_PDATAALIGN_HALFWORD + * @arg @ref LL_DMA_PDATAALIGN_WORD + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Size) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PSIZE, Size); +} + +/** + * @brief Get Peripheral size. + * @rmtoll CR PSIZE LL_DMA_GetPeriphSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PDATAALIGN_BYTE + * @arg @ref LL_DMA_PDATAALIGN_HALFWORD + * @arg @ref LL_DMA_PDATAALIGN_WORD + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PSIZE)); +} + +/** + * @brief Set Memory size. + * @rmtoll CR MSIZE LL_DMA_SetMemorySize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Size This parameter can be one of the following values: + * @arg @ref LL_DMA_MDATAALIGN_BYTE + * @arg @ref LL_DMA_MDATAALIGN_HALFWORD + * @arg @ref LL_DMA_MDATAALIGN_WORD + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Size) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MSIZE, Size); +} + +/** + * @brief Get Memory size. + * @rmtoll CR MSIZE LL_DMA_GetMemorySize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MDATAALIGN_BYTE + * @arg @ref LL_DMA_MDATAALIGN_HALFWORD + * @arg @ref LL_DMA_MDATAALIGN_WORD + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MSIZE)); +} + +/** + * @brief Set Peripheral increment offset size. + * @rmtoll CR PINCOS LL_DMA_SetIncOffsetSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param OffsetSize This parameter can be one of the following values: + * @arg @ref LL_DMA_OFFSETSIZE_PSIZE + * @arg @ref LL_DMA_OFFSETSIZE_FIXEDTO4 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetIncOffsetSize(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t OffsetSize) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINCOS, OffsetSize); +} + +/** + * @brief Get Peripheral increment offset size. + * @rmtoll CR PINCOS LL_DMA_GetIncOffsetSize + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_OFFSETSIZE_PSIZE + * @arg @ref LL_DMA_OFFSETSIZE_FIXEDTO4 + */ +__STATIC_INLINE uint32_t LL_DMA_GetIncOffsetSize(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PINCOS)); +} + +/** + * @brief Set Stream priority level. + * @rmtoll CR PL LL_DMA_SetStreamPriorityLevel + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Priority This parameter can be one of the following values: + * @arg @ref LL_DMA_PRIORITY_LOW + * @arg @ref LL_DMA_PRIORITY_MEDIUM + * @arg @ref LL_DMA_PRIORITY_HIGH + * @arg @ref LL_DMA_PRIORITY_VERYHIGH + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetStreamPriorityLevel(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Priority) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PL, Priority); +} + +/** + * @brief Get Stream priority level. + * @rmtoll CR PL LL_DMA_GetStreamPriorityLevel + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PRIORITY_LOW + * @arg @ref LL_DMA_PRIORITY_MEDIUM + * @arg @ref LL_DMA_PRIORITY_HIGH + * @arg @ref LL_DMA_PRIORITY_VERYHIGH + */ +__STATIC_INLINE uint32_t LL_DMA_GetStreamPriorityLevel(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PL)); +} + +/** + * @brief Set Number of data to transfer. + * @rmtoll NDTR NDT LL_DMA_SetDataLength + * @note This action has no effect if + * stream is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param NbData Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t NbData) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->NDTR, DMA_SxNDT, NbData); +} + +/** + * @brief Get Number of data to transfer. + * @rmtoll NDTR NDT LL_DMA_GetDataLength + * @note Once the stream is enabled, the return value indicate the + * remaining bytes to be transmitted. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->NDTR, DMA_SxNDT)); +} + +/** + * @brief Select Channel number associated to the Stream. + * @rmtoll CR CHSEL LL_DMA_SetChannelSelection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_0 + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetChannelSelection(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Channel) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CHSEL, Channel); +} + +/** + * @brief Get the Channel number associated to the Stream. + * @rmtoll CR CHSEL LL_DMA_GetChannelSelection + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_0 + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + */ +__STATIC_INLINE uint32_t LL_DMA_GetChannelSelection(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CHSEL)); +} + +/** + * @brief Set Memory burst transfer configuration. + * @rmtoll CR MBURST LL_DMA_SetMemoryBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Mburst This parameter can be one of the following values: + * @arg @ref LL_DMA_MBURST_SINGLE + * @arg @ref LL_DMA_MBURST_INC4 + * @arg @ref LL_DMA_MBURST_INC8 + * @arg @ref LL_DMA_MBURST_INC16 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Mburst) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MBURST, Mburst); +} + +/** + * @brief Get Memory burst transfer configuration. + * @rmtoll CR MBURST LL_DMA_GetMemoryBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_MBURST_SINGLE + * @arg @ref LL_DMA_MBURST_INC4 + * @arg @ref LL_DMA_MBURST_INC8 + * @arg @ref LL_DMA_MBURST_INC16 + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_MBURST)); +} + +/** + * @brief Set Peripheral burst transfer configuration. + * @rmtoll CR PBURST LL_DMA_SetPeriphBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Pburst This parameter can be one of the following values: + * @arg @ref LL_DMA_PBURST_SINGLE + * @arg @ref LL_DMA_PBURST_INC4 + * @arg @ref LL_DMA_PBURST_INC8 + * @arg @ref LL_DMA_PBURST_INC16 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Pburst) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PBURST, Pburst); +} + +/** + * @brief Get Peripheral burst transfer configuration. + * @rmtoll CR PBURST LL_DMA_GetPeriphBurstxfer + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_PBURST_SINGLE + * @arg @ref LL_DMA_PBURST_INC4 + * @arg @ref LL_DMA_PBURST_INC8 + * @arg @ref LL_DMA_PBURST_INC16 + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphBurstxfer(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_PBURST)); +} + +/** + * @brief Set Current target (only in double buffer mode) to Memory 1 or Memory 0. + * @rmtoll CR CT LL_DMA_SetCurrentTargetMem + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param CurrentMemory This parameter can be one of the following values: + * @arg @ref LL_DMA_CURRENTTARGETMEM0 + * @arg @ref LL_DMA_CURRENTTARGETMEM1 + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t CurrentMemory) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CT, CurrentMemory); +} + +/** + * @brief Set Current target (only in double buffer mode) to Memory 1 or Memory 0. + * @rmtoll CR CT LL_DMA_GetCurrentTargetMem + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_CURRENTTARGETMEM0 + * @arg @ref LL_DMA_CURRENTTARGETMEM1 + */ +__STATIC_INLINE uint32_t LL_DMA_GetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_CT)); +} + +/** + * @brief Enable the double buffer mode. + * @rmtoll CR DBM LL_DMA_EnableDoubleBufferMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DBM); +} + +/** + * @brief Disable the double buffer mode. + * @rmtoll CR DBM LL_DMA_DisableDoubleBufferMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DBM); +} + +/** + * @brief Get FIFO status. + * @rmtoll FCR FS LL_DMA_GetFIFOStatus + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_FIFOSTATUS_0_25 + * @arg @ref LL_DMA_FIFOSTATUS_25_50 + * @arg @ref LL_DMA_FIFOSTATUS_50_75 + * @arg @ref LL_DMA_FIFOSTATUS_75_100 + * @arg @ref LL_DMA_FIFOSTATUS_EMPTY + * @arg @ref LL_DMA_FIFOSTATUS_FULL + */ +__STATIC_INLINE uint32_t LL_DMA_GetFIFOStatus(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FS)); +} + +/** + * @brief Disable Fifo mode. + * @rmtoll FCR DMDIS LL_DMA_DisableFifoMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableFifoMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_DMDIS); +} + +/** + * @brief Enable Fifo mode. + * @rmtoll FCR DMDIS LL_DMA_EnableFifoMode + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableFifoMode(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_DMDIS); +} + +/** + * @brief Select FIFO threshold. + * @rmtoll FCR FTH LL_DMA_SetFIFOThreshold + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetFIFOThreshold(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Threshold) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH, Threshold); +} + +/** + * @brief Get FIFO threshold. + * @rmtoll FCR FTH LL_DMA_GetFIFOThreshold + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + */ +__STATIC_INLINE uint32_t LL_DMA_GetFIFOThreshold(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH)); +} + +/** + * @brief Configure the FIFO . + * @rmtoll FCR FTH LL_DMA_ConfigFifo\n + * FCR DMDIS LL_DMA_ConfigFifo + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param FifoMode This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOMODE_ENABLE + * @arg @ref LL_DMA_FIFOMODE_DISABLE + * @param FifoThreshold This parameter can be one of the following values: + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_1_2 + * @arg @ref LL_DMA_FIFOTHRESHOLD_3_4 + * @arg @ref LL_DMA_FIFOTHRESHOLD_FULL + * @retval None + */ +__STATIC_INLINE void LL_DMA_ConfigFifo(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t FifoMode, uint32_t FifoThreshold) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FTH|DMA_SxFCR_DMDIS, FifoMode|FifoThreshold); +} + +/** + * @brief Configure the Source and Destination addresses. + * @note This API must not be called when the DMA stream is enabled. + * @rmtoll M0AR M0A LL_DMA_ConfigAddresses\n + * PAR PA LL_DMA_ConfigAddresses + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param SrcAddress Between 0 to 0xFFFFFFFF + * @param DstAddress Between 0 to 0xFFFFFFFF + * @param Direction This parameter can be one of the following values: + * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH + * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY + * @retval None + */ +__STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t SrcAddress, uint32_t DstAddress, uint32_t Direction) +{ + /* Direction Memory to Periph */ + if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, SrcAddress); + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, DstAddress); + } + /* Direction Periph to Memory and Memory to Memory */ + else + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, SrcAddress); + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, DstAddress); + } +} + +/** + * @brief Set the Memory address. + * @rmtoll M0AR M0A LL_DMA_SetMemoryAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, MemoryAddress); +} + +/** + * @brief Set the Peripheral address. + * @rmtoll PAR PA LL_DMA_SetPeriphAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param PeriphAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t PeriphAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, PeriphAddress); +} + +/** + * @brief Get the Memory address. + * @rmtoll M0AR M0A LL_DMA_GetMemoryAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR)); +} + +/** + * @brief Get the Peripheral address. + * @rmtoll PAR PA LL_DMA_GetPeriphAddress + * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR)); +} + +/** + * @brief Set the Memory to Memory Source address. + * @rmtoll PAR PA LL_DMA_SetM2MSrcAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) +{ + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR, MemoryAddress); +} + +/** + * @brief Set the Memory to Memory Destination address. + * @rmtoll M0AR M0A LL_DMA_SetM2MDstAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @note This API must not be called when the DMA channel is enabled. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param MemoryAddress Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef* DMAx, uint32_t Stream, uint32_t MemoryAddress) + { + WRITE_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR, MemoryAddress); + } + +/** + * @brief Get the Memory to Memory Source address. + * @rmtoll PAR PA LL_DMA_GetM2MSrcAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef* DMAx, uint32_t Stream) + { + return (READ_REG(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->PAR)); + } + +/** + * @brief Get the Memory to Memory Destination address. + * @rmtoll M0AR M0A LL_DMA_GetM2MDstAddress + * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only. + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef* DMAx, uint32_t Stream) +{ + return (READ_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M0AR)); +} + +/** + * @brief Set Memory 1 address (used in case of Double buffer mode). + * @rmtoll M1AR M1A LL_DMA_SetMemory1Address + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @param Address Between 0 to 0xFFFFFFFF + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetMemory1Address(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t Address) +{ + MODIFY_REG(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M1AR, DMA_SxM1AR_M1A, Address); +} + +/** + * @brief Get Memory 1 address (used in case of Double buffer mode). + * @rmtoll M1AR M1A LL_DMA_GetMemory1Address + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval Between 0 to 0xFFFFFFFF + */ +__STATIC_INLINE uint32_t LL_DMA_GetMemory1Address(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->M1AR); +} + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Stream 0 half transfer flag. + * @rmtoll LISR HTIF0 LL_DMA_IsActiveFlag_HT0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF0)==(DMA_LISR_HTIF0)); +} + +/** + * @brief Get Stream 1 half transfer flag. + * @rmtoll LISR HTIF1 LL_DMA_IsActiveFlag_HT1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF1)==(DMA_LISR_HTIF1)); +} + +/** + * @brief Get Stream 2 half transfer flag. + * @rmtoll LISR HTIF2 LL_DMA_IsActiveFlag_HT2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF2)==(DMA_LISR_HTIF2)); +} + +/** + * @brief Get Stream 3 half transfer flag. + * @rmtoll LISR HTIF3 LL_DMA_IsActiveFlag_HT3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_HTIF3)==(DMA_LISR_HTIF3)); +} + +/** + * @brief Get Stream 4 half transfer flag. + * @rmtoll HISR HTIF4 LL_DMA_IsActiveFlag_HT4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF4)==(DMA_HISR_HTIF4)); +} + +/** + * @brief Get Stream 5 half transfer flag. + * @rmtoll HISR HTIF0 LL_DMA_IsActiveFlag_HT5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF5)==(DMA_HISR_HTIF5)); +} + +/** + * @brief Get Stream 6 half transfer flag. + * @rmtoll HISR HTIF6 LL_DMA_IsActiveFlag_HT6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF6)==(DMA_HISR_HTIF6)); +} + +/** + * @brief Get Stream 7 half transfer flag. + * @rmtoll HISR HTIF7 LL_DMA_IsActiveFlag_HT7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_HTIF7)==(DMA_HISR_HTIF7)); +} + +/** + * @brief Get Stream 0 transfer complete flag. + * @rmtoll LISR TCIF0 LL_DMA_IsActiveFlag_TC0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF0)==(DMA_LISR_TCIF0)); +} + +/** + * @brief Get Stream 1 transfer complete flag. + * @rmtoll LISR TCIF1 LL_DMA_IsActiveFlag_TC1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF1)==(DMA_LISR_TCIF1)); +} + +/** + * @brief Get Stream 2 transfer complete flag. + * @rmtoll LISR TCIF2 LL_DMA_IsActiveFlag_TC2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF2)==(DMA_LISR_TCIF2)); +} + +/** + * @brief Get Stream 3 transfer complete flag. + * @rmtoll LISR TCIF3 LL_DMA_IsActiveFlag_TC3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TCIF3)==(DMA_LISR_TCIF3)); +} + +/** + * @brief Get Stream 4 transfer complete flag. + * @rmtoll HISR TCIF4 LL_DMA_IsActiveFlag_TC4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF4)==(DMA_HISR_TCIF4)); +} + +/** + * @brief Get Stream 5 transfer complete flag. + * @rmtoll HISR TCIF0 LL_DMA_IsActiveFlag_TC5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF5)==(DMA_HISR_TCIF5)); +} + +/** + * @brief Get Stream 6 transfer complete flag. + * @rmtoll HISR TCIF6 LL_DMA_IsActiveFlag_TC6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF6)==(DMA_HISR_TCIF6)); +} + +/** + * @brief Get Stream 7 transfer complete flag. + * @rmtoll HISR TCIF7 LL_DMA_IsActiveFlag_TC7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TCIF7)==(DMA_HISR_TCIF7)); +} + +/** + * @brief Get Stream 0 transfer error flag. + * @rmtoll LISR TEIF0 LL_DMA_IsActiveFlag_TE0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF0)==(DMA_LISR_TEIF0)); +} + +/** + * @brief Get Stream 1 transfer error flag. + * @rmtoll LISR TEIF1 LL_DMA_IsActiveFlag_TE1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF1)==(DMA_LISR_TEIF1)); +} + +/** + * @brief Get Stream 2 transfer error flag. + * @rmtoll LISR TEIF2 LL_DMA_IsActiveFlag_TE2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF2)==(DMA_LISR_TEIF2)); +} + +/** + * @brief Get Stream 3 transfer error flag. + * @rmtoll LISR TEIF3 LL_DMA_IsActiveFlag_TE3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_TEIF3)==(DMA_LISR_TEIF3)); +} + +/** + * @brief Get Stream 4 transfer error flag. + * @rmtoll HISR TEIF4 LL_DMA_IsActiveFlag_TE4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF4)==(DMA_HISR_TEIF4)); +} + +/** + * @brief Get Stream 5 transfer error flag. + * @rmtoll HISR TEIF0 LL_DMA_IsActiveFlag_TE5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF5)==(DMA_HISR_TEIF5)); +} + +/** + * @brief Get Stream 6 transfer error flag. + * @rmtoll HISR TEIF6 LL_DMA_IsActiveFlag_TE6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF6)==(DMA_HISR_TEIF6)); +} + +/** + * @brief Get Stream 7 transfer error flag. + * @rmtoll HISR TEIF7 LL_DMA_IsActiveFlag_TE7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_TEIF7)==(DMA_HISR_TEIF7)); +} + +/** + * @brief Get Stream 0 direct mode error flag. + * @rmtoll LISR DMEIF0 LL_DMA_IsActiveFlag_DME0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF0)==(DMA_LISR_DMEIF0)); +} + +/** + * @brief Get Stream 1 direct mode error flag. + * @rmtoll LISR DMEIF1 LL_DMA_IsActiveFlag_DME1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF1)==(DMA_LISR_DMEIF1)); +} + +/** + * @brief Get Stream 2 direct mode error flag. + * @rmtoll LISR DMEIF2 LL_DMA_IsActiveFlag_DME2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF2)==(DMA_LISR_DMEIF2)); +} + +/** + * @brief Get Stream 3 direct mode error flag. + * @rmtoll LISR DMEIF3 LL_DMA_IsActiveFlag_DME3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_DMEIF3)==(DMA_LISR_DMEIF3)); +} + +/** + * @brief Get Stream 4 direct mode error flag. + * @rmtoll HISR DMEIF4 LL_DMA_IsActiveFlag_DME4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF4)==(DMA_HISR_DMEIF4)); +} + +/** + * @brief Get Stream 5 direct mode error flag. + * @rmtoll HISR DMEIF0 LL_DMA_IsActiveFlag_DME5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF5)==(DMA_HISR_DMEIF5)); +} + +/** + * @brief Get Stream 6 direct mode error flag. + * @rmtoll HISR DMEIF6 LL_DMA_IsActiveFlag_DME6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF6)==(DMA_HISR_DMEIF6)); +} + +/** + * @brief Get Stream 7 direct mode error flag. + * @rmtoll HISR DMEIF7 LL_DMA_IsActiveFlag_DME7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_DME7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_DMEIF7)==(DMA_HISR_DMEIF7)); +} + +/** + * @brief Get Stream 0 FIFO error flag. + * @rmtoll LISR FEIF0 LL_DMA_IsActiveFlag_FE0 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE0(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF0)==(DMA_LISR_FEIF0)); +} + +/** + * @brief Get Stream 1 FIFO error flag. + * @rmtoll LISR FEIF1 LL_DMA_IsActiveFlag_FE1 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE1(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF1)==(DMA_LISR_FEIF1)); +} + +/** + * @brief Get Stream 2 FIFO error flag. + * @rmtoll LISR FEIF2 LL_DMA_IsActiveFlag_FE2 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE2(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF2)==(DMA_LISR_FEIF2)); +} + +/** + * @brief Get Stream 3 FIFO error flag. + * @rmtoll LISR FEIF3 LL_DMA_IsActiveFlag_FE3 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE3(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->LISR ,DMA_LISR_FEIF3)==(DMA_LISR_FEIF3)); +} + +/** + * @brief Get Stream 4 FIFO error flag. + * @rmtoll HISR FEIF4 LL_DMA_IsActiveFlag_FE4 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE4(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF4)==(DMA_HISR_FEIF4)); +} + +/** + * @brief Get Stream 5 FIFO error flag. + * @rmtoll HISR FEIF0 LL_DMA_IsActiveFlag_FE5 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE5(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF5)==(DMA_HISR_FEIF5)); +} + +/** + * @brief Get Stream 6 FIFO error flag. + * @rmtoll HISR FEIF6 LL_DMA_IsActiveFlag_FE6 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE6(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF6)==(DMA_HISR_FEIF6)); +} + +/** + * @brief Get Stream 7 FIFO error flag. + * @rmtoll HISR FEIF7 LL_DMA_IsActiveFlag_FE7 + * @param DMAx DMAx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_FE7(DMA_TypeDef *DMAx) +{ + return (READ_BIT(DMAx->HISR ,DMA_HISR_FEIF7)==(DMA_HISR_FEIF7)); +} + +/** + * @brief Clear Stream 0 half transfer flag. + * @rmtoll LIFCR CHTIF0 LL_DMA_ClearFlag_HT0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF0); +} + +/** + * @brief Clear Stream 1 half transfer flag. + * @rmtoll LIFCR CHTIF1 LL_DMA_ClearFlag_HT1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF1); +} + +/** + * @brief Clear Stream 2 half transfer flag. + * @rmtoll LIFCR CHTIF2 LL_DMA_ClearFlag_HT2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF2); +} + +/** + * @brief Clear Stream 3 half transfer flag. + * @rmtoll LIFCR CHTIF3 LL_DMA_ClearFlag_HT3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CHTIF3); +} + +/** + * @brief Clear Stream 4 half transfer flag. + * @rmtoll HIFCR CHTIF4 LL_DMA_ClearFlag_HT4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF4); +} + +/** + * @brief Clear Stream 5 half transfer flag. + * @rmtoll HIFCR CHTIF5 LL_DMA_ClearFlag_HT5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF5); +} + +/** + * @brief Clear Stream 6 half transfer flag. + * @rmtoll HIFCR CHTIF6 LL_DMA_ClearFlag_HT6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF6); +} + +/** + * @brief Clear Stream 7 half transfer flag. + * @rmtoll HIFCR CHTIF7 LL_DMA_ClearFlag_HT7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CHTIF7); +} + +/** + * @brief Clear Stream 0 transfer complete flag. + * @rmtoll LIFCR CTCIF0 LL_DMA_ClearFlag_TC0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF0); +} + +/** + * @brief Clear Stream 1 transfer complete flag. + * @rmtoll LIFCR CTCIF1 LL_DMA_ClearFlag_TC1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF1); +} + +/** + * @brief Clear Stream 2 transfer complete flag. + * @rmtoll LIFCR CTCIF2 LL_DMA_ClearFlag_TC2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF2); +} + +/** + * @brief Clear Stream 3 transfer complete flag. + * @rmtoll LIFCR CTCIF3 LL_DMA_ClearFlag_TC3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTCIF3); +} + +/** + * @brief Clear Stream 4 transfer complete flag. + * @rmtoll HIFCR CTCIF4 LL_DMA_ClearFlag_TC4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF4); +} + +/** + * @brief Clear Stream 5 transfer complete flag. + * @rmtoll HIFCR CTCIF5 LL_DMA_ClearFlag_TC5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF5); +} + +/** + * @brief Clear Stream 6 transfer complete flag. + * @rmtoll HIFCR CTCIF6 LL_DMA_ClearFlag_TC6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF6); +} + +/** + * @brief Clear Stream 7 transfer complete flag. + * @rmtoll HIFCR CTCIF7 LL_DMA_ClearFlag_TC7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTCIF7); +} + +/** + * @brief Clear Stream 0 transfer error flag. + * @rmtoll LIFCR CTEIF0 LL_DMA_ClearFlag_TE0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF0); +} + +/** + * @brief Clear Stream 1 transfer error flag. + * @rmtoll LIFCR CTEIF1 LL_DMA_ClearFlag_TE1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF1); +} + +/** + * @brief Clear Stream 2 transfer error flag. + * @rmtoll LIFCR CTEIF2 LL_DMA_ClearFlag_TE2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF2); +} + +/** + * @brief Clear Stream 3 transfer error flag. + * @rmtoll LIFCR CTEIF3 LL_DMA_ClearFlag_TE3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CTEIF3); +} + +/** + * @brief Clear Stream 4 transfer error flag. + * @rmtoll HIFCR CTEIF4 LL_DMA_ClearFlag_TE4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF4); +} + +/** + * @brief Clear Stream 5 transfer error flag. + * @rmtoll HIFCR CTEIF5 LL_DMA_ClearFlag_TE5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF5); +} + +/** + * @brief Clear Stream 6 transfer error flag. + * @rmtoll HIFCR CTEIF6 LL_DMA_ClearFlag_TE6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF6); +} + +/** + * @brief Clear Stream 7 transfer error flag. + * @rmtoll HIFCR CTEIF7 LL_DMA_ClearFlag_TE7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CTEIF7); +} + +/** + * @brief Clear Stream 0 direct mode error flag. + * @rmtoll LIFCR CDMEIF0 LL_DMA_ClearFlag_DME0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF0); +} + +/** + * @brief Clear Stream 1 direct mode error flag. + * @rmtoll LIFCR CDMEIF1 LL_DMA_ClearFlag_DME1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF1); +} + +/** + * @brief Clear Stream 2 direct mode error flag. + * @rmtoll LIFCR CDMEIF2 LL_DMA_ClearFlag_DME2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF2); +} + +/** + * @brief Clear Stream 3 direct mode error flag. + * @rmtoll LIFCR CDMEIF3 LL_DMA_ClearFlag_DME3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CDMEIF3); +} + +/** + * @brief Clear Stream 4 direct mode error flag. + * @rmtoll HIFCR CDMEIF4 LL_DMA_ClearFlag_DME4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF4); +} + +/** + * @brief Clear Stream 5 direct mode error flag. + * @rmtoll HIFCR CDMEIF5 LL_DMA_ClearFlag_DME5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF5); +} + +/** + * @brief Clear Stream 6 direct mode error flag. + * @rmtoll HIFCR CDMEIF6 LL_DMA_ClearFlag_DME6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF6); +} + +/** + * @brief Clear Stream 7 direct mode error flag. + * @rmtoll HIFCR CDMEIF7 LL_DMA_ClearFlag_DME7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_DME7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CDMEIF7); +} + +/** + * @brief Clear Stream 0 FIFO error flag. + * @rmtoll LIFCR CFEIF0 LL_DMA_ClearFlag_FE0 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE0(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF0); +} + +/** + * @brief Clear Stream 1 FIFO error flag. + * @rmtoll LIFCR CFEIF1 LL_DMA_ClearFlag_FE1 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE1(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF1); +} + +/** + * @brief Clear Stream 2 FIFO error flag. + * @rmtoll LIFCR CFEIF2 LL_DMA_ClearFlag_FE2 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE2(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF2); +} + +/** + * @brief Clear Stream 3 FIFO error flag. + * @rmtoll LIFCR CFEIF3 LL_DMA_ClearFlag_FE3 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE3(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->LIFCR , DMA_LIFCR_CFEIF3); +} + +/** + * @brief Clear Stream 4 FIFO error flag. + * @rmtoll HIFCR CFEIF4 LL_DMA_ClearFlag_FE4 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE4(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF4); +} + +/** + * @brief Clear Stream 5 FIFO error flag. + * @rmtoll HIFCR CFEIF5 LL_DMA_ClearFlag_FE5 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE5(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF5); +} + +/** + * @brief Clear Stream 6 FIFO error flag. + * @rmtoll HIFCR CFEIF6 LL_DMA_ClearFlag_FE6 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE6(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF6); +} + +/** + * @brief Clear Stream 7 FIFO error flag. + * @rmtoll HIFCR CFEIF7 LL_DMA_ClearFlag_FE7 + * @param DMAx DMAx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMA_ClearFlag_FE7(DMA_TypeDef *DMAx) +{ + WRITE_REG(DMAx->HIFCR , DMA_HIFCR_CFEIF7); +} + +/** + * @} + */ + +/** @defgroup DMA_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable Half transfer interrupt. + * @rmtoll CR HTIE LL_DMA_EnableIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE); +} + +/** + * @brief Enable Transfer error interrupt. + * @rmtoll CR TEIE LL_DMA_EnableIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE); +} + +/** + * @brief Enable Transfer complete interrupt. + * @rmtoll CR TCIE LL_DMA_EnableIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE); +} + +/** + * @brief Enable Direct mode error interrupt. + * @rmtoll CR DMEIE LL_DMA_EnableIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE); +} + +/** + * @brief Enable FIFO error interrupt. + * @rmtoll FCR FEIE LL_DMA_EnableIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_EnableIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + SET_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE); +} + +/** + * @brief Disable Half transfer interrupt. + * @rmtoll CR HTIE LL_DMA_DisableIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE); +} + +/** + * @brief Disable Transfer error interrupt. + * @rmtoll CR TEIE LL_DMA_DisableIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE); +} + +/** + * @brief Disable Transfer complete interrupt. + * @rmtoll CR TCIE LL_DMA_DisableIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE); +} + +/** + * @brief Disable Direct mode error interrupt. + * @rmtoll CR DMEIE LL_DMA_DisableIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE); +} + +/** + * @brief Disable FIFO error interrupt. + * @rmtoll FCR FEIE LL_DMA_DisableIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval None + */ +__STATIC_INLINE void LL_DMA_DisableIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + CLEAR_BIT(((DMA_Stream_TypeDef *)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE); +} + +/** + * @brief Check if Half transfer interrupt is enabled. + * @rmtoll CR HTIE LL_DMA_IsEnabledIT_HT + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_HTIE) == DMA_SxCR_HTIE); +} + +/** + * @brief Check if Transfer error nterrup is enabled. + * @rmtoll CR TEIE LL_DMA_IsEnabledIT_TE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TEIE) == DMA_SxCR_TEIE); +} + +/** + * @brief Check if Transfer complete interrupt is enabled. + * @rmtoll CR TCIE LL_DMA_IsEnabledIT_TC + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_TCIE) == DMA_SxCR_TCIE); +} + +/** + * @brief Check if Direct mode error interrupt is enabled. + * @rmtoll CR DMEIE LL_DMA_IsEnabledIT_DME + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_DME(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->CR, DMA_SxCR_DMEIE) == DMA_SxCR_DMEIE); +} + +/** + * @brief Check if FIFO error interrupt is enabled. + * @rmtoll FCR FEIE LL_DMA_IsEnabledIT_FE + * @param DMAx DMAx Instance + * @param Stream This parameter can be one of the following values: + * @arg @ref LL_DMA_STREAM_0 + * @arg @ref LL_DMA_STREAM_1 + * @arg @ref LL_DMA_STREAM_2 + * @arg @ref LL_DMA_STREAM_3 + * @arg @ref LL_DMA_STREAM_4 + * @arg @ref LL_DMA_STREAM_5 + * @arg @ref LL_DMA_STREAM_6 + * @arg @ref LL_DMA_STREAM_7 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_FE(DMA_TypeDef *DMAx, uint32_t Stream) +{ + return (READ_BIT(((DMA_Stream_TypeDef*)((uint32_t)((uint32_t)DMAx + STREAM_OFFSET_TAB[Stream])))->FCR, DMA_SxFCR_FEIE) == DMA_SxFCR_FEIE); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Stream, LL_DMA_InitTypeDef *DMA_InitStruct); +uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Stream); +void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMA1 || DMA2 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_DMA_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h new file mode 100644 index 0000000..65ab691 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h @@ -0,0 +1,954 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_exti.h + * @author MCD Application Team + * @brief Header file of EXTI LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS.Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_EXTI_H +#define __STM32F4xx_LL_EXTI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (EXTI) + +/** @defgroup EXTI_LL EXTI + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private Macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_Private_Macros EXTI Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_ES_INIT EXTI Exported Init structure + * @{ + */ +typedef struct +{ + + uint32_t Line_0_31; /*!< Specifies the EXTI lines to be enabled or disabled for Lines in range 0 to 31 + This parameter can be any combination of @ref EXTI_LL_EC_LINE */ + + FunctionalState LineCommand; /*!< Specifies the new state of the selected EXTI lines. + This parameter can be set either to ENABLE or DISABLE */ + + uint8_t Mode; /*!< Specifies the mode for the EXTI lines. + This parameter can be a value of @ref EXTI_LL_EC_MODE. */ + + uint8_t Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. + This parameter can be a value of @ref EXTI_LL_EC_TRIGGER. */ +} LL_EXTI_InitTypeDef; + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Constants EXTI Exported Constants + * @{ + */ + +/** @defgroup EXTI_LL_EC_LINE LINE + * @{ + */ +#define LL_EXTI_LINE_0 EXTI_IMR_IM0 /*!< Extended line 0 */ +#define LL_EXTI_LINE_1 EXTI_IMR_IM1 /*!< Extended line 1 */ +#define LL_EXTI_LINE_2 EXTI_IMR_IM2 /*!< Extended line 2 */ +#define LL_EXTI_LINE_3 EXTI_IMR_IM3 /*!< Extended line 3 */ +#define LL_EXTI_LINE_4 EXTI_IMR_IM4 /*!< Extended line 4 */ +#define LL_EXTI_LINE_5 EXTI_IMR_IM5 /*!< Extended line 5 */ +#define LL_EXTI_LINE_6 EXTI_IMR_IM6 /*!< Extended line 6 */ +#define LL_EXTI_LINE_7 EXTI_IMR_IM7 /*!< Extended line 7 */ +#define LL_EXTI_LINE_8 EXTI_IMR_IM8 /*!< Extended line 8 */ +#define LL_EXTI_LINE_9 EXTI_IMR_IM9 /*!< Extended line 9 */ +#define LL_EXTI_LINE_10 EXTI_IMR_IM10 /*!< Extended line 10 */ +#define LL_EXTI_LINE_11 EXTI_IMR_IM11 /*!< Extended line 11 */ +#define LL_EXTI_LINE_12 EXTI_IMR_IM12 /*!< Extended line 12 */ +#define LL_EXTI_LINE_13 EXTI_IMR_IM13 /*!< Extended line 13 */ +#define LL_EXTI_LINE_14 EXTI_IMR_IM14 /*!< Extended line 14 */ +#define LL_EXTI_LINE_15 EXTI_IMR_IM15 /*!< Extended line 15 */ +#if defined(EXTI_IMR_IM16) +#define LL_EXTI_LINE_16 EXTI_IMR_IM16 /*!< Extended line 16 */ +#endif +#define LL_EXTI_LINE_17 EXTI_IMR_IM17 /*!< Extended line 17 */ +#if defined(EXTI_IMR_IM18) +#define LL_EXTI_LINE_18 EXTI_IMR_IM18 /*!< Extended line 18 */ +#endif +#define LL_EXTI_LINE_19 EXTI_IMR_IM19 /*!< Extended line 19 */ +#if defined(EXTI_IMR_IM20) +#define LL_EXTI_LINE_20 EXTI_IMR_IM20 /*!< Extended line 20 */ +#endif +#if defined(EXTI_IMR_IM21) +#define LL_EXTI_LINE_21 EXTI_IMR_IM21 /*!< Extended line 21 */ +#endif +#if defined(EXTI_IMR_IM22) +#define LL_EXTI_LINE_22 EXTI_IMR_IM22 /*!< Extended line 22 */ +#endif +#if defined(EXTI_IMR_IM23) +#define LL_EXTI_LINE_23 EXTI_IMR_IM23 /*!< Extended line 23 */ +#endif +#if defined(EXTI_IMR_IM24) +#define LL_EXTI_LINE_24 EXTI_IMR_IM24 /*!< Extended line 24 */ +#endif +#if defined(EXTI_IMR_IM25) +#define LL_EXTI_LINE_25 EXTI_IMR_IM25 /*!< Extended line 25 */ +#endif +#if defined(EXTI_IMR_IM26) +#define LL_EXTI_LINE_26 EXTI_IMR_IM26 /*!< Extended line 26 */ +#endif +#if defined(EXTI_IMR_IM27) +#define LL_EXTI_LINE_27 EXTI_IMR_IM27 /*!< Extended line 27 */ +#endif +#if defined(EXTI_IMR_IM28) +#define LL_EXTI_LINE_28 EXTI_IMR_IM28 /*!< Extended line 28 */ +#endif +#if defined(EXTI_IMR_IM29) +#define LL_EXTI_LINE_29 EXTI_IMR_IM29 /*!< Extended line 29 */ +#endif +#if defined(EXTI_IMR_IM30) +#define LL_EXTI_LINE_30 EXTI_IMR_IM30 /*!< Extended line 30 */ +#endif +#if defined(EXTI_IMR_IM31) +#define LL_EXTI_LINE_31 EXTI_IMR_IM31 /*!< Extended line 31 */ +#endif +#define LL_EXTI_LINE_ALL_0_31 EXTI_IMR_IM /*!< All Extended line not reserved*/ + + +#define LL_EXTI_LINE_ALL ((uint32_t)0xFFFFFFFFU) /*!< All Extended line */ + +#if defined(USE_FULL_LL_DRIVER) +#define LL_EXTI_LINE_NONE ((uint32_t)0x00000000U) /*!< None Extended line */ +#endif /*USE_FULL_LL_DRIVER*/ + +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup EXTI_LL_EC_MODE Mode + * @{ + */ +#define LL_EXTI_MODE_IT ((uint8_t)0x00U) /*!< Interrupt Mode */ +#define LL_EXTI_MODE_EVENT ((uint8_t)0x01U) /*!< Event Mode */ +#define LL_EXTI_MODE_IT_EVENT ((uint8_t)0x02U) /*!< Interrupt & Event Mode */ +/** + * @} + */ + +/** @defgroup EXTI_LL_EC_TRIGGER Edge Trigger + * @{ + */ +#define LL_EXTI_TRIGGER_NONE ((uint8_t)0x00U) /*!< No Trigger Mode */ +#define LL_EXTI_TRIGGER_RISING ((uint8_t)0x01U) /*!< Trigger Rising Mode */ +#define LL_EXTI_TRIGGER_FALLING ((uint8_t)0x02U) /*!< Trigger Falling Mode */ +#define LL_EXTI_TRIGGER_RISING_FALLING ((uint8_t)0x03U) /*!< Trigger Rising & Falling Mode */ + +/** + * @} + */ + + +#endif /*USE_FULL_LL_DRIVER*/ + + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Macros EXTI Exported Macros + * @{ + */ + +/** @defgroup EXTI_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in EXTI register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_EXTI_WriteReg(__REG__, __VALUE__) WRITE_REG(EXTI->__REG__, (__VALUE__)) + +/** + * @brief Read a value in EXTI register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_EXTI_ReadReg(__REG__) READ_REG(EXTI->__REG__) +/** + * @} + */ + + +/** + * @} + */ + + + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup EXTI_LL_Exported_Functions EXTI Exported Functions + * @{ + */ +/** @defgroup EXTI_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Interrupt request for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_EnableIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableIT_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->IMR, ExtiLine); +} + +/** + * @brief Disable ExtiLine Interrupt request for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_DisableIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableIT_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->IMR, ExtiLine); +} + + +/** + * @brief Indicate if ExtiLine Interrupt request is enabled for Lines in range 0 to 31 + * @note The reset value for the direct or internal lines (see RM) + * is set to 1 in order to enable the interrupt by default. + * Bits are set automatically at Power on. + * @rmtoll IMR IMx LL_EXTI_IsEnabledIT_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->IMR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Event_Management Event_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Event request for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_EnableEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableEvent_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->EMR, ExtiLine); + +} + + +/** + * @brief Disable ExtiLine Event request for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_DisableEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableEvent_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->EMR, ExtiLine); +} + + +/** + * @brief Indicate if ExtiLine Event request is enabled for Lines in range 0 to 31 + * @rmtoll EMR EMx LL_EXTI_IsEnabledEvent_0_31 + * @param ExtiLine This parameter can be one of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_17 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @arg @ref LL_EXTI_LINE_23(*) + * @arg @ref LL_EXTI_LINE_ALL_0_31 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->EMR, ExtiLine) == (ExtiLine)); + +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Rising_Trigger_Management Rising_Trigger_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Rising Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a rising edge on a configurable interrupt + * line occurs during a write operation in the EXTI_RTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll RTSR RTx LL_EXTI_EnableRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableRisingTrig_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->RTSR, ExtiLine); + +} + + +/** + * @brief Disable ExtiLine Rising Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a rising edge on a configurable interrupt + * line occurs during a write operation in the EXTI_RTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll RTSR RTx LL_EXTI_DisableRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableRisingTrig_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->RTSR, ExtiLine); + +} + + +/** + * @brief Check if rising edge trigger is enabled for Lines in range 0 to 31 + * @rmtoll RTSR RTx LL_EXTI_IsEnabledRisingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledRisingTrig_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->RTSR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Falling_Trigger_Management Falling_Trigger_Management + * @{ + */ + +/** + * @brief Enable ExtiLine Falling Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a falling edge on a configurable interrupt + * line occurs during a write operation in the EXTI_FTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for + * the same interrupt line. In this case, both generate a trigger + * condition. + * @rmtoll FTSR FTx LL_EXTI_EnableFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_EnableFallingTrig_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->FTSR, ExtiLine); +} + + +/** + * @brief Disable ExtiLine Falling Edge Trigger for Lines in range 0 to 31 + * @note The configurable wakeup lines are edge-triggered. No glitch must be + * generated on these lines. If a Falling edge on a configurable interrupt + * line occurs during a write operation in the EXTI_FTSR register, the + * pending bit is not set. + * Rising and falling edge triggers can be set for the same interrupt line. + * In this case, both generate a trigger condition. + * @rmtoll FTSR FTx LL_EXTI_DisableFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_DisableFallingTrig_0_31(uint32_t ExtiLine) +{ + CLEAR_BIT(EXTI->FTSR, ExtiLine); +} + + +/** + * @brief Check if falling edge trigger is enabled for Lines in range 0 to 31 + * @rmtoll FTSR FTx LL_EXTI_IsEnabledFallingTrig_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsEnabledFallingTrig_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->FTSR, ExtiLine) == (ExtiLine)); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Software_Interrupt_Management Software_Interrupt_Management + * @{ + */ + +/** + * @brief Generate a software Interrupt Event for Lines in range 0 to 31 + * @note If the interrupt is enabled on this line in the EXTI_IMR, writing a 1 to + * this bit when it is at '0' sets the corresponding pending bit in EXTI_PR + * resulting in an interrupt request generation. + * This bit is cleared by clearing the corresponding bit in the EXTI_PR + * register (by writing a 1 into the bit) + * @rmtoll SWIER SWIx LL_EXTI_GenerateSWI_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_GenerateSWI_0_31(uint32_t ExtiLine) +{ + SET_BIT(EXTI->SWIER, ExtiLine); +} + + +/** + * @} + */ + +/** @defgroup EXTI_LL_EF_Flag_Management Flag_Management + * @{ + */ + +/** + * @brief Check if the ExtLine Flag is set or not for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_IsActiveFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine) +{ + return (READ_BIT(EXTI->PR, ExtiLine) == (ExtiLine)); +} + + +/** + * @brief Read ExtLine Combination Flag for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_ReadFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval @note This bit is set when the selected edge event arrives on the interrupt + */ +__STATIC_INLINE uint32_t LL_EXTI_ReadFlag_0_31(uint32_t ExtiLine) +{ + return (uint32_t)(READ_BIT(EXTI->PR, ExtiLine)); +} + + +/** + * @brief Clear ExtLine Flags for Lines in range 0 to 31 + * @note This bit is set when the selected edge event arrives on the interrupt + * line. This bit is cleared by writing a 1 to the bit. + * @rmtoll PR PIFx LL_EXTI_ClearFlag_0_31 + * @param ExtiLine This parameter can be a combination of the following values: + * @arg @ref LL_EXTI_LINE_0 + * @arg @ref LL_EXTI_LINE_1 + * @arg @ref LL_EXTI_LINE_2 + * @arg @ref LL_EXTI_LINE_3 + * @arg @ref LL_EXTI_LINE_4 + * @arg @ref LL_EXTI_LINE_5 + * @arg @ref LL_EXTI_LINE_6 + * @arg @ref LL_EXTI_LINE_7 + * @arg @ref LL_EXTI_LINE_8 + * @arg @ref LL_EXTI_LINE_9 + * @arg @ref LL_EXTI_LINE_10 + * @arg @ref LL_EXTI_LINE_11 + * @arg @ref LL_EXTI_LINE_12 + * @arg @ref LL_EXTI_LINE_13 + * @arg @ref LL_EXTI_LINE_14 + * @arg @ref LL_EXTI_LINE_15 + * @arg @ref LL_EXTI_LINE_16 + * @arg @ref LL_EXTI_LINE_18 + * @arg @ref LL_EXTI_LINE_19(*) + * @arg @ref LL_EXTI_LINE_20(*) + * @arg @ref LL_EXTI_LINE_21 + * @arg @ref LL_EXTI_LINE_22 + * @note (*): Available in some devices + * @note Please check each device line mapping for EXTI Line availability + * @retval None + */ +__STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine) +{ + WRITE_REG(EXTI->PR, ExtiLine); +} + + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup EXTI_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct); +uint32_t LL_EXTI_DeInit(void); +void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct); + + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* EXTI */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_EXTI_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h new file mode 100644 index 0000000..6bee7fd --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h @@ -0,0 +1,981 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_gpio.h + * @author MCD Application Team + * @brief Header file of GPIO LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_GPIO_H +#define __STM32F4xx_LL_GPIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) + +/** @defgroup GPIO_LL GPIO + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_Private_Macros GPIO Private Macros + * @{ + */ + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures + * @{ + */ + +/** + * @brief LL GPIO Init Structure definition + */ +typedef struct +{ + uint32_t Pin; /*!< Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_LL_EC_PIN */ + + uint32_t Mode; /*!< Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_MODE. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/ + + uint32_t Speed; /*!< Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_SPEED. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/ + + uint32_t OutputType; /*!< Specifies the operating output type for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_OUTPUT. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/ + + uint32_t Pull; /*!< Specifies the operating Pull-up/Pull down for the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_PULL. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/ + + uint32_t Alternate; /*!< Specifies the Peripheral to be connected to the selected pins. + This parameter can be a value of @ref GPIO_LL_EC_AF. + + GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/ +} LL_GPIO_InitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants + * @{ + */ + +/** @defgroup GPIO_LL_EC_PIN PIN + * @{ + */ +#define LL_GPIO_PIN_0 GPIO_BSRR_BS_0 /*!< Select pin 0 */ +#define LL_GPIO_PIN_1 GPIO_BSRR_BS_1 /*!< Select pin 1 */ +#define LL_GPIO_PIN_2 GPIO_BSRR_BS_2 /*!< Select pin 2 */ +#define LL_GPIO_PIN_3 GPIO_BSRR_BS_3 /*!< Select pin 3 */ +#define LL_GPIO_PIN_4 GPIO_BSRR_BS_4 /*!< Select pin 4 */ +#define LL_GPIO_PIN_5 GPIO_BSRR_BS_5 /*!< Select pin 5 */ +#define LL_GPIO_PIN_6 GPIO_BSRR_BS_6 /*!< Select pin 6 */ +#define LL_GPIO_PIN_7 GPIO_BSRR_BS_7 /*!< Select pin 7 */ +#define LL_GPIO_PIN_8 GPIO_BSRR_BS_8 /*!< Select pin 8 */ +#define LL_GPIO_PIN_9 GPIO_BSRR_BS_9 /*!< Select pin 9 */ +#define LL_GPIO_PIN_10 GPIO_BSRR_BS_10 /*!< Select pin 10 */ +#define LL_GPIO_PIN_11 GPIO_BSRR_BS_11 /*!< Select pin 11 */ +#define LL_GPIO_PIN_12 GPIO_BSRR_BS_12 /*!< Select pin 12 */ +#define LL_GPIO_PIN_13 GPIO_BSRR_BS_13 /*!< Select pin 13 */ +#define LL_GPIO_PIN_14 GPIO_BSRR_BS_14 /*!< Select pin 14 */ +#define LL_GPIO_PIN_15 GPIO_BSRR_BS_15 /*!< Select pin 15 */ +#define LL_GPIO_PIN_ALL (GPIO_BSRR_BS_0 | GPIO_BSRR_BS_1 | GPIO_BSRR_BS_2 | \ + GPIO_BSRR_BS_3 | GPIO_BSRR_BS_4 | GPIO_BSRR_BS_5 | \ + GPIO_BSRR_BS_6 | GPIO_BSRR_BS_7 | GPIO_BSRR_BS_8 | \ + GPIO_BSRR_BS_9 | GPIO_BSRR_BS_10 | GPIO_BSRR_BS_11 | \ + GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | \ + GPIO_BSRR_BS_15) /*!< Select all pins */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_MODE Mode + * @{ + */ +#define LL_GPIO_MODE_INPUT (0x00000000U) /*!< Select input mode */ +#define LL_GPIO_MODE_OUTPUT GPIO_MODER_MODER0_0 /*!< Select output mode */ +#define LL_GPIO_MODE_ALTERNATE GPIO_MODER_MODER0_1 /*!< Select alternate function mode */ +#define LL_GPIO_MODE_ANALOG GPIO_MODER_MODER0 /*!< Select analog mode */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_OUTPUT Output Type + * @{ + */ +#define LL_GPIO_OUTPUT_PUSHPULL (0x00000000U) /*!< Select push-pull as output type */ +#define LL_GPIO_OUTPUT_OPENDRAIN GPIO_OTYPER_OT_0 /*!< Select open-drain as output type */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_SPEED Output Speed + * @{ + */ +#define LL_GPIO_SPEED_FREQ_LOW (0x00000000U) /*!< Select I/O low output speed */ +#define LL_GPIO_SPEED_FREQ_MEDIUM GPIO_OSPEEDER_OSPEEDR0_0 /*!< Select I/O medium output speed */ +#define LL_GPIO_SPEED_FREQ_HIGH GPIO_OSPEEDER_OSPEEDR0_1 /*!< Select I/O fast output speed */ +#define LL_GPIO_SPEED_FREQ_VERY_HIGH GPIO_OSPEEDER_OSPEEDR0 /*!< Select I/O high output speed */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down + * @{ + */ +#define LL_GPIO_PULL_NO (0x00000000U) /*!< Select I/O no pull */ +#define LL_GPIO_PULL_UP GPIO_PUPDR_PUPDR0_0 /*!< Select I/O pull up */ +#define LL_GPIO_PULL_DOWN GPIO_PUPDR_PUPDR0_1 /*!< Select I/O pull down */ +/** + * @} + */ + +/** @defgroup GPIO_LL_EC_AF Alternate Function + * @{ + */ +#define LL_GPIO_AF_0 (0x0000000U) /*!< Select alternate function 0 */ +#define LL_GPIO_AF_1 (0x0000001U) /*!< Select alternate function 1 */ +#define LL_GPIO_AF_2 (0x0000002U) /*!< Select alternate function 2 */ +#define LL_GPIO_AF_3 (0x0000003U) /*!< Select alternate function 3 */ +#define LL_GPIO_AF_4 (0x0000004U) /*!< Select alternate function 4 */ +#define LL_GPIO_AF_5 (0x0000005U) /*!< Select alternate function 5 */ +#define LL_GPIO_AF_6 (0x0000006U) /*!< Select alternate function 6 */ +#define LL_GPIO_AF_7 (0x0000007U) /*!< Select alternate function 7 */ +#define LL_GPIO_AF_8 (0x0000008U) /*!< Select alternate function 8 */ +#define LL_GPIO_AF_9 (0x0000009U) /*!< Select alternate function 9 */ +#define LL_GPIO_AF_10 (0x000000AU) /*!< Select alternate function 10 */ +#define LL_GPIO_AF_11 (0x000000BU) /*!< Select alternate function 11 */ +#define LL_GPIO_AF_12 (0x000000CU) /*!< Select alternate function 12 */ +#define LL_GPIO_AF_13 (0x000000DU) /*!< Select alternate function 13 */ +#define LL_GPIO_AF_14 (0x000000EU) /*!< Select alternate function 14 */ +#define LL_GPIO_AF_15 (0x000000FU) /*!< Select alternate function 15 */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros + * @{ + */ + +/** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in GPIO register + * @param __INSTANCE__ GPIO Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in GPIO register + * @param __INSTANCE__ GPIO Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration + * @{ + */ + +/** + * @brief Configure gpio mode for a dedicated pin on dedicated port. + * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll MODER MODEy LL_GPIO_SetPinMode + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_GPIO_MODE_INPUT + * @arg @ref LL_GPIO_MODE_OUTPUT + * @arg @ref LL_GPIO_MODE_ALTERNATE + * @arg @ref LL_GPIO_MODE_ANALOG + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode) +{ + MODIFY_REG(GPIOx->MODER, (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U)), (Mode << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio mode for a dedicated pin on dedicated port. + * @note I/O mode can be Input mode, General purpose output, Alternate function mode or Analog. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll MODER MODEy LL_GPIO_GetPinMode + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_MODE_INPUT + * @arg @ref LL_GPIO_MODE_OUTPUT + * @arg @ref LL_GPIO_MODE_ALTERNATE + * @arg @ref LL_GPIO_MODE_ANALOG + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->MODER, + (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio output type for several pins on dedicated port. + * @note Output type as to be set when gpio pin is in output or + * alternate modes. Possible type are Push-pull or Open-drain. + * @rmtoll OTYPER OTy LL_GPIO_SetPinOutputType + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @param OutputType This parameter can be one of the following values: + * @arg @ref LL_GPIO_OUTPUT_PUSHPULL + * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType) +{ + MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType)); +} + +/** + * @brief Return gpio output type for several pins on dedicated port. + * @note Output type as to be set when gpio pin is in output or + * alternate modes. Possible type are Push-pull or Open-drain. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll OTYPER OTy LL_GPIO_GetPinOutputType + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_OUTPUT_PUSHPULL + * @arg @ref LL_GPIO_OUTPUT_OPENDRAIN + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) >> POSITION_VAL(Pin)); +} + +/** + * @brief Configure gpio speed for a dedicated pin on dedicated port. + * @note I/O speed can be Low, Medium, Fast or High speed. + * @note Warning: only one pin can be passed as parameter. + * @note Refer to datasheet for frequency specifications and the power + * supply and load conditions for each speed. + * @rmtoll OSPEEDR OSPEEDy LL_GPIO_SetPinSpeed + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Speed This parameter can be one of the following values: + * @arg @ref LL_GPIO_SPEED_FREQ_LOW + * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM + * @arg @ref LL_GPIO_SPEED_FREQ_HIGH + * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Speed) +{ + MODIFY_REG(GPIOx->OSPEEDR, (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U)), + (Speed << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio speed for a dedicated pin on dedicated port. + * @note I/O speed can be Low, Medium, Fast or High speed. + * @note Warning: only one pin can be passed as parameter. + * @note Refer to datasheet for frequency specifications and the power + * supply and load conditions for each speed. + * @rmtoll OSPEEDR OSPEEDy LL_GPIO_GetPinSpeed + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_SPEED_FREQ_LOW + * @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM + * @arg @ref LL_GPIO_SPEED_FREQ_HIGH + * @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->OSPEEDR, + (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll PUPDR PUPDy LL_GPIO_SetPinPull + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Pull This parameter can be one of the following values: + * @arg @ref LL_GPIO_PULL_NO + * @arg @ref LL_GPIO_PULL_UP + * @arg @ref LL_GPIO_PULL_DOWN + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull) +{ + MODIFY_REG(GPIOx->PUPDR, (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U)), (Pull << (POSITION_VAL(Pin) * 2U))); +} + +/** + * @brief Return gpio pull-up or pull-down for a dedicated pin on a dedicated port + * @note Warning: only one pin can be passed as parameter. + * @rmtoll PUPDR PUPDy LL_GPIO_GetPinPull + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_PULL_NO + * @arg @ref LL_GPIO_PULL_UP + * @arg @ref LL_GPIO_PULL_DOWN + */ +__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->PUPDR, + (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll AFRL AFSELy LL_GPIO_SetAFPin_0_7 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @param Alternate This parameter can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[0], (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U)), + (Alternate << (POSITION_VAL(Pin) * 4U))); +} + +/** + * @brief Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port. + * @rmtoll AFRL AFSELy LL_GPIO_GetAFPin_0_7 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[0], + (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U)); +} + +/** + * @brief Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @note Warning: only one pin can be passed as parameter. + * @rmtoll AFRH AFSELy LL_GPIO_SetAFPin_8_15 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @param Alternate This parameter can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate) +{ + MODIFY_REG(GPIOx->AFR[1], (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U)), + (Alternate << (POSITION_VAL(Pin >> 8U) * 4U))); +} + +/** + * @brief Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port. + * @note Possible values are from AF0 to AF15 depending on target. + * @rmtoll AFRH AFSELy LL_GPIO_GetAFPin_8_15 + * @param GPIOx GPIO Port + * @param Pin This parameter can be one of the following values: + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_GPIO_AF_0 + * @arg @ref LL_GPIO_AF_1 + * @arg @ref LL_GPIO_AF_2 + * @arg @ref LL_GPIO_AF_3 + * @arg @ref LL_GPIO_AF_4 + * @arg @ref LL_GPIO_AF_5 + * @arg @ref LL_GPIO_AF_6 + * @arg @ref LL_GPIO_AF_7 + * @arg @ref LL_GPIO_AF_8 + * @arg @ref LL_GPIO_AF_9 + * @arg @ref LL_GPIO_AF_10 + * @arg @ref LL_GPIO_AF_11 + * @arg @ref LL_GPIO_AF_12 + * @arg @ref LL_GPIO_AF_13 + * @arg @ref LL_GPIO_AF_14 + * @arg @ref LL_GPIO_AF_15 + */ +__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin) +{ + return (uint32_t)(READ_BIT(GPIOx->AFR[1], + (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U))) >> (POSITION_VAL(Pin >> 8U) * 4U)); +} + + +/** + * @brief Lock configuration of several pins for a dedicated port. + * @note When the lock sequence has been applied on a port bit, the + * value of this port bit can no longer be modified until the + * next reset. + * @note Each lock bit freezes a specific configuration register + * (control and alternate function registers). + * @rmtoll LCKR LCKK LL_GPIO_LockPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + __IO uint32_t temp; + WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask); + WRITE_REG(GPIOx->LCKR, PinMask); + WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask); + temp = READ_REG(GPIOx->LCKR); + (void) temp; +} + +/** + * @brief Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0. + * @rmtoll LCKR LCKy LL_GPIO_IsPinLocked + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->LCKR, PinMask) == (PinMask)); +} + +/** + * @brief Return 1 if one of the pin of a dedicated port is locked. else return 0. + * @rmtoll LCKR LCKK LL_GPIO_IsAnyPinLocked + * @param GPIOx GPIO Port + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx) +{ + return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK)); +} + +/** + * @} + */ + +/** @defgroup GPIO_LL_EF_Data_Access Data Access + * @{ + */ + +/** + * @brief Return full input data register value for a dedicated port. + * @rmtoll IDR IDy LL_GPIO_ReadInputPort + * @param GPIOx GPIO Port + * @retval Input data register value of port + */ +__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx) +{ + return (uint32_t)(READ_REG(GPIOx->IDR)); +} + +/** + * @brief Return if input data level for several pins of dedicated port is high or low. + * @rmtoll IDR IDy LL_GPIO_IsInputPinSet + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->IDR, PinMask) == (PinMask)); +} + +/** + * @brief Write output data register for the port. + * @rmtoll ODR ODy LL_GPIO_WriteOutputPort + * @param GPIOx GPIO Port + * @param PortValue Level value for each pin of the port + * @retval None + */ +__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue) +{ + WRITE_REG(GPIOx->ODR, PortValue); +} + +/** + * @brief Return full output data register value for a dedicated port. + * @rmtoll ODR ODy LL_GPIO_ReadOutputPort + * @param GPIOx GPIO Port + * @retval Output data register value of port + */ +__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx) +{ + return (uint32_t)(READ_REG(GPIOx->ODR)); +} + +/** + * @brief Return if input data level for several pins of dedicated port is high or low. + * @rmtoll ODR ODy LL_GPIO_IsOutputPinSet + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + return (READ_BIT(GPIOx->ODR, PinMask) == (PinMask)); +} + +/** + * @brief Set several pins to high level on dedicated gpio port. + * @rmtoll BSRR BSy LL_GPIO_SetOutputPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + WRITE_REG(GPIOx->BSRR, PinMask); +} + +/** + * @brief Set several pins to low level on dedicated gpio port. + * @rmtoll BSRR BRy LL_GPIO_ResetOutputPin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + WRITE_REG(GPIOx->BSRR, (PinMask << 16)); +} + +/** + * @brief Toggle data value for several pin of dedicated port. + * @rmtoll ODR ODy LL_GPIO_TogglePin + * @param GPIOx GPIO Port + * @param PinMask This parameter can be a combination of the following values: + * @arg @ref LL_GPIO_PIN_0 + * @arg @ref LL_GPIO_PIN_1 + * @arg @ref LL_GPIO_PIN_2 + * @arg @ref LL_GPIO_PIN_3 + * @arg @ref LL_GPIO_PIN_4 + * @arg @ref LL_GPIO_PIN_5 + * @arg @ref LL_GPIO_PIN_6 + * @arg @ref LL_GPIO_PIN_7 + * @arg @ref LL_GPIO_PIN_8 + * @arg @ref LL_GPIO_PIN_9 + * @arg @ref LL_GPIO_PIN_10 + * @arg @ref LL_GPIO_PIN_11 + * @arg @ref LL_GPIO_PIN_12 + * @arg @ref LL_GPIO_PIN_13 + * @arg @ref LL_GPIO_PIN_14 + * @arg @ref LL_GPIO_PIN_15 + * @arg @ref LL_GPIO_PIN_ALL + * @retval None + */ +__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask) +{ + uint32_t odr = READ_REG(GPIOx->ODR); + WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask)); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx); +ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct); +void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */ +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_GPIO_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h new file mode 100644 index 0000000..ea23dc5 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h @@ -0,0 +1,985 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_pwr.h + * @author MCD Application Team + * @brief Header file of PWR LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_PWR_H +#define __STM32F4xx_LL_PWR_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(PWR) + +/** @defgroup PWR_LL PWR + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Constants PWR Exported Constants + * @{ + */ + +/** @defgroup PWR_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_PWR_WriteReg function + * @{ + */ +#define LL_PWR_CR_CSBF PWR_CR_CSBF /*!< Clear standby flag */ +#define LL_PWR_CR_CWUF PWR_CR_CWUF /*!< Clear wakeup flag */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_PWR_ReadReg function + * @{ + */ +#define LL_PWR_CSR_WUF PWR_CSR_WUF /*!< Wakeup flag */ +#define LL_PWR_CSR_SBF PWR_CSR_SBF /*!< Standby flag */ +#define LL_PWR_CSR_PVDO PWR_CSR_PVDO /*!< Power voltage detector output flag */ +#define LL_PWR_CSR_VOS PWR_CSR_VOSRDY /*!< Voltage scaling select flag */ +#if defined(PWR_CSR_EWUP) +#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP /*!< Enable WKUP pin */ +#elif defined(PWR_CSR_EWUP1) +#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP1 /*!< Enable WKUP pin 1 */ +#endif /* PWR_CSR_EWUP */ +#if defined(PWR_CSR_EWUP2) +#define LL_PWR_CSR_EWUP2 PWR_CSR_EWUP2 /*!< Enable WKUP pin 2 */ +#endif /* PWR_CSR_EWUP2 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_CSR_EWUP3 PWR_CSR_EWUP3 /*!< Enable WKUP pin 3 */ +#endif /* PWR_CSR_EWUP3 */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_REGU_VOLTAGE Regulator Voltage + * @{ + */ +#if defined(PWR_CR_VOS_0) +#define LL_PWR_REGU_VOLTAGE_SCALE3 (PWR_CR_VOS_0) +#define LL_PWR_REGU_VOLTAGE_SCALE2 (PWR_CR_VOS_1) +#define LL_PWR_REGU_VOLTAGE_SCALE1 (PWR_CR_VOS_0 | PWR_CR_VOS_1) /* The SCALE1 is not available for STM32F401xx devices */ +#else +#define LL_PWR_REGU_VOLTAGE_SCALE1 (PWR_CR_VOS) +#define LL_PWR_REGU_VOLTAGE_SCALE2 0x00000000U +#endif /* PWR_CR_VOS_0 */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_MODE_PWR Mode Power + * @{ + */ +#define LL_PWR_MODE_STOP_MAINREGU 0x00000000U /*!< Enter Stop mode when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU (PWR_CR_LPDS) /*!< Enter Stop mode (with low power Regulator ON) when the CPU enters deepsleep */ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) +#define LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (PWR_CR_MRUDS | PWR_CR_FPDS) /*!< Enter Stop mode (with main Regulator in under-drive mode) when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_FPDS) /*!< Enter Stop mode (with low power Regulator in under-drive mode) when the CPU enters deepsleep */ +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +#if defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) +#define LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (PWR_CR_MRLVDS | PWR_CR_FPDS) /*!< Enter Stop mode (with main Regulator in Deep Sleep mode) when the CPU enters deepsleep */ +#define LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (PWR_CR_LPDS | PWR_CR_LPLVDS | PWR_CR_FPDS) /*!< Enter Stop mode (with low power Regulator in Deep Sleep mode) when the CPU enters deepsleep */ +#endif /* PWR_CR_MRLVDS && PWR_CR_LPLVDS && PWR_CR_FPDS */ +#define LL_PWR_MODE_STANDBY (PWR_CR_PDDS) /*!< Enter Standby mode when the CPU enters deepsleep */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_REGU_MODE_DS_MODE Regulator Mode In Deep Sleep Mode + * @{ + */ +#define LL_PWR_REGU_DSMODE_MAIN 0x00000000U /*!< Voltage Regulator in main mode during deepsleep mode */ +#define LL_PWR_REGU_DSMODE_LOW_POWER (PWR_CR_LPDS) /*!< Voltage Regulator in low-power mode during deepsleep mode */ +/** + * @} + */ + +/** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level + * @{ + */ +#define LL_PWR_PVDLEVEL_0 (PWR_CR_PLS_LEV0) /*!< Voltage threshold detected by PVD 2.2 V */ +#define LL_PWR_PVDLEVEL_1 (PWR_CR_PLS_LEV1) /*!< Voltage threshold detected by PVD 2.3 V */ +#define LL_PWR_PVDLEVEL_2 (PWR_CR_PLS_LEV2) /*!< Voltage threshold detected by PVD 2.4 V */ +#define LL_PWR_PVDLEVEL_3 (PWR_CR_PLS_LEV3) /*!< Voltage threshold detected by PVD 2.5 V */ +#define LL_PWR_PVDLEVEL_4 (PWR_CR_PLS_LEV4) /*!< Voltage threshold detected by PVD 2.6 V */ +#define LL_PWR_PVDLEVEL_5 (PWR_CR_PLS_LEV5) /*!< Voltage threshold detected by PVD 2.7 V */ +#define LL_PWR_PVDLEVEL_6 (PWR_CR_PLS_LEV6) /*!< Voltage threshold detected by PVD 2.8 V */ +#define LL_PWR_PVDLEVEL_7 (PWR_CR_PLS_LEV7) /*!< Voltage threshold detected by PVD 2.9 V */ +/** + * @} + */ +/** @defgroup PWR_LL_EC_WAKEUP_PIN Wakeup Pins + * @{ + */ +#if defined(PWR_CSR_EWUP) +#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP) /*!< WKUP pin : PA0 */ +#endif /* PWR_CSR_EWUP */ +#if defined(PWR_CSR_EWUP1) +#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP1) /*!< WKUP pin 1 : PA0 */ +#endif /* PWR_CSR_EWUP1 */ +#if defined(PWR_CSR_EWUP2) +#define LL_PWR_WAKEUP_PIN2 (PWR_CSR_EWUP2) /*!< WKUP pin 2 : PC0 or PC13 according to device */ +#endif /* PWR_CSR_EWUP2 */ +#if defined(PWR_CSR_EWUP3) +#define LL_PWR_WAKEUP_PIN3 (PWR_CSR_EWUP3) /*!< WKUP pin 3 : PC1 */ +#endif /* PWR_CSR_EWUP3 */ +/** + * @} + */ + +/** + * @} + */ + + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Macros PWR Exported Macros + * @{ + */ + +/** @defgroup PWR_LL_EM_WRITE_READ Common write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in PWR register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_PWR_WriteReg(__REG__, __VALUE__) WRITE_REG(PWR->__REG__, (__VALUE__)) + +/** + * @brief Read a value in PWR register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_PWR_ReadReg(__REG__) READ_REG(PWR->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup PWR_LL_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_LL_EF_Configuration Configuration + * @{ + */ +#if defined(PWR_CR_FISSR) +/** + * @brief Enable FLASH interface STOP while system Run is ON + * @rmtoll CR FISSR LL_PWR_EnableFLASHInterfaceSTOP + * @note This mode is enabled only with STOP low power mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFLASHInterfaceSTOP(void) +{ + SET_BIT(PWR->CR, PWR_CR_FISSR); +} + +/** + * @brief Disable FLASH Interface STOP while system Run is ON + * @rmtoll CR FISSR LL_PWR_DisableFLASHInterfaceSTOP + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFLASHInterfaceSTOP(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FISSR); +} + +/** + * @brief Check if FLASH Interface STOP while system Run feature is enabled + * @rmtoll CR FISSR LL_PWR_IsEnabledFLASHInterfaceSTOP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHInterfaceSTOP(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FISSR) == (PWR_CR_FISSR)); +} +#endif /* PWR_CR_FISSR */ + +#if defined(PWR_CR_FMSSR) +/** + * @brief Enable FLASH Memory STOP while system Run is ON + * @rmtoll CR FMSSR LL_PWR_EnableFLASHMemorySTOP + * @note This mode is enabled only with STOP low power mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFLASHMemorySTOP(void) +{ + SET_BIT(PWR->CR, PWR_CR_FMSSR); +} + +/** + * @brief Disable FLASH Memory STOP while system Run is ON + * @rmtoll CR FMSSR LL_PWR_DisableFLASHMemorySTOP + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFLASHMemorySTOP(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FMSSR); +} + +/** + * @brief Check if FLASH Memory STOP while system Run feature is enabled + * @rmtoll CR FMSSR LL_PWR_IsEnabledFLASHMemorySTOP + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHMemorySTOP(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FMSSR) == (PWR_CR_FMSSR)); +} +#endif /* PWR_CR_FMSSR */ +#if defined(PWR_CR_UDEN) +/** + * @brief Enable Under Drive Mode + * @rmtoll CR UDEN LL_PWR_EnableUnderDriveMode + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main Regulator or the low power Regulator + * is in low voltage mode. + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage Regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableUnderDriveMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_UDEN); +} + +/** + * @brief Disable Under Drive Mode + * @rmtoll CR UDEN LL_PWR_DisableUnderDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableUnderDriveMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_UDEN); +} + +/** + * @brief Check if Under Drive Mode is enabled + * @rmtoll CR UDEN LL_PWR_IsEnabledUnderDriveMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledUnderDriveMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_UDEN) == (PWR_CR_UDEN)); +} +#endif /* PWR_CR_UDEN */ + +#if defined(PWR_CR_ODSWEN) +/** + * @brief Enable Over drive switching + * @rmtoll CR ODSWEN LL_PWR_EnableOverDriveSwitching + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableOverDriveSwitching(void) +{ + SET_BIT(PWR->CR, PWR_CR_ODSWEN); +} + +/** + * @brief Disable Over drive switching + * @rmtoll CR ODSWEN LL_PWR_DisableOverDriveSwitching + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableOverDriveSwitching(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_ODSWEN); +} + +/** + * @brief Check if Over drive switching is enabled + * @rmtoll CR ODSWEN LL_PWR_IsEnabledOverDriveSwitching + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveSwitching(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_ODSWEN) == (PWR_CR_ODSWEN)); +} +#endif /* PWR_CR_ODSWEN */ +#if defined(PWR_CR_ODEN) +/** + * @brief Enable Over drive Mode + * @rmtoll CR ODEN LL_PWR_EnableOverDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableOverDriveMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_ODEN); +} + +/** + * @brief Disable Over drive Mode + * @rmtoll CR ODEN LL_PWR_DisableOverDriveMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableOverDriveMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_ODEN); +} + +/** + * @brief Check if Over drive switching is enabled + * @rmtoll CR ODEN LL_PWR_IsEnabledOverDriveMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_ODEN) == (PWR_CR_ODEN)); +} +#endif /* PWR_CR_ODEN */ +#if defined(PWR_CR_MRUDS) +/** + * @brief Enable Main Regulator in deepsleep under-drive Mode + * @rmtoll CR MRUDS LL_PWR_EnableMainRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableMainRegulatorDeepSleepUDMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_MRUDS); +} + +/** + * @brief Disable Main Regulator in deepsleep under-drive Mode + * @rmtoll CR MRUDS LL_PWR_DisableMainRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableMainRegulatorDeepSleepUDMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_MRUDS); +} + +/** + * @brief Check if Main Regulator in deepsleep under-drive Mode is enabled + * @rmtoll CR MRUDS LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_MRUDS) == (PWR_CR_MRUDS)); +} +#endif /* PWR_CR_MRUDS */ + +#if defined(PWR_CR_LPUDS) +/** + * @brief Enable Low Power Regulator in deepsleep under-drive Mode + * @rmtoll CR LPUDS LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_LPUDS); +} + +/** + * @brief Disable Low Power Regulator in deepsleep under-drive Mode + * @rmtoll CR LPUDS LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_LPUDS); +} + +/** + * @brief Check if Low Power Regulator in deepsleep under-drive Mode is enabled + * @rmtoll CR LPUDS LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_LPUDS) == (PWR_CR_LPUDS)); +} +#endif /* PWR_CR_LPUDS */ + +#if defined(PWR_CR_MRLVDS) +/** + * @brief Enable Main Regulator low voltage Mode + * @rmtoll CR MRLVDS LL_PWR_EnableMainRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableMainRegulatorLowVoltageMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_MRLVDS); +} + +/** + * @brief Disable Main Regulator low voltage Mode + * @rmtoll CR MRLVDS LL_PWR_DisableMainRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableMainRegulatorLowVoltageMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_MRLVDS); +} + +/** + * @brief Check if Main Regulator low voltage Mode is enabled + * @rmtoll CR MRLVDS LL_PWR_IsEnabledMainRegulatorLowVoltageMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorLowVoltageMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_MRLVDS) == (PWR_CR_MRLVDS)); +} +#endif /* PWR_CR_MRLVDS */ + +#if defined(PWR_CR_LPLVDS) +/** + * @brief Enable Low Power Regulator low voltage Mode + * @rmtoll CR LPLVDS LL_PWR_EnableLowPowerRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorLowVoltageMode(void) +{ + SET_BIT(PWR->CR, PWR_CR_LPLVDS); +} + +/** + * @brief Disable Low Power Regulator low voltage Mode + * @rmtoll CR LPLVDS LL_PWR_DisableLowPowerRegulatorLowVoltageMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorLowVoltageMode(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_LPLVDS); +} + +/** + * @brief Check if Low Power Regulator low voltage Mode is enabled + * @rmtoll CR LPLVDS LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_LPLVDS) == (PWR_CR_LPLVDS)); +} +#endif /* PWR_CR_LPLVDS */ +/** + * @brief Set the main internal Regulator output voltage + * @rmtoll CR VOS LL_PWR_SetRegulVoltageScaling + * @param VoltageScaling This parameter can be one of the following values: + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*) + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2 + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3 + * (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetRegulVoltageScaling(uint32_t VoltageScaling) +{ + MODIFY_REG(PWR->CR, PWR_CR_VOS, VoltageScaling); +} + +/** + * @brief Get the main internal Regulator output voltage + * @rmtoll CR VOS LL_PWR_GetRegulVoltageScaling + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*) + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2 + * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3 + * (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices + */ +__STATIC_INLINE uint32_t LL_PWR_GetRegulVoltageScaling(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_VOS)); +} +/** + * @brief Enable the Flash Power Down in Stop Mode + * @rmtoll CR FPDS LL_PWR_EnableFlashPowerDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableFlashPowerDown(void) +{ + SET_BIT(PWR->CR, PWR_CR_FPDS); +} + +/** + * @brief Disable the Flash Power Down in Stop Mode + * @rmtoll CR FPDS LL_PWR_DisableFlashPowerDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableFlashPowerDown(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_FPDS); +} + +/** + * @brief Check if the Flash Power Down in Stop Mode is enabled + * @rmtoll CR FPDS LL_PWR_IsEnabledFlashPowerDown + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledFlashPowerDown(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_FPDS) == (PWR_CR_FPDS)); +} + +/** + * @brief Enable access to the backup domain + * @rmtoll CR DBP LL_PWR_EnableBkUpAccess + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableBkUpAccess(void) +{ + SET_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @brief Disable access to the backup domain + * @rmtoll CR DBP LL_PWR_DisableBkUpAccess + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableBkUpAccess(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_DBP); +} + +/** + * @brief Check if the backup domain is enabled + * @rmtoll CR DBP LL_PWR_IsEnabledBkUpAccess + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP)); +} +/** + * @brief Enable the backup Regulator + * @rmtoll CSR BRE LL_PWR_EnableBkUpRegulator + * @note The BRE bit of the PWR_CSR register is protected against parasitic write access. + * The LL_PWR_EnableBkUpAccess() must be called before using this API. + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableBkUpRegulator(void) +{ + SET_BIT(PWR->CSR, PWR_CSR_BRE); +} + +/** + * @brief Disable the backup Regulator + * @rmtoll CSR BRE LL_PWR_DisableBkUpRegulator + * @note The BRE bit of the PWR_CSR register is protected against parasitic write access. + * The LL_PWR_EnableBkUpAccess() must be called before using this API. + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableBkUpRegulator(void) +{ + CLEAR_BIT(PWR->CSR, PWR_CSR_BRE); +} + +/** + * @brief Check if the backup Regulator is enabled + * @rmtoll CSR BRE LL_PWR_IsEnabledBkUpRegulator + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpRegulator(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_BRE) == (PWR_CSR_BRE)); +} + +/** + * @brief Set voltage Regulator mode during deep sleep mode + * @rmtoll CR LPDS LL_PWR_SetRegulModeDS + * @param RegulMode This parameter can be one of the following values: + * @arg @ref LL_PWR_REGU_DSMODE_MAIN + * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode) +{ + MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode); +} + +/** + * @brief Get voltage Regulator mode during deep sleep mode + * @rmtoll CR LPDS LL_PWR_GetRegulModeDS + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_REGU_DSMODE_MAIN + * @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER + */ +__STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS)); +} + +/** + * @brief Set Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS LL_PWR_SetPowerMode\n + * @rmtoll CR MRUDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPUDS LL_PWR_SetPowerMode\n + * @rmtoll CR FPDS LL_PWR_SetPowerMode\n + * @rmtoll CR MRLVDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPlVDS LL_PWR_SetPowerMode\n + * @rmtoll CR FPDS LL_PWR_SetPowerMode\n + * @rmtoll CR LPDS LL_PWR_SetPowerMode + * @param PDMode This parameter can be one of the following values: + * @arg @ref LL_PWR_MODE_STOP_MAINREGU + * @arg @ref LL_PWR_MODE_STOP_LPREGU + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*) + * + * (*) not available on all devices + * @arg @ref LL_PWR_MODE_STANDBY + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode) +{ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS), PDMode); +#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS), PDMode); +#else + MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode); +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +} + +/** + * @brief Get Power Down mode when CPU enters deepsleep + * @rmtoll CR PDDS LL_PWR_GetPowerMode\n + * @rmtoll CR MRUDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPUDS LL_PWR_GetPowerMode\n + * @rmtoll CR FPDS LL_PWR_GetPowerMode\n + * @rmtoll CR MRLVDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPLVDS LL_PWR_GetPowerMode\n + * @rmtoll CR FPDS LL_PWR_GetPowerMode\n + * @rmtoll CR LPDS LL_PWR_GetPowerMode + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_MODE_STOP_MAINREGU + * @arg @ref LL_PWR_MODE_STOP_LPREGU + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*) + * @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*) + * @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*) + * + * (*) not available on all devices + * @arg @ref LL_PWR_MODE_STANDBY + */ +__STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void) +{ +#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS))); +#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS))); +#else + return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS))); +#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ +} + +/** + * @brief Configure the voltage threshold detected by the Power Voltage Detector + * @rmtoll CR PLS LL_PWR_SetPVDLevel + * @param PVDLevel This parameter can be one of the following values: + * @arg @ref LL_PWR_PVDLEVEL_0 + * @arg @ref LL_PWR_PVDLEVEL_1 + * @arg @ref LL_PWR_PVDLEVEL_2 + * @arg @ref LL_PWR_PVDLEVEL_3 + * @arg @ref LL_PWR_PVDLEVEL_4 + * @arg @ref LL_PWR_PVDLEVEL_5 + * @arg @ref LL_PWR_PVDLEVEL_6 + * @arg @ref LL_PWR_PVDLEVEL_7 + * @retval None + */ +__STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel) +{ + MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel); +} + +/** + * @brief Get the voltage threshold detection + * @rmtoll CR PLS LL_PWR_GetPVDLevel + * @retval Returned value can be one of the following values: + * @arg @ref LL_PWR_PVDLEVEL_0 + * @arg @ref LL_PWR_PVDLEVEL_1 + * @arg @ref LL_PWR_PVDLEVEL_2 + * @arg @ref LL_PWR_PVDLEVEL_3 + * @arg @ref LL_PWR_PVDLEVEL_4 + * @arg @ref LL_PWR_PVDLEVEL_5 + * @arg @ref LL_PWR_PVDLEVEL_6 + * @arg @ref LL_PWR_PVDLEVEL_7 + */ +__STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void) +{ + return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS)); +} + +/** + * @brief Enable Power Voltage Detector + * @rmtoll CR PVDE LL_PWR_EnablePVD + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnablePVD(void) +{ + SET_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief Disable Power Voltage Detector + * @rmtoll CR PVDE LL_PWR_DisablePVD + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisablePVD(void) +{ + CLEAR_BIT(PWR->CR, PWR_CR_PVDE); +} + +/** + * @brief Check if Power Voltage Detector is enabled + * @rmtoll CR PVDE LL_PWR_IsEnabledPVD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void) +{ + return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE)); +} + +/** + * @brief Enable the WakeUp PINx functionality + * @rmtoll CSR EWUP LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_EnableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_EnableWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin) +{ + SET_BIT(PWR->CSR, WakeUpPin); +} + +/** + * @brief Disable the WakeUp PINx functionality + * @rmtoll CSR EWUP LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_DisableWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_DisableWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin) +{ + CLEAR_BIT(PWR->CSR, WakeUpPin); +} + +/** + * @brief Check if the WakeUp PINx functionality is enabled + * @rmtoll CSR EWUP LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP1 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP2 LL_PWR_IsEnabledWakeUpPin\n + * @rmtoll CSR EWUP3 LL_PWR_IsEnabledWakeUpPin + * @param WakeUpPin This parameter can be one of the following values: + * @arg @ref LL_PWR_WAKEUP_PIN1 + * @arg @ref LL_PWR_WAKEUP_PIN2 (*) + * @arg @ref LL_PWR_WAKEUP_PIN3 (*) + * + * (*) not available on all devices + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin) +{ + return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin)); +} + + +/** + * @} + */ + +/** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Wake-up Flag + * @rmtoll CSR WUF LL_PWR_IsActiveFlag_WU + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF)); +} + +/** + * @brief Get Standby Flag + * @rmtoll CSR SBF LL_PWR_IsActiveFlag_SB + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF)); +} + +/** + * @brief Get Backup Regulator ready Flag + * @rmtoll CSR BRR LL_PWR_IsActiveFlag_BRR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_BRR(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_BRR) == (PWR_CSR_BRR)); +} +/** + * @brief Indicate whether VDD voltage is below the selected PVD threshold + * @rmtoll CSR PVDO LL_PWR_IsActiveFlag_PVDO + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO)); +} + +/** + * @brief Indicate whether the Regulator is ready in the selected voltage range or if its output voltage is still changing to the required voltage level + * @rmtoll CSR VOS LL_PWR_IsActiveFlag_VOS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_VOS(void) +{ + return (READ_BIT(PWR->CSR, LL_PWR_CSR_VOS) == (LL_PWR_CSR_VOS)); +} +#if defined(PWR_CR_ODEN) +/** + * @brief Indicate whether the Over-Drive mode is ready or not + * @rmtoll CSR ODRDY LL_PWR_IsActiveFlag_OD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_OD(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_ODRDY) == (PWR_CSR_ODRDY)); +} +#endif /* PWR_CR_ODEN */ + +#if defined(PWR_CR_ODSWEN) +/** + * @brief Indicate whether the Over-Drive mode switching is ready or not + * @rmtoll CSR ODSWRDY LL_PWR_IsActiveFlag_ODSW + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_ODSW(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_ODSWRDY) == (PWR_CSR_ODSWRDY)); +} +#endif /* PWR_CR_ODSWEN */ + +#if defined(PWR_CR_UDEN) +/** + * @brief Indicate whether the Under-Drive mode is ready or not + * @rmtoll CSR UDRDY LL_PWR_IsActiveFlag_UD + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_UD(void) +{ + return (READ_BIT(PWR->CSR, PWR_CSR_UDRDY) == (PWR_CSR_UDRDY)); +} +#endif /* PWR_CR_UDEN */ +/** + * @brief Clear Standby Flag + * @rmtoll CR CSBF LL_PWR_ClearFlag_SB + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_SB(void) +{ + SET_BIT(PWR->CR, PWR_CR_CSBF); +} + +/** + * @brief Clear Wake-up Flags + * @rmtoll CR CWUF LL_PWR_ClearFlag_WU + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_WU(void) +{ + SET_BIT(PWR->CR, PWR_CR_CWUF); +} +#if defined(PWR_CSR_UDRDY) +/** + * @brief Clear Under-Drive ready Flag + * @rmtoll CSR UDRDY LL_PWR_ClearFlag_UD + * @retval None + */ +__STATIC_INLINE void LL_PWR_ClearFlag_UD(void) +{ + WRITE_REG(PWR->CSR, PWR_CSR_UDRDY); +} +#endif /* PWR_CSR_UDRDY */ + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup PWR_LL_EF_Init De-initialization function + * @{ + */ +ErrorStatus LL_PWR_DeInit(void); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(PWR) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_PWR_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h new file mode 100644 index 0000000..1df1b58 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h @@ -0,0 +1,7096 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_rcc.h + * @author MCD Application Team + * @brief Header file of RCC LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_RCC_H +#define __STM32F4xx_LL_RCC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined(RCC) + +/** @defgroup RCC_LL RCC + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_LL_Private_Variables RCC Private Variables + * @{ + */ + +#if defined(RCC_DCKCFGR_PLLSAIDIVR) +static const uint8_t aRCC_PLLSAIDIVRPrescTable[4] = {2, 4, 8, 16}; +#endif /* RCC_DCKCFGR_PLLSAIDIVR */ + +/** + * @} + */ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_Private_Macros RCC Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_Exported_Types RCC Exported Types + * @{ + */ + +/** @defgroup LL_ES_CLOCK_FREQ Clocks Frequency Structure + * @{ + */ + +/** + * @brief RCC Clocks Frequency Structure + */ +typedef struct +{ + uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency */ + uint32_t HCLK_Frequency; /*!< HCLK clock frequency */ + uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency */ + uint32_t PCLK2_Frequency; /*!< PCLK2 clock frequency */ +} LL_RCC_ClocksTypeDef; + +/** + * @} + */ + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Constants RCC Exported Constants + * @{ + */ + +/** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation + * @brief Defines used to adapt values of different oscillators + * @note These values could be modified in the user environment according to + * HW set-up. + * @{ + */ +#if !defined (HSE_VALUE) +#define HSE_VALUE 25000000U /*!< Value of the HSE oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) +#define HSI_VALUE 16000000U /*!< Value of the HSI oscillator in Hz */ +#endif /* HSI_VALUE */ + +#if !defined (LSE_VALUE) +#define LSE_VALUE 32768U /*!< Value of the LSE oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSI_VALUE) +#define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */ +#endif /* LSI_VALUE */ + +#if !defined (EXTERNAL_CLOCK_VALUE) +#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the I2S_CKIN external oscillator in Hz */ +#endif /* EXTERNAL_CLOCK_VALUE */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_RCC_WriteReg function + * @{ + */ +#define LL_RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC /*!< LSI Ready Interrupt Clear */ +#define LL_RCC_CIR_LSERDYC RCC_CIR_LSERDYC /*!< LSE Ready Interrupt Clear */ +#define LL_RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC /*!< HSI Ready Interrupt Clear */ +#define LL_RCC_CIR_HSERDYC RCC_CIR_HSERDYC /*!< HSE Ready Interrupt Clear */ +#define LL_RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC /*!< PLL Ready Interrupt Clear */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYC RCC_CIR_PLLI2SRDYC /*!< PLLI2S Ready Interrupt Clear */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYC RCC_CIR_PLLSAIRDYC /*!< PLLSAI Ready Interrupt Clear */ +#endif /* RCC_PLLSAI_SUPPORT */ +#define LL_RCC_CIR_CSSC RCC_CIR_CSSC /*!< Clock Security System Interrupt Clear */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_RCC_ReadReg function + * @{ + */ +#define LL_RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF /*!< LSI Ready Interrupt flag */ +#define LL_RCC_CIR_LSERDYF RCC_CIR_LSERDYF /*!< LSE Ready Interrupt flag */ +#define LL_RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF /*!< HSI Ready Interrupt flag */ +#define LL_RCC_CIR_HSERDYF RCC_CIR_HSERDYF /*!< HSE Ready Interrupt flag */ +#define LL_RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF /*!< PLL Ready Interrupt flag */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYF RCC_CIR_PLLI2SRDYF /*!< PLLI2S Ready Interrupt flag */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYF RCC_CIR_PLLSAIRDYF /*!< PLLSAI Ready Interrupt flag */ +#endif /* RCC_PLLSAI_SUPPORT */ +#define LL_RCC_CIR_CSSF RCC_CIR_CSSF /*!< Clock Security System Interrupt flag */ +#define LL_RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF /*!< Low-Power reset flag */ +#define LL_RCC_CSR_PINRSTF RCC_CSR_PINRSTF /*!< PIN reset flag */ +#define LL_RCC_CSR_PORRSTF RCC_CSR_PORRSTF /*!< POR/PDR reset flag */ +#define LL_RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF /*!< Software Reset flag */ +#define LL_RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF /*!< Independent Watchdog reset flag */ +#define LL_RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF /*!< Window watchdog reset flag */ +#if defined(RCC_CSR_BORRSTF) +#define LL_RCC_CSR_BORRSTF RCC_CSR_BORRSTF /*!< BOR reset flag */ +#endif /* RCC_CSR_BORRSTF */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_RCC_ReadReg and LL_RCC_WriteReg functions + * @{ + */ +#define LL_RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE /*!< LSI Ready Interrupt Enable */ +#define LL_RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE /*!< LSE Ready Interrupt Enable */ +#define LL_RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE /*!< HSI Ready Interrupt Enable */ +#define LL_RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE /*!< HSE Ready Interrupt Enable */ +#define LL_RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE /*!< PLL Ready Interrupt Enable */ +#if defined(RCC_PLLI2S_SUPPORT) +#define LL_RCC_CIR_PLLI2SRDYIE RCC_CIR_PLLI2SRDYIE /*!< PLLI2S Ready Interrupt Enable */ +#endif /* RCC_PLLI2S_SUPPORT */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CIR_PLLSAIRDYIE RCC_CIR_PLLSAIRDYIE /*!< PLLSAI Ready Interrupt Enable */ +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYS_CLKSOURCE System clock switch + * @{ + */ +#define LL_RCC_SYS_CLKSOURCE_HSI RCC_CFGR_SW_HSI /*!< HSI selection as system clock */ +#define LL_RCC_SYS_CLKSOURCE_HSE RCC_CFGR_SW_HSE /*!< HSE selection as system clock */ +#define LL_RCC_SYS_CLKSOURCE_PLL RCC_CFGR_SW_PLL /*!< PLL selection as system clock */ +#if defined(RCC_CFGR_SW_PLLR) +#define LL_RCC_SYS_CLKSOURCE_PLLR RCC_CFGR_SW_PLLR /*!< PLLR selection as system clock */ +#endif /* RCC_CFGR_SW_PLLR */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYS_CLKSOURCE_STATUS System clock switch status + * @{ + */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_HSI RCC_CFGR_SWS_HSI /*!< HSI used as system clock */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_HSE RCC_CFGR_SWS_HSE /*!< HSE used as system clock */ +#define LL_RCC_SYS_CLKSOURCE_STATUS_PLL RCC_CFGR_SWS_PLL /*!< PLL used as system clock */ +#if defined(RCC_PLLR_SYSCLK_SUPPORT) +#define LL_RCC_SYS_CLKSOURCE_STATUS_PLLR RCC_CFGR_SWS_PLLR /*!< PLLR used as system clock */ +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_SYSCLK_DIV AHB prescaler + * @{ + */ +#define LL_RCC_SYSCLK_DIV_1 RCC_CFGR_HPRE_DIV1 /*!< SYSCLK not divided */ +#define LL_RCC_SYSCLK_DIV_2 RCC_CFGR_HPRE_DIV2 /*!< SYSCLK divided by 2 */ +#define LL_RCC_SYSCLK_DIV_4 RCC_CFGR_HPRE_DIV4 /*!< SYSCLK divided by 4 */ +#define LL_RCC_SYSCLK_DIV_8 RCC_CFGR_HPRE_DIV8 /*!< SYSCLK divided by 8 */ +#define LL_RCC_SYSCLK_DIV_16 RCC_CFGR_HPRE_DIV16 /*!< SYSCLK divided by 16 */ +#define LL_RCC_SYSCLK_DIV_64 RCC_CFGR_HPRE_DIV64 /*!< SYSCLK divided by 64 */ +#define LL_RCC_SYSCLK_DIV_128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */ +#define LL_RCC_SYSCLK_DIV_256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */ +#define LL_RCC_SYSCLK_DIV_512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_APB1_DIV APB low-speed prescaler (APB1) + * @{ + */ +#define LL_RCC_APB1_DIV_1 RCC_CFGR_PPRE1_DIV1 /*!< HCLK not divided */ +#define LL_RCC_APB1_DIV_2 RCC_CFGR_PPRE1_DIV2 /*!< HCLK divided by 2 */ +#define LL_RCC_APB1_DIV_4 RCC_CFGR_PPRE1_DIV4 /*!< HCLK divided by 4 */ +#define LL_RCC_APB1_DIV_8 RCC_CFGR_PPRE1_DIV8 /*!< HCLK divided by 8 */ +#define LL_RCC_APB1_DIV_16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_APB2_DIV APB high-speed prescaler (APB2) + * @{ + */ +#define LL_RCC_APB2_DIV_1 RCC_CFGR_PPRE2_DIV1 /*!< HCLK not divided */ +#define LL_RCC_APB2_DIV_2 RCC_CFGR_PPRE2_DIV2 /*!< HCLK divided by 2 */ +#define LL_RCC_APB2_DIV_4 RCC_CFGR_PPRE2_DIV4 /*!< HCLK divided by 4 */ +#define LL_RCC_APB2_DIV_8 RCC_CFGR_PPRE2_DIV8 /*!< HCLK divided by 8 */ +#define LL_RCC_APB2_DIV_16 RCC_CFGR_PPRE2_DIV16 /*!< HCLK divided by 16 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCOxSOURCE MCO source selection + * @{ + */ +#define LL_RCC_MCO1SOURCE_HSI (uint32_t)(RCC_CFGR_MCO1|0x00000000U) /*!< HSI selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_LSE (uint32_t)(RCC_CFGR_MCO1|(RCC_CFGR_MCO1_0 >> 16U)) /*!< LSE selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_HSE (uint32_t)(RCC_CFGR_MCO1|(RCC_CFGR_MCO1_1 >> 16U)) /*!< HSE selection as MCO1 source */ +#define LL_RCC_MCO1SOURCE_PLLCLK (uint32_t)(RCC_CFGR_MCO1|((RCC_CFGR_MCO1_1|RCC_CFGR_MCO1_0) >> 16U)) /*!< PLLCLK selection as MCO1 source */ +#if defined(RCC_CFGR_MCO2) +#define LL_RCC_MCO2SOURCE_SYSCLK (uint32_t)(RCC_CFGR_MCO2|0x00000000U) /*!< SYSCLK selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_PLLI2S (uint32_t)(RCC_CFGR_MCO2|(RCC_CFGR_MCO2_0 >> 16U)) /*!< PLLI2S selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_HSE (uint32_t)(RCC_CFGR_MCO2|(RCC_CFGR_MCO2_1 >> 16U)) /*!< HSE selection as MCO2 source */ +#define LL_RCC_MCO2SOURCE_PLLCLK (uint32_t)(RCC_CFGR_MCO2|((RCC_CFGR_MCO2_1|RCC_CFGR_MCO2_0) >> 16U)) /*!< PLLCLK selection as MCO2 source */ +#endif /* RCC_CFGR_MCO2 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_MCOx_DIV MCO prescaler + * @{ + */ +#define LL_RCC_MCO1_DIV_1 (uint32_t)(RCC_CFGR_MCO1PRE|0x00000000U) /*!< MCO1 not divided */ +#define LL_RCC_MCO1_DIV_2 (uint32_t)(RCC_CFGR_MCO1PRE|(RCC_CFGR_MCO1PRE_2 >> 16U)) /*!< MCO1 divided by 2 */ +#define LL_RCC_MCO1_DIV_3 (uint32_t)(RCC_CFGR_MCO1PRE|((RCC_CFGR_MCO1PRE_2|RCC_CFGR_MCO1PRE_0) >> 16U)) /*!< MCO1 divided by 3 */ +#define LL_RCC_MCO1_DIV_4 (uint32_t)(RCC_CFGR_MCO1PRE|((RCC_CFGR_MCO1PRE_2|RCC_CFGR_MCO1PRE_1) >> 16U)) /*!< MCO1 divided by 4 */ +#define LL_RCC_MCO1_DIV_5 (uint32_t)(RCC_CFGR_MCO1PRE|(RCC_CFGR_MCO1PRE >> 16U)) /*!< MCO1 divided by 5 */ +#if defined(RCC_CFGR_MCO2PRE) +#define LL_RCC_MCO2_DIV_1 (uint32_t)(RCC_CFGR_MCO2PRE|0x00000000U) /*!< MCO2 not divided */ +#define LL_RCC_MCO2_DIV_2 (uint32_t)(RCC_CFGR_MCO2PRE|(RCC_CFGR_MCO2PRE_2 >> 16U)) /*!< MCO2 divided by 2 */ +#define LL_RCC_MCO2_DIV_3 (uint32_t)(RCC_CFGR_MCO2PRE|((RCC_CFGR_MCO2PRE_2|RCC_CFGR_MCO2PRE_0) >> 16U)) /*!< MCO2 divided by 3 */ +#define LL_RCC_MCO2_DIV_4 (uint32_t)(RCC_CFGR_MCO2PRE|((RCC_CFGR_MCO2PRE_2|RCC_CFGR_MCO2PRE_1) >> 16U)) /*!< MCO2 divided by 4 */ +#define LL_RCC_MCO2_DIV_5 (uint32_t)(RCC_CFGR_MCO2PRE|(RCC_CFGR_MCO2PRE >> 16U)) /*!< MCO2 divided by 5 */ +#endif /* RCC_CFGR_MCO2PRE */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_RTC_HSEDIV HSE prescaler for RTC clock + * @{ + */ +#define LL_RCC_RTC_NOCLOCK 0x00000000U /*!< HSE not divided */ +#define LL_RCC_RTC_HSE_DIV_2 RCC_CFGR_RTCPRE_1 /*!< HSE clock divided by 2 */ +#define LL_RCC_RTC_HSE_DIV_3 (RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 3 */ +#define LL_RCC_RTC_HSE_DIV_4 RCC_CFGR_RTCPRE_2 /*!< HSE clock divided by 4 */ +#define LL_RCC_RTC_HSE_DIV_5 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 5 */ +#define LL_RCC_RTC_HSE_DIV_6 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 6 */ +#define LL_RCC_RTC_HSE_DIV_7 (RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 7 */ +#define LL_RCC_RTC_HSE_DIV_8 RCC_CFGR_RTCPRE_3 /*!< HSE clock divided by 8 */ +#define LL_RCC_RTC_HSE_DIV_9 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 9 */ +#define LL_RCC_RTC_HSE_DIV_10 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 10 */ +#define LL_RCC_RTC_HSE_DIV_11 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 11 */ +#define LL_RCC_RTC_HSE_DIV_12 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 12 */ +#define LL_RCC_RTC_HSE_DIV_13 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 13 */ +#define LL_RCC_RTC_HSE_DIV_14 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 14 */ +#define LL_RCC_RTC_HSE_DIV_15 (RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 15 */ +#define LL_RCC_RTC_HSE_DIV_16 RCC_CFGR_RTCPRE_4 /*!< HSE clock divided by 16 */ +#define LL_RCC_RTC_HSE_DIV_17 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 17 */ +#define LL_RCC_RTC_HSE_DIV_18 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 18 */ +#define LL_RCC_RTC_HSE_DIV_19 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 19 */ +#define LL_RCC_RTC_HSE_DIV_20 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 20 */ +#define LL_RCC_RTC_HSE_DIV_21 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 21 */ +#define LL_RCC_RTC_HSE_DIV_22 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 22 */ +#define LL_RCC_RTC_HSE_DIV_23 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 23 */ +#define LL_RCC_RTC_HSE_DIV_24 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3) /*!< HSE clock divided by 24 */ +#define LL_RCC_RTC_HSE_DIV_25 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 25 */ +#define LL_RCC_RTC_HSE_DIV_26 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 26 */ +#define LL_RCC_RTC_HSE_DIV_27 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 27 */ +#define LL_RCC_RTC_HSE_DIV_28 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2) /*!< HSE clock divided by 28 */ +#define LL_RCC_RTC_HSE_DIV_29 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 29 */ +#define LL_RCC_RTC_HSE_DIV_30 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1) /*!< HSE clock divided by 30 */ +#define LL_RCC_RTC_HSE_DIV_31 (RCC_CFGR_RTCPRE_4|RCC_CFGR_RTCPRE_3|RCC_CFGR_RTCPRE_2|RCC_CFGR_RTCPRE_1|RCC_CFGR_RTCPRE_0) /*!< HSE clock divided by 31 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_EC_PERIPH_FREQUENCY Peripheral clock frequency + * @{ + */ +#define LL_RCC_PERIPH_FREQUENCY_NO 0x00000000U /*!< No clock enabled for the peripheral */ +#define LL_RCC_PERIPH_FREQUENCY_NA 0xFFFFFFFFU /*!< Frequency cannot be provided as external clock */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +#if defined(FMPI2C1) +/** @defgroup RCC_LL_EC_FMPI2C1_CLKSOURCE Peripheral FMPI2C clock source selection + * @{ + */ +#define LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as FMPI2C1 clock source */ +#define LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK RCC_DCKCFGR2_FMPI2C1SEL_0 /*!< SYSCLK clock used as FMPI2C1 clock source */ +#define LL_RCC_FMPI2C1_CLKSOURCE_HSI RCC_DCKCFGR2_FMPI2C1SEL_1 /*!< HSI clock used as FMPI2C1 clock source */ +/** + * @} + */ +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** @defgroup RCC_LL_EC_LPTIM1_CLKSOURCE Peripheral LPTIM clock source selection + * @{ + */ +#define LL_RCC_LPTIM1_CLKSOURCE_PCLK1 0x00000000U /*!< PCLK1 clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_HSI RCC_DCKCFGR2_LPTIM1SEL_0 /*!< LSI oscillator clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_LSI RCC_DCKCFGR2_LPTIM1SEL_1 /*!< HSI oscillator clock used as LPTIM1 clock */ +#define LL_RCC_LPTIM1_CLKSOURCE_LSE (uint32_t)(RCC_DCKCFGR2_LPTIM1SEL_1 | RCC_DCKCFGR2_LPTIM1SEL_0) /*!< LSE oscillator clock used as LPTIM1 clock */ +/** + * @} + */ +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** @defgroup RCC_LL_EC_SAIx_CLKSOURCE Peripheral SAI clock source selection + * @{ + */ +#if defined(RCC_DCKCFGR_SAI1SRC) +#define LL_RCC_SAI1_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1SRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC_1 >> 16)) /*!< PLL clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1SRC | (RCC_DCKCFGR_SAI1SRC >> 16)) /*!< External pin clock used as SAI1 clock source */ +#endif /* RCC_DCKCFGR_SAI1SRC */ +#if defined(RCC_DCKCFGR_SAI2SRC) +#define LL_RCC_SAI2_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI2SRC | 0x00000000U) /*!< PLLSAI clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC_0 >> 16)) /*!< PLLI2S clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC_1 >> 16)) /*!< PLL clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI2SRC | (RCC_DCKCFGR_SAI2SRC >> 16)) /*!< PLL Main clock used as SAI2 clock source */ +#endif /* RCC_DCKCFGR_SAI2SRC */ +#if defined(RCC_DCKCFGR_SAI1ASRC) +#if defined(RCC_SAI1A_PLLSOURCE_SUPPORT) +#define LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1ASRC | 0x00000000U) /*!< PLLI2S clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_0 >> 16)) /*!< External pin used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_1 >> 16)) /*!< PLL clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC >> 16)) /*!< PLL Main clock used as SAI1 block A clock source */ +#else +#define LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1ASRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 block A clock source */ +#define LL_RCC_SAI1_A_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1ASRC | (RCC_DCKCFGR_SAI1ASRC_1 >> 16)) /*!< External pin clock used as SAI1 block A clock source */ +#endif /* RCC_SAI1A_PLLSOURCE_SUPPORT */ +#endif /* RCC_DCKCFGR_SAI1ASRC */ +#if defined(RCC_DCKCFGR_SAI1BSRC) +#if defined(RCC_SAI1B_PLLSOURCE_SUPPORT) +#define LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1BSRC | 0x00000000U) /*!< PLLI2S clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_0 >> 16)) /*!< External pin used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_1 >> 16)) /*!< PLL clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC >> 16)) /*!< PLL Main clock used as SAI1 block B clock source */ +#else +#define LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (uint32_t)(RCC_DCKCFGR_SAI1BSRC | 0x00000000U) /*!< PLLSAI clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_0 >> 16)) /*!< PLLI2S clock used as SAI1 block B clock source */ +#define LL_RCC_SAI1_B_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_SAI1BSRC | (RCC_DCKCFGR_SAI1BSRC_1 >> 16)) /*!< External pin clock used as SAI1 block B clock source */ +#endif /* RCC_SAI1B_PLLSOURCE_SUPPORT */ +#endif /* RCC_DCKCFGR_SAI1BSRC */ +/** + * @} + */ +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** @defgroup RCC_LL_EC_SDIOx_CLKSOURCE Peripheral SDIO clock source selection + * @{ + */ +#define LL_RCC_SDIO_CLKSOURCE_PLL48CLK 0x00000000U /*!< PLL 48M domain clock used as SDIO clock */ +#if defined(RCC_DCKCFGR_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE_SYSCLK RCC_DCKCFGR_SDIOSEL /*!< System clock clock used as SDIO clock */ +#else +#define LL_RCC_SDIO_CLKSOURCE_SYSCLK RCC_DCKCFGR2_SDIOSEL /*!< System clock clock used as SDIO clock */ +#endif /* RCC_DCKCFGR_SDIOSEL */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI_CLKSOURCE Peripheral DSI clock source selection + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE_PHY 0x00000000U /*!< DSI-PHY clock used as DSI byte lane clock source */ +#define LL_RCC_DSI_CLKSOURCE_PLL RCC_DCKCFGR_DSISEL /*!< PLL clock used as DSI byte lane clock source */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC_CLKSOURCE Peripheral CEC clock source selection + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE_HSI_DIV488 0x00000000U /*!< HSI oscillator clock divided by 488 used as CEC clock */ +#define LL_RCC_CEC_CLKSOURCE_LSE RCC_DCKCFGR2_CECSEL /*!< LSE oscillator clock used as CEC clock */ +/** + * @} + */ +#endif /* CEC */ + +/** @defgroup RCC_LL_EC_I2S1_CLKSOURCE Peripheral I2S clock source selection + * @{ + */ +#if defined(RCC_CFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE_PLLI2S 0x00000000U /*!< I2S oscillator clock used as I2S1 clock */ +#define LL_RCC_I2S1_CLKSOURCE_PIN RCC_CFGR_I2SSRC /*!< External pin clock used as I2S1 clock */ +#endif /* RCC_CFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2SSRC | 0x00000000U) /*!< PLL clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2SSRC | (RCC_DCKCFGR_I2SSRC_0 >> 16)) /*!< External pin used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2SSRC | (RCC_DCKCFGR_I2SSRC_1 >> 16)) /*!< PLL Main clock used as I2S1 clock source */ +#endif /* RCC_DCKCFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2S1SRC) +#define LL_RCC_I2S1_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_I2S1SRC | 0x00000000U) /*!< PLLI2S clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC_0 >> 16)) /*!< External pin used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC_1 >> 16)) /*!< PLL clock used as I2S1 clock source */ +#define LL_RCC_I2S1_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2S1SRC | (RCC_DCKCFGR_I2S1SRC >> 16)) /*!< PLL Main clock used as I2S1 clock source */ +#endif /* RCC_DCKCFGR_I2S1SRC */ +#if defined(RCC_DCKCFGR_I2S2SRC) +#define LL_RCC_I2S2_CLKSOURCE_PLLI2S (uint32_t)(RCC_DCKCFGR_I2S2SRC | 0x00000000U) /*!< PLLI2S clock used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PIN (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC_0 >> 16)) /*!< External pin used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PLL (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC_1 >> 16)) /*!< PLL clock used as I2S2 clock source */ +#define LL_RCC_I2S2_CLKSOURCE_PLLSRC (uint32_t)(RCC_DCKCFGR_I2S2SRC | (RCC_DCKCFGR_I2S2SRC >> 16)) /*!< PLL Main clock used as I2S2 clock source */ +#endif /* RCC_DCKCFGR_I2S2SRC */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** @defgroup RCC_LL_EC_CK48M_CLKSOURCE Peripheral 48Mhz domain clock source selection + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE_PLL 0x00000000U /*!< PLL oscillator clock used as 48Mhz domain clock */ +#define LL_RCC_CK48M_CLKSOURCE_PLLSAI RCC_DCKCFGR_CK48MSEL /*!< PLLSAI oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +#if defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE_PLL 0x00000000U /*!< PLL oscillator clock used as 48Mhz domain clock */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_CK48M_CLKSOURCE_PLLSAI RCC_DCKCFGR2_CK48MSEL /*!< PLLSAI oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_CK48M_CLKSOURCE_PLLI2S RCC_DCKCFGR2_CK48MSEL /*!< PLLI2S oscillator clock used as 48Mhz domain clock */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ + +#if defined(RNG) +/** @defgroup RCC_LL_EC_RNG_CLKSOURCE Peripheral RNG clock source selection + * @{ + */ +#define LL_RCC_RNG_CLKSOURCE_PLL LL_RCC_CK48M_CLKSOURCE_PLL /*!< PLL clock used as RNG clock source */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_RNG_CLKSOURCE_PLLSAI LL_RCC_CK48M_CLKSOURCE_PLLSAI /*!< PLLSAI clock used as RNG clock source */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_RNG_CLKSOURCE_PLLI2S LL_RCC_CK48M_CLKSOURCE_PLLI2S /*!< PLLI2S clock used as RNG clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +/** + * @} + */ +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** @defgroup RCC_LL_EC_USB_CLKSOURCE Peripheral USB clock source selection + * @{ + */ +#define LL_RCC_USB_CLKSOURCE_PLL LL_RCC_CK48M_CLKSOURCE_PLL /*!< PLL clock used as USB clock source */ +#if defined(RCC_PLLSAI_SUPPORT) +#define LL_RCC_USB_CLKSOURCE_PLLSAI LL_RCC_CK48M_CLKSOURCE_PLLSAI /*!< PLLSAI clock used as USB clock source */ +#endif /* RCC_PLLSAI_SUPPORT */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define LL_RCC_USB_CLKSOURCE_PLLI2S LL_RCC_CK48M_CLKSOURCE_PLLI2S /*!< PLLI2S clock used as USB clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +/** + * @} + */ +#endif /* USB_OTG_FS || USB_OTG_HS */ + +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(DFSDM1_Channel0) || defined(DFSDM2_Channel0) +/** @defgroup RCC_LL_EC_DFSDM1_AUDIO_CLKSOURCE Peripheral DFSDM Audio clock source selection + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 (uint32_t)(RCC_DCKCFGR_CKDFSDM1ASEL | 0x00000000U) /*!< I2S1 clock used as DFSDM1 Audio clock source */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 (uint32_t)(RCC_DCKCFGR_CKDFSDM1ASEL | (RCC_DCKCFGR_CKDFSDM1ASEL << 16)) /*!< I2S2 clock used as DFSDM1 Audio clock source */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (uint32_t)(RCC_DCKCFGR_CKDFSDM2ASEL | 0x00000000U) /*!< I2S1 clock used as DFSDM2 Audio clock source */ +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (uint32_t)(RCC_DCKCFGR_CKDFSDM2ASEL | (RCC_DCKCFGR_CKDFSDM2ASEL << 16)) /*!< I2S2 clock used as DFSDM2 Audio clock source */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_DFSDM1_CLKSOURCE Peripheral DFSDM clock source selection + * @{ + */ +#define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 clock used as DFSDM1 clock */ +#define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK RCC_DCKCFGR_CKDFSDM1SEL /*!< System clock used as DFSDM1 clock */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 clock used as DFSDM2 clock */ +#define LL_RCC_DFSDM2_CLKSOURCE_SYSCLK RCC_DCKCFGR_CKDFSDM1SEL /*!< System clock used as DFSDM2 clock */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ +#endif /* DFSDM1_Channel0 || DFSDM2_Channel0 */ + +#if defined(FMPI2C1) +/** @defgroup RCC_LL_EC_FMPI2C1 Peripheral FMPI2C get clock source + * @{ + */ +#define LL_RCC_FMPI2C1_CLKSOURCE RCC_DCKCFGR2_FMPI2C1SEL /*!< FMPI2C1 Clock source selection */ +/** + * @} + */ +#endif /* FMPI2C1 */ + +#if defined(SPDIFRX) +/** @defgroup RCC_LL_EC_SPDIFRX_CLKSOURCE Peripheral SPDIFRX clock source selection + * @{ + */ +#define LL_RCC_SPDIFRX1_CLKSOURCE_PLL 0x00000000U /*!< PLL clock used as SPDIFRX clock source */ +#define LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S RCC_DCKCFGR2_SPDIFRXSEL /*!< PLLI2S clock used as SPDIFRX clock source */ +/** + * @} + */ +#endif /* SPDIFRX */ + +#if defined(LPTIM1) +/** @defgroup RCC_LL_EC_LPTIM1 Peripheral LPTIM get clock source + * @{ + */ +#define LL_RCC_LPTIM1_CLKSOURCE RCC_DCKCFGR2_LPTIM1SEL /*!< LPTIM1 Clock source selection */ +/** + * @} + */ +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** @defgroup RCC_LL_EC_SAIx Peripheral SAI get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_SAI1ASRC) +#define LL_RCC_SAI1_A_CLKSOURCE RCC_DCKCFGR_SAI1ASRC /*!< SAI1 block A Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1ASRC */ +#if defined(RCC_DCKCFGR_SAI1BSRC) +#define LL_RCC_SAI1_B_CLKSOURCE RCC_DCKCFGR_SAI1BSRC /*!< SAI1 block B Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1BSRC */ +#if defined(RCC_DCKCFGR_SAI1SRC) +#define LL_RCC_SAI1_CLKSOURCE RCC_DCKCFGR_SAI1SRC /*!< SAI1 Clock source selection */ +#endif /* RCC_DCKCFGR_SAI1SRC */ +#if defined(RCC_DCKCFGR_SAI2SRC) +#define LL_RCC_SAI2_CLKSOURCE RCC_DCKCFGR_SAI2SRC /*!< SAI2 Clock source selection */ +#endif /* RCC_DCKCFGR_SAI2SRC */ +/** + * @} + */ +#endif /* SAI1 */ + +#if defined(SDIO) +/** @defgroup RCC_LL_EC_SDIOx Peripheral SDIO get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE RCC_DCKCFGR_SDIOSEL /*!< SDIO Clock source selection */ +#elif defined(RCC_DCKCFGR2_SDIOSEL) +#define LL_RCC_SDIO_CLKSOURCE RCC_DCKCFGR2_SDIOSEL /*!< SDIO Clock source selection */ +#else +#define LL_RCC_SDIO_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< SDIO Clock source selection */ +#endif +/** + * @} + */ +#endif /* SDIO */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** @defgroup RCC_LL_EC_CK48M Peripheral CK48M get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE RCC_DCKCFGR_CK48MSEL /*!< CK48M Domain clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +#if defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_CK48M_CLKSOURCE RCC_DCKCFGR2_CK48MSEL /*!< CK48M Domain clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(RNG) +/** @defgroup RCC_LL_EC_RNG Peripheral RNG get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_RNG_CLKSOURCE LL_RCC_CK48M_CLKSOURCE /*!< RNG Clock source selection */ +#else +#define LL_RCC_RNG_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< RNG Clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** @defgroup RCC_LL_EC_USB Peripheral USB get clock source + * @{ + */ +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +#define LL_RCC_USB_CLKSOURCE LL_RCC_CK48M_CLKSOURCE /*!< USB Clock source selection */ +#else +#define LL_RCC_USB_CLKSOURCE RCC_PLLCFGR_PLLQ /*!< USB Clock source selection */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ +/** + * @} + */ +#endif /* USB_OTG_FS || USB_OTG_HS */ + +#if defined(CEC) +/** @defgroup RCC_LL_EC_CEC Peripheral CEC get clock source + * @{ + */ +#define LL_RCC_CEC_CLKSOURCE RCC_DCKCFGR2_CECSEL /*!< CEC Clock source selection */ +/** + * @} + */ +#endif /* CEC */ + +/** @defgroup RCC_LL_EC_I2S1 Peripheral I2S get clock source + * @{ + */ +#if defined(RCC_CFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_CFGR_I2SSRC /*!< I2S1 Clock source selection */ +#endif /* RCC_CFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2SSRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_DCKCFGR_I2SSRC /*!< I2S1 Clock source selection */ +#endif /* RCC_DCKCFGR_I2SSRC */ +#if defined(RCC_DCKCFGR_I2S1SRC) +#define LL_RCC_I2S1_CLKSOURCE RCC_DCKCFGR_I2S1SRC /*!< I2S1 Clock source selection */ +#endif /* RCC_DCKCFGR_I2S1SRC */ +#if defined(RCC_DCKCFGR_I2S2SRC) +#define LL_RCC_I2S2_CLKSOURCE RCC_DCKCFGR_I2S2SRC /*!< I2S2 Clock source selection */ +#endif /* RCC_DCKCFGR_I2S2SRC */ +/** + * @} + */ + +#if defined(DFSDM1_Channel0) || defined(DFSDM2_Channel0) +/** @defgroup RCC_LL_EC_DFSDM_AUDIO Peripheral DFSDM Audio get clock source + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE RCC_DCKCFGR_CKDFSDM1ASEL /*!< DFSDM1 Audio Clock source selection */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_AUDIO_CLKSOURCE RCC_DCKCFGR_CKDFSDM2ASEL /*!< DFSDM2 Audio Clock source selection */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_DFSDM Peripheral DFSDM get clock source + * @{ + */ +#define LL_RCC_DFSDM1_CLKSOURCE RCC_DCKCFGR_CKDFSDM1SEL /*!< DFSDM1 Clock source selection */ +#if defined(DFSDM2_Channel0) +#define LL_RCC_DFSDM2_CLKSOURCE RCC_DCKCFGR_CKDFSDM1SEL /*!< DFSDM2 Clock source selection */ +#endif /* DFSDM2_Channel0 */ +/** + * @} + */ +#endif /* DFSDM1_Channel0 || DFSDM2_Channel0 */ + +#if defined(SPDIFRX) +/** @defgroup RCC_LL_EC_SPDIFRX Peripheral SPDIFRX get clock source + * @{ + */ +#define LL_RCC_SPDIFRX1_CLKSOURCE RCC_DCKCFGR2_SPDIFRXSEL /*!< SPDIFRX Clock source selection */ +/** + * @} + */ +#endif /* SPDIFRX */ + +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI Peripheral DSI get clock source + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE RCC_DCKCFGR_DSISEL /*!< DSI Clock source selection */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(LTDC) +/** @defgroup RCC_LL_EC_LTDC Peripheral LTDC get clock source + * @{ + */ +#define LL_RCC_LTDC_CLKSOURCE RCC_DCKCFGR_PLLSAIDIVR /*!< LTDC Clock source selection */ +/** + * @} + */ +#endif /* LTDC */ + + +/** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection + * @{ + */ +#define LL_RCC_RTC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */ +#define LL_RCC_RTC_CLKSOURCE_HSE RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by HSE prescaler used as RTC clock */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_TIMPRE) +/** @defgroup RCC_LL_EC_TIM_CLKPRESCALER Timers clocks prescalers selection + * @{ + */ +#define LL_RCC_TIM_PRESCALER_TWICE 0x00000000U /*!< Timers clock to twice PCLK */ +#define LL_RCC_TIM_PRESCALER_FOUR_TIMES RCC_DCKCFGR_TIMPRE /*!< Timers clock to four time PCLK */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_TIMPRE */ + +/** @defgroup RCC_LL_EC_PLLSOURCE PLL, PLLI2S and PLLSAI entry clock source + * @{ + */ +#define LL_RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI /*!< HSI16 clock selected as PLL entry clock source */ +#define LL_RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */ +#if defined(RCC_PLLI2SCFGR_PLLI2SSRC) +#define LL_RCC_PLLI2SSOURCE_PIN (RCC_PLLI2SCFGR_PLLI2SSRC | 0x80U) /*!< I2S External pin input clock selected as PLLI2S entry clock source */ +#endif /* RCC_PLLI2SCFGR_PLLI2SSRC */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLM_DIV PLL, PLLI2S and PLLSAI division factor + * @{ + */ +#define LL_RCC_PLLM_DIV_2 (RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 2 */ +#define LL_RCC_PLLM_DIV_3 (RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 3 */ +#define LL_RCC_PLLM_DIV_4 (RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 4 */ +#define LL_RCC_PLLM_DIV_5 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 5 */ +#define LL_RCC_PLLM_DIV_6 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 6 */ +#define LL_RCC_PLLM_DIV_7 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 7 */ +#define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 8 */ +#define LL_RCC_PLLM_DIV_9 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 9 */ +#define LL_RCC_PLLM_DIV_10 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 10 */ +#define LL_RCC_PLLM_DIV_11 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 11 */ +#define LL_RCC_PLLM_DIV_12 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 12 */ +#define LL_RCC_PLLM_DIV_13 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 13 */ +#define LL_RCC_PLLM_DIV_14 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 14 */ +#define LL_RCC_PLLM_DIV_15 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 15 */ +#define LL_RCC_PLLM_DIV_16 (RCC_PLLCFGR_PLLM_4) /*!< PLL, PLLI2S and PLLSAI division factor by 16 */ +#define LL_RCC_PLLM_DIV_17 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 17 */ +#define LL_RCC_PLLM_DIV_18 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 18 */ +#define LL_RCC_PLLM_DIV_19 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 19 */ +#define LL_RCC_PLLM_DIV_20 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 20 */ +#define LL_RCC_PLLM_DIV_21 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 21 */ +#define LL_RCC_PLLM_DIV_22 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 22 */ +#define LL_RCC_PLLM_DIV_23 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 23 */ +#define LL_RCC_PLLM_DIV_24 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 24 */ +#define LL_RCC_PLLM_DIV_25 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 25 */ +#define LL_RCC_PLLM_DIV_26 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 26 */ +#define LL_RCC_PLLM_DIV_27 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 27 */ +#define LL_RCC_PLLM_DIV_28 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 28 */ +#define LL_RCC_PLLM_DIV_29 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 29 */ +#define LL_RCC_PLLM_DIV_30 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 30 */ +#define LL_RCC_PLLM_DIV_31 (RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 31 */ +#define LL_RCC_PLLM_DIV_32 (RCC_PLLCFGR_PLLM_5) /*!< PLL, PLLI2S and PLLSAI division factor by 32 */ +#define LL_RCC_PLLM_DIV_33 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 33 */ +#define LL_RCC_PLLM_DIV_34 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 34 */ +#define LL_RCC_PLLM_DIV_35 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 35 */ +#define LL_RCC_PLLM_DIV_36 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 36 */ +#define LL_RCC_PLLM_DIV_37 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 37 */ +#define LL_RCC_PLLM_DIV_38 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 38 */ +#define LL_RCC_PLLM_DIV_39 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 39 */ +#define LL_RCC_PLLM_DIV_40 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 40 */ +#define LL_RCC_PLLM_DIV_41 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 41 */ +#define LL_RCC_PLLM_DIV_42 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 42 */ +#define LL_RCC_PLLM_DIV_43 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 43 */ +#define LL_RCC_PLLM_DIV_44 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 44 */ +#define LL_RCC_PLLM_DIV_45 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 45 */ +#define LL_RCC_PLLM_DIV_46 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 46 */ +#define LL_RCC_PLLM_DIV_47 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 47 */ +#define LL_RCC_PLLM_DIV_48 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4) /*!< PLL, PLLI2S and PLLSAI division factor by 48 */ +#define LL_RCC_PLLM_DIV_49 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 49 */ +#define LL_RCC_PLLM_DIV_50 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 50 */ +#define LL_RCC_PLLM_DIV_51 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 51 */ +#define LL_RCC_PLLM_DIV_52 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 52 */ +#define LL_RCC_PLLM_DIV_53 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 53 */ +#define LL_RCC_PLLM_DIV_54 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 54 */ +#define LL_RCC_PLLM_DIV_55 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 55 */ +#define LL_RCC_PLLM_DIV_56 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3) /*!< PLL, PLLI2S and PLLSAI division factor by 56 */ +#define LL_RCC_PLLM_DIV_57 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 57 */ +#define LL_RCC_PLLM_DIV_58 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 58 */ +#define LL_RCC_PLLM_DIV_59 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 59 */ +#define LL_RCC_PLLM_DIV_60 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLI2S and PLLSAI division factor by 60 */ +#define LL_RCC_PLLM_DIV_61 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 61 */ +#define LL_RCC_PLLM_DIV_62 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLI2S and PLLSAI division factor by 62 */ +#define LL_RCC_PLLM_DIV_63 (RCC_PLLCFGR_PLLM_5 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLI2S and PLLSAI division factor by 63 */ +/** + * @} + */ + +#if defined(RCC_PLLCFGR_PLLR) +/** @defgroup RCC_LL_EC_PLLR_DIV PLL division factor (PLLR) + * @{ + */ +#define LL_RCC_PLLR_DIV_2 (RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 2 */ +#define LL_RCC_PLLR_DIV_3 (RCC_PLLCFGR_PLLR_1|RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 3 */ +#define LL_RCC_PLLR_DIV_4 (RCC_PLLCFGR_PLLR_2) /*!< Main PLL division factor for PLLCLK (system clock) by 4 */ +#define LL_RCC_PLLR_DIV_5 (RCC_PLLCFGR_PLLR_2|RCC_PLLCFGR_PLLR_0) /*!< Main PLL division factor for PLLCLK (system clock) by 5 */ +#define LL_RCC_PLLR_DIV_6 (RCC_PLLCFGR_PLLR_2|RCC_PLLCFGR_PLLR_1) /*!< Main PLL division factor for PLLCLK (system clock) by 6 */ +#define LL_RCC_PLLR_DIV_7 (RCC_PLLCFGR_PLLR) /*!< Main PLL division factor for PLLCLK (system clock) by 7 */ +/** + * @} + */ +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_DCKCFGR_PLLDIVR) +/** @defgroup RCC_LL_EC_PLLDIVR PLLDIVR division factor (PLLDIVR) + * @{ + */ +#define LL_RCC_PLLDIVR_DIV_1 (RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 1 */ +#define LL_RCC_PLLDIVR_DIV_2 (RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 2 */ +#define LL_RCC_PLLDIVR_DIV_3 (RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 3 */ +#define LL_RCC_PLLDIVR_DIV_4 (RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 4 */ +#define LL_RCC_PLLDIVR_DIV_5 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 5 */ +#define LL_RCC_PLLDIVR_DIV_6 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 6 */ +#define LL_RCC_PLLDIVR_DIV_7 (RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 7 */ +#define LL_RCC_PLLDIVR_DIV_8 (RCC_DCKCFGR_PLLDIVR_3) /*!< PLL division factor for PLLDIVR output by 8 */ +#define LL_RCC_PLLDIVR_DIV_9 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 9 */ +#define LL_RCC_PLLDIVR_DIV_10 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 10 */ +#define LL_RCC_PLLDIVR_DIV_11 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 11 */ +#define LL_RCC_PLLDIVR_DIV_12 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 12 */ +#define LL_RCC_PLLDIVR_DIV_13 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 13 */ +#define LL_RCC_PLLDIVR_DIV_14 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 14 */ +#define LL_RCC_PLLDIVR_DIV_15 (RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 15 */ +#define LL_RCC_PLLDIVR_DIV_16 (RCC_DCKCFGR_PLLDIVR_4) /*!< PLL division factor for PLLDIVR output by 16 */ +#define LL_RCC_PLLDIVR_DIV_17 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 17 */ +#define LL_RCC_PLLDIVR_DIV_18 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 18 */ +#define LL_RCC_PLLDIVR_DIV_19 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 19 */ +#define LL_RCC_PLLDIVR_DIV_20 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 20 */ +#define LL_RCC_PLLDIVR_DIV_21 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 21 */ +#define LL_RCC_PLLDIVR_DIV_22 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 22 */ +#define LL_RCC_PLLDIVR_DIV_23 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 23 */ +#define LL_RCC_PLLDIVR_DIV_24 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3) /*!< PLL division factor for PLLDIVR output by 24 */ +#define LL_RCC_PLLDIVR_DIV_25 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 25 */ +#define LL_RCC_PLLDIVR_DIV_26 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 26 */ +#define LL_RCC_PLLDIVR_DIV_27 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 27 */ +#define LL_RCC_PLLDIVR_DIV_28 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2) /*!< PLL division factor for PLLDIVR output by 28 */ +#define LL_RCC_PLLDIVR_DIV_29 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 29 */ +#define LL_RCC_PLLDIVR_DIV_30 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1) /*!< PLL division factor for PLLDIVR output by 30 */ +#define LL_RCC_PLLDIVR_DIV_31 (RCC_DCKCFGR_PLLDIVR_4 | RCC_DCKCFGR_PLLDIVR_3 | RCC_DCKCFGR_PLLDIVR_2 | RCC_DCKCFGR_PLLDIVR_1 | RCC_DCKCFGR_PLLDIVR_0) /*!< PLL division factor for PLLDIVR output by 31 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLDIVR */ + +/** @defgroup RCC_LL_EC_PLLP_DIV PLL division factor (PLLP) + * @{ + */ +#define LL_RCC_PLLP_DIV_2 0x00000000U /*!< Main PLL division factor for PLLP output by 2 */ +#define LL_RCC_PLLP_DIV_4 RCC_PLLCFGR_PLLP_0 /*!< Main PLL division factor for PLLP output by 4 */ +#define LL_RCC_PLLP_DIV_6 RCC_PLLCFGR_PLLP_1 /*!< Main PLL division factor for PLLP output by 6 */ +#define LL_RCC_PLLP_DIV_8 (RCC_PLLCFGR_PLLP_1 | RCC_PLLCFGR_PLLP_0) /*!< Main PLL division factor for PLLP output by 8 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLQ_DIV PLL division factor (PLLQ) + * @{ + */ +#define LL_RCC_PLLQ_DIV_2 RCC_PLLCFGR_PLLQ_1 /*!< Main PLL division factor for PLLQ output by 2 */ +#define LL_RCC_PLLQ_DIV_3 (RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 3 */ +#define LL_RCC_PLLQ_DIV_4 RCC_PLLCFGR_PLLQ_2 /*!< Main PLL division factor for PLLQ output by 4 */ +#define LL_RCC_PLLQ_DIV_5 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 5 */ +#define LL_RCC_PLLQ_DIV_6 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 6 */ +#define LL_RCC_PLLQ_DIV_7 (RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 7 */ +#define LL_RCC_PLLQ_DIV_8 RCC_PLLCFGR_PLLQ_3 /*!< Main PLL division factor for PLLQ output by 8 */ +#define LL_RCC_PLLQ_DIV_9 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 9 */ +#define LL_RCC_PLLQ_DIV_10 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 10 */ +#define LL_RCC_PLLQ_DIV_11 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 11 */ +#define LL_RCC_PLLQ_DIV_12 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2) /*!< Main PLL division factor for PLLQ output by 12 */ +#define LL_RCC_PLLQ_DIV_13 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 13 */ +#define LL_RCC_PLLQ_DIV_14 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1) /*!< Main PLL division factor for PLLQ output by 14 */ +#define LL_RCC_PLLQ_DIV_15 (RCC_PLLCFGR_PLLQ_3|RCC_PLLCFGR_PLLQ_2|RCC_PLLCFGR_PLLQ_1|RCC_PLLCFGR_PLLQ_0) /*!< Main PLL division factor for PLLQ output by 15 */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLL_SPRE_SEL PLL Spread Spectrum Selection + * @{ + */ +#define LL_RCC_SPREAD_SELECT_CENTER 0x00000000U /*!< PLL center spread spectrum selection */ +#define LL_RCC_SPREAD_SELECT_DOWN RCC_SSCGR_SPREADSEL /*!< PLL down spread spectrum selection */ +/** + * @} + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** @defgroup RCC_LL_EC_PLLI2SM PLLI2SM division factor (PLLI2SM) + * @{ + */ +#if defined(RCC_PLLI2SCFGR_PLLI2SM) +#define LL_RCC_PLLI2SM_DIV_2 (RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 2 */ +#define LL_RCC_PLLI2SM_DIV_3 (RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 3 */ +#define LL_RCC_PLLI2SM_DIV_4 (RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 4 */ +#define LL_RCC_PLLI2SM_DIV_5 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 5 */ +#define LL_RCC_PLLI2SM_DIV_6 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 6 */ +#define LL_RCC_PLLI2SM_DIV_7 (RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 7 */ +#define LL_RCC_PLLI2SM_DIV_8 (RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 8 */ +#define LL_RCC_PLLI2SM_DIV_9 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 9 */ +#define LL_RCC_PLLI2SM_DIV_10 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 10 */ +#define LL_RCC_PLLI2SM_DIV_11 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 11 */ +#define LL_RCC_PLLI2SM_DIV_12 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 12 */ +#define LL_RCC_PLLI2SM_DIV_13 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 13 */ +#define LL_RCC_PLLI2SM_DIV_14 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 14 */ +#define LL_RCC_PLLI2SM_DIV_15 (RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 15 */ +#define LL_RCC_PLLI2SM_DIV_16 (RCC_PLLI2SCFGR_PLLI2SM_4) /*!< PLLI2S division factor for PLLI2SM output by 16 */ +#define LL_RCC_PLLI2SM_DIV_17 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 17 */ +#define LL_RCC_PLLI2SM_DIV_18 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 18 */ +#define LL_RCC_PLLI2SM_DIV_19 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 19 */ +#define LL_RCC_PLLI2SM_DIV_20 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 20 */ +#define LL_RCC_PLLI2SM_DIV_21 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 21 */ +#define LL_RCC_PLLI2SM_DIV_22 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 22 */ +#define LL_RCC_PLLI2SM_DIV_23 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 23 */ +#define LL_RCC_PLLI2SM_DIV_24 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 24 */ +#define LL_RCC_PLLI2SM_DIV_25 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 25 */ +#define LL_RCC_PLLI2SM_DIV_26 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 26 */ +#define LL_RCC_PLLI2SM_DIV_27 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 27 */ +#define LL_RCC_PLLI2SM_DIV_28 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 28 */ +#define LL_RCC_PLLI2SM_DIV_29 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 29 */ +#define LL_RCC_PLLI2SM_DIV_30 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 30 */ +#define LL_RCC_PLLI2SM_DIV_31 (RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 31 */ +#define LL_RCC_PLLI2SM_DIV_32 (RCC_PLLI2SCFGR_PLLI2SM_5) /*!< PLLI2S division factor for PLLI2SM output by 32 */ +#define LL_RCC_PLLI2SM_DIV_33 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 33 */ +#define LL_RCC_PLLI2SM_DIV_34 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 34 */ +#define LL_RCC_PLLI2SM_DIV_35 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 35 */ +#define LL_RCC_PLLI2SM_DIV_36 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 36 */ +#define LL_RCC_PLLI2SM_DIV_37 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 37 */ +#define LL_RCC_PLLI2SM_DIV_38 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 38 */ +#define LL_RCC_PLLI2SM_DIV_39 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 39 */ +#define LL_RCC_PLLI2SM_DIV_40 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 40 */ +#define LL_RCC_PLLI2SM_DIV_41 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 41 */ +#define LL_RCC_PLLI2SM_DIV_42 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 42 */ +#define LL_RCC_PLLI2SM_DIV_43 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 43 */ +#define LL_RCC_PLLI2SM_DIV_44 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 44 */ +#define LL_RCC_PLLI2SM_DIV_45 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 45 */ +#define LL_RCC_PLLI2SM_DIV_46 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 46 */ +#define LL_RCC_PLLI2SM_DIV_47 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 47 */ +#define LL_RCC_PLLI2SM_DIV_48 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4) /*!< PLLI2S division factor for PLLI2SM output by 48 */ +#define LL_RCC_PLLI2SM_DIV_49 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 49 */ +#define LL_RCC_PLLI2SM_DIV_50 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 50 */ +#define LL_RCC_PLLI2SM_DIV_51 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 51 */ +#define LL_RCC_PLLI2SM_DIV_52 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 52 */ +#define LL_RCC_PLLI2SM_DIV_53 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 53 */ +#define LL_RCC_PLLI2SM_DIV_54 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 54 */ +#define LL_RCC_PLLI2SM_DIV_55 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 55 */ +#define LL_RCC_PLLI2SM_DIV_56 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3) /*!< PLLI2S division factor for PLLI2SM output by 56 */ +#define LL_RCC_PLLI2SM_DIV_57 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 57 */ +#define LL_RCC_PLLI2SM_DIV_58 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 58 */ +#define LL_RCC_PLLI2SM_DIV_59 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 59 */ +#define LL_RCC_PLLI2SM_DIV_60 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2) /*!< PLLI2S division factor for PLLI2SM output by 60 */ +#define LL_RCC_PLLI2SM_DIV_61 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 61 */ +#define LL_RCC_PLLI2SM_DIV_62 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1) /*!< PLLI2S division factor for PLLI2SM output by 62 */ +#define LL_RCC_PLLI2SM_DIV_63 (RCC_PLLI2SCFGR_PLLI2SM_5 | RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SM_3 | RCC_PLLI2SCFGR_PLLI2SM_2 | RCC_PLLI2SCFGR_PLLI2SM_1 | RCC_PLLI2SCFGR_PLLI2SM_0) /*!< PLLI2S division factor for PLLI2SM output by 63 */ +#else +#define LL_RCC_PLLI2SM_DIV_2 LL_RCC_PLLM_DIV_2 /*!< PLLI2S division factor for PLLI2SM output by 2 */ +#define LL_RCC_PLLI2SM_DIV_3 LL_RCC_PLLM_DIV_3 /*!< PLLI2S division factor for PLLI2SM output by 3 */ +#define LL_RCC_PLLI2SM_DIV_4 LL_RCC_PLLM_DIV_4 /*!< PLLI2S division factor for PLLI2SM output by 4 */ +#define LL_RCC_PLLI2SM_DIV_5 LL_RCC_PLLM_DIV_5 /*!< PLLI2S division factor for PLLI2SM output by 5 */ +#define LL_RCC_PLLI2SM_DIV_6 LL_RCC_PLLM_DIV_6 /*!< PLLI2S division factor for PLLI2SM output by 6 */ +#define LL_RCC_PLLI2SM_DIV_7 LL_RCC_PLLM_DIV_7 /*!< PLLI2S division factor for PLLI2SM output by 7 */ +#define LL_RCC_PLLI2SM_DIV_8 LL_RCC_PLLM_DIV_8 /*!< PLLI2S division factor for PLLI2SM output by 8 */ +#define LL_RCC_PLLI2SM_DIV_9 LL_RCC_PLLM_DIV_9 /*!< PLLI2S division factor for PLLI2SM output by 9 */ +#define LL_RCC_PLLI2SM_DIV_10 LL_RCC_PLLM_DIV_10 /*!< PLLI2S division factor for PLLI2SM output by 10 */ +#define LL_RCC_PLLI2SM_DIV_11 LL_RCC_PLLM_DIV_11 /*!< PLLI2S division factor for PLLI2SM output by 11 */ +#define LL_RCC_PLLI2SM_DIV_12 LL_RCC_PLLM_DIV_12 /*!< PLLI2S division factor for PLLI2SM output by 12 */ +#define LL_RCC_PLLI2SM_DIV_13 LL_RCC_PLLM_DIV_13 /*!< PLLI2S division factor for PLLI2SM output by 13 */ +#define LL_RCC_PLLI2SM_DIV_14 LL_RCC_PLLM_DIV_14 /*!< PLLI2S division factor for PLLI2SM output by 14 */ +#define LL_RCC_PLLI2SM_DIV_15 LL_RCC_PLLM_DIV_15 /*!< PLLI2S division factor for PLLI2SM output by 15 */ +#define LL_RCC_PLLI2SM_DIV_16 LL_RCC_PLLM_DIV_16 /*!< PLLI2S division factor for PLLI2SM output by 16 */ +#define LL_RCC_PLLI2SM_DIV_17 LL_RCC_PLLM_DIV_17 /*!< PLLI2S division factor for PLLI2SM output by 17 */ +#define LL_RCC_PLLI2SM_DIV_18 LL_RCC_PLLM_DIV_18 /*!< PLLI2S division factor for PLLI2SM output by 18 */ +#define LL_RCC_PLLI2SM_DIV_19 LL_RCC_PLLM_DIV_19 /*!< PLLI2S division factor for PLLI2SM output by 19 */ +#define LL_RCC_PLLI2SM_DIV_20 LL_RCC_PLLM_DIV_20 /*!< PLLI2S division factor for PLLI2SM output by 20 */ +#define LL_RCC_PLLI2SM_DIV_21 LL_RCC_PLLM_DIV_21 /*!< PLLI2S division factor for PLLI2SM output by 21 */ +#define LL_RCC_PLLI2SM_DIV_22 LL_RCC_PLLM_DIV_22 /*!< PLLI2S division factor for PLLI2SM output by 22 */ +#define LL_RCC_PLLI2SM_DIV_23 LL_RCC_PLLM_DIV_23 /*!< PLLI2S division factor for PLLI2SM output by 23 */ +#define LL_RCC_PLLI2SM_DIV_24 LL_RCC_PLLM_DIV_24 /*!< PLLI2S division factor for PLLI2SM output by 24 */ +#define LL_RCC_PLLI2SM_DIV_25 LL_RCC_PLLM_DIV_25 /*!< PLLI2S division factor for PLLI2SM output by 25 */ +#define LL_RCC_PLLI2SM_DIV_26 LL_RCC_PLLM_DIV_26 /*!< PLLI2S division factor for PLLI2SM output by 26 */ +#define LL_RCC_PLLI2SM_DIV_27 LL_RCC_PLLM_DIV_27 /*!< PLLI2S division factor for PLLI2SM output by 27 */ +#define LL_RCC_PLLI2SM_DIV_28 LL_RCC_PLLM_DIV_28 /*!< PLLI2S division factor for PLLI2SM output by 28 */ +#define LL_RCC_PLLI2SM_DIV_29 LL_RCC_PLLM_DIV_29 /*!< PLLI2S division factor for PLLI2SM output by 29 */ +#define LL_RCC_PLLI2SM_DIV_30 LL_RCC_PLLM_DIV_30 /*!< PLLI2S division factor for PLLI2SM output by 30 */ +#define LL_RCC_PLLI2SM_DIV_31 LL_RCC_PLLM_DIV_31 /*!< PLLI2S division factor for PLLI2SM output by 31 */ +#define LL_RCC_PLLI2SM_DIV_32 LL_RCC_PLLM_DIV_32 /*!< PLLI2S division factor for PLLI2SM output by 32 */ +#define LL_RCC_PLLI2SM_DIV_33 LL_RCC_PLLM_DIV_33 /*!< PLLI2S division factor for PLLI2SM output by 33 */ +#define LL_RCC_PLLI2SM_DIV_34 LL_RCC_PLLM_DIV_34 /*!< PLLI2S division factor for PLLI2SM output by 34 */ +#define LL_RCC_PLLI2SM_DIV_35 LL_RCC_PLLM_DIV_35 /*!< PLLI2S division factor for PLLI2SM output by 35 */ +#define LL_RCC_PLLI2SM_DIV_36 LL_RCC_PLLM_DIV_36 /*!< PLLI2S division factor for PLLI2SM output by 36 */ +#define LL_RCC_PLLI2SM_DIV_37 LL_RCC_PLLM_DIV_37 /*!< PLLI2S division factor for PLLI2SM output by 37 */ +#define LL_RCC_PLLI2SM_DIV_38 LL_RCC_PLLM_DIV_38 /*!< PLLI2S division factor for PLLI2SM output by 38 */ +#define LL_RCC_PLLI2SM_DIV_39 LL_RCC_PLLM_DIV_39 /*!< PLLI2S division factor for PLLI2SM output by 39 */ +#define LL_RCC_PLLI2SM_DIV_40 LL_RCC_PLLM_DIV_40 /*!< PLLI2S division factor for PLLI2SM output by 40 */ +#define LL_RCC_PLLI2SM_DIV_41 LL_RCC_PLLM_DIV_41 /*!< PLLI2S division factor for PLLI2SM output by 41 */ +#define LL_RCC_PLLI2SM_DIV_42 LL_RCC_PLLM_DIV_42 /*!< PLLI2S division factor for PLLI2SM output by 42 */ +#define LL_RCC_PLLI2SM_DIV_43 LL_RCC_PLLM_DIV_43 /*!< PLLI2S division factor for PLLI2SM output by 43 */ +#define LL_RCC_PLLI2SM_DIV_44 LL_RCC_PLLM_DIV_44 /*!< PLLI2S division factor for PLLI2SM output by 44 */ +#define LL_RCC_PLLI2SM_DIV_45 LL_RCC_PLLM_DIV_45 /*!< PLLI2S division factor for PLLI2SM output by 45 */ +#define LL_RCC_PLLI2SM_DIV_46 LL_RCC_PLLM_DIV_46 /*!< PLLI2S division factor for PLLI2SM output by 46 */ +#define LL_RCC_PLLI2SM_DIV_47 LL_RCC_PLLM_DIV_47 /*!< PLLI2S division factor for PLLI2SM output by 47 */ +#define LL_RCC_PLLI2SM_DIV_48 LL_RCC_PLLM_DIV_48 /*!< PLLI2S division factor for PLLI2SM output by 48 */ +#define LL_RCC_PLLI2SM_DIV_49 LL_RCC_PLLM_DIV_49 /*!< PLLI2S division factor for PLLI2SM output by 49 */ +#define LL_RCC_PLLI2SM_DIV_50 LL_RCC_PLLM_DIV_50 /*!< PLLI2S division factor for PLLI2SM output by 50 */ +#define LL_RCC_PLLI2SM_DIV_51 LL_RCC_PLLM_DIV_51 /*!< PLLI2S division factor for PLLI2SM output by 51 */ +#define LL_RCC_PLLI2SM_DIV_52 LL_RCC_PLLM_DIV_52 /*!< PLLI2S division factor for PLLI2SM output by 52 */ +#define LL_RCC_PLLI2SM_DIV_53 LL_RCC_PLLM_DIV_53 /*!< PLLI2S division factor for PLLI2SM output by 53 */ +#define LL_RCC_PLLI2SM_DIV_54 LL_RCC_PLLM_DIV_54 /*!< PLLI2S division factor for PLLI2SM output by 54 */ +#define LL_RCC_PLLI2SM_DIV_55 LL_RCC_PLLM_DIV_55 /*!< PLLI2S division factor for PLLI2SM output by 55 */ +#define LL_RCC_PLLI2SM_DIV_56 LL_RCC_PLLM_DIV_56 /*!< PLLI2S division factor for PLLI2SM output by 56 */ +#define LL_RCC_PLLI2SM_DIV_57 LL_RCC_PLLM_DIV_57 /*!< PLLI2S division factor for PLLI2SM output by 57 */ +#define LL_RCC_PLLI2SM_DIV_58 LL_RCC_PLLM_DIV_58 /*!< PLLI2S division factor for PLLI2SM output by 58 */ +#define LL_RCC_PLLI2SM_DIV_59 LL_RCC_PLLM_DIV_59 /*!< PLLI2S division factor for PLLI2SM output by 59 */ +#define LL_RCC_PLLI2SM_DIV_60 LL_RCC_PLLM_DIV_60 /*!< PLLI2S division factor for PLLI2SM output by 60 */ +#define LL_RCC_PLLI2SM_DIV_61 LL_RCC_PLLM_DIV_61 /*!< PLLI2S division factor for PLLI2SM output by 61 */ +#define LL_RCC_PLLI2SM_DIV_62 LL_RCC_PLLM_DIV_62 /*!< PLLI2S division factor for PLLI2SM output by 62 */ +#define LL_RCC_PLLI2SM_DIV_63 LL_RCC_PLLM_DIV_63 /*!< PLLI2S division factor for PLLI2SM output by 63 */ +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +/** + * @} + */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) +/** @defgroup RCC_LL_EC_PLLI2SQ PLLI2SQ division factor (PLLI2SQ) + * @{ + */ +#define LL_RCC_PLLI2SQ_DIV_2 RCC_PLLI2SCFGR_PLLI2SQ_1 /*!< PLLI2S division factor for PLLI2SQ output by 2 */ +#define LL_RCC_PLLI2SQ_DIV_3 (RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 3 */ +#define LL_RCC_PLLI2SQ_DIV_4 RCC_PLLI2SCFGR_PLLI2SQ_2 /*!< PLLI2S division factor for PLLI2SQ output by 4 */ +#define LL_RCC_PLLI2SQ_DIV_5 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 5 */ +#define LL_RCC_PLLI2SQ_DIV_6 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 6 */ +#define LL_RCC_PLLI2SQ_DIV_7 (RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 7 */ +#define LL_RCC_PLLI2SQ_DIV_8 RCC_PLLI2SCFGR_PLLI2SQ_3 /*!< PLLI2S division factor for PLLI2SQ output by 8 */ +#define LL_RCC_PLLI2SQ_DIV_9 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 9 */ +#define LL_RCC_PLLI2SQ_DIV_10 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 10 */ +#define LL_RCC_PLLI2SQ_DIV_11 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 11 */ +#define LL_RCC_PLLI2SQ_DIV_12 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2) /*!< PLLI2S division factor for PLLI2SQ output by 12 */ +#define LL_RCC_PLLI2SQ_DIV_13 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 13 */ +#define LL_RCC_PLLI2SQ_DIV_14 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1) /*!< PLLI2S division factor for PLLI2SQ output by 14 */ +#define LL_RCC_PLLI2SQ_DIV_15 (RCC_PLLI2SCFGR_PLLI2SQ_3 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SQ_1 | RCC_PLLI2SCFGR_PLLI2SQ_0) /*!< PLLI2S division factor for PLLI2SQ output by 15 */ +/** + * @} + */ +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** @defgroup RCC_LL_EC_PLLI2SDIVQ PLLI2SDIVQ division factor (PLLI2SDIVQ) + * @{ + */ +#define LL_RCC_PLLI2SDIVQ_DIV_1 0x00000000U /*!< PLLI2S division factor for PLLI2SDIVQ output by 1 */ +#define LL_RCC_PLLI2SDIVQ_DIV_2 RCC_DCKCFGR_PLLI2SDIVQ_0 /*!< PLLI2S division factor for PLLI2SDIVQ output by 2 */ +#define LL_RCC_PLLI2SDIVQ_DIV_3 RCC_DCKCFGR_PLLI2SDIVQ_1 /*!< PLLI2S division factor for PLLI2SDIVQ output by 3 */ +#define LL_RCC_PLLI2SDIVQ_DIV_4 (RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 4 */ +#define LL_RCC_PLLI2SDIVQ_DIV_5 RCC_DCKCFGR_PLLI2SDIVQ_2 /*!< PLLI2S division factor for PLLI2SDIVQ output by 5 */ +#define LL_RCC_PLLI2SDIVQ_DIV_6 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 6 */ +#define LL_RCC_PLLI2SDIVQ_DIV_7 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 7 */ +#define LL_RCC_PLLI2SDIVQ_DIV_8 (RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 8 */ +#define LL_RCC_PLLI2SDIVQ_DIV_9 RCC_DCKCFGR_PLLI2SDIVQ_3 /*!< PLLI2S division factor for PLLI2SDIVQ output by 9 */ +#define LL_RCC_PLLI2SDIVQ_DIV_10 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 10 */ +#define LL_RCC_PLLI2SDIVQ_DIV_11 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 11 */ +#define LL_RCC_PLLI2SDIVQ_DIV_12 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 12 */ +#define LL_RCC_PLLI2SDIVQ_DIV_13 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 13 */ +#define LL_RCC_PLLI2SDIVQ_DIV_14 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 14 */ +#define LL_RCC_PLLI2SDIVQ_DIV_15 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 15 */ +#define LL_RCC_PLLI2SDIVQ_DIV_16 (RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 16 */ +#define LL_RCC_PLLI2SDIVQ_DIV_17 RCC_DCKCFGR_PLLI2SDIVQ_4 /*!< PLLI2S division factor for PLLI2SDIVQ output by 17 */ +#define LL_RCC_PLLI2SDIVQ_DIV_18 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 18 */ +#define LL_RCC_PLLI2SDIVQ_DIV_19 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 19 */ +#define LL_RCC_PLLI2SDIVQ_DIV_20 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 20 */ +#define LL_RCC_PLLI2SDIVQ_DIV_21 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 21 */ +#define LL_RCC_PLLI2SDIVQ_DIV_22 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 22 */ +#define LL_RCC_PLLI2SDIVQ_DIV_23 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 23 */ +#define LL_RCC_PLLI2SDIVQ_DIV_24 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 24 */ +#define LL_RCC_PLLI2SDIVQ_DIV_25 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3) /*!< PLLI2S division factor for PLLI2SDIVQ output by 25 */ +#define LL_RCC_PLLI2SDIVQ_DIV_26 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 26 */ +#define LL_RCC_PLLI2SDIVQ_DIV_27 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 27 */ +#define LL_RCC_PLLI2SDIVQ_DIV_28 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 28 */ +#define LL_RCC_PLLI2SDIVQ_DIV_29 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2) /*!< PLLI2S division factor for PLLI2SDIVQ output by 29 */ +#define LL_RCC_PLLI2SDIVQ_DIV_30 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 30 */ +#define LL_RCC_PLLI2SDIVQ_DIV_31 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1) /*!< PLLI2S division factor for PLLI2SDIVQ output by 31 */ +#define LL_RCC_PLLI2SDIVQ_DIV_32 (RCC_DCKCFGR_PLLI2SDIVQ_4 | RCC_DCKCFGR_PLLI2SDIVQ_3 | RCC_DCKCFGR_PLLI2SDIVQ_2 | RCC_DCKCFGR_PLLI2SDIVQ_1 | RCC_DCKCFGR_PLLI2SDIVQ_0) /*!< PLLI2S division factor for PLLI2SDIVQ output by 32 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVR) +/** @defgroup RCC_LL_EC_PLLI2SDIVR PLLI2SDIVR division factor (PLLI2SDIVR) + * @{ + */ +#define LL_RCC_PLLI2SDIVR_DIV_1 (RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 1 */ +#define LL_RCC_PLLI2SDIVR_DIV_2 (RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 2 */ +#define LL_RCC_PLLI2SDIVR_DIV_3 (RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 3 */ +#define LL_RCC_PLLI2SDIVR_DIV_4 (RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 4 */ +#define LL_RCC_PLLI2SDIVR_DIV_5 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 5 */ +#define LL_RCC_PLLI2SDIVR_DIV_6 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 6 */ +#define LL_RCC_PLLI2SDIVR_DIV_7 (RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 7 */ +#define LL_RCC_PLLI2SDIVR_DIV_8 (RCC_DCKCFGR_PLLI2SDIVR_3) /*!< PLLI2S division factor for PLLI2SDIVR output by 8 */ +#define LL_RCC_PLLI2SDIVR_DIV_9 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 9 */ +#define LL_RCC_PLLI2SDIVR_DIV_10 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 10 */ +#define LL_RCC_PLLI2SDIVR_DIV_11 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 11 */ +#define LL_RCC_PLLI2SDIVR_DIV_12 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 12 */ +#define LL_RCC_PLLI2SDIVR_DIV_13 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 13 */ +#define LL_RCC_PLLI2SDIVR_DIV_14 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 14 */ +#define LL_RCC_PLLI2SDIVR_DIV_15 (RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 15 */ +#define LL_RCC_PLLI2SDIVR_DIV_16 (RCC_DCKCFGR_PLLI2SDIVR_4) /*!< PLLI2S division factor for PLLI2SDIVR output by 16 */ +#define LL_RCC_PLLI2SDIVR_DIV_17 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 17 */ +#define LL_RCC_PLLI2SDIVR_DIV_18 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 18 */ +#define LL_RCC_PLLI2SDIVR_DIV_19 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 19 */ +#define LL_RCC_PLLI2SDIVR_DIV_20 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 20 */ +#define LL_RCC_PLLI2SDIVR_DIV_21 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 21 */ +#define LL_RCC_PLLI2SDIVR_DIV_22 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 22 */ +#define LL_RCC_PLLI2SDIVR_DIV_23 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 23 */ +#define LL_RCC_PLLI2SDIVR_DIV_24 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3) /*!< PLLI2S division factor for PLLI2SDIVR output by 24 */ +#define LL_RCC_PLLI2SDIVR_DIV_25 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 25 */ +#define LL_RCC_PLLI2SDIVR_DIV_26 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 26 */ +#define LL_RCC_PLLI2SDIVR_DIV_27 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 27 */ +#define LL_RCC_PLLI2SDIVR_DIV_28 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2) /*!< PLLI2S division factor for PLLI2SDIVR output by 28 */ +#define LL_RCC_PLLI2SDIVR_DIV_29 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 29 */ +#define LL_RCC_PLLI2SDIVR_DIV_30 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1) /*!< PLLI2S division factor for PLLI2SDIVR output by 30 */ +#define LL_RCC_PLLI2SDIVR_DIV_31 (RCC_DCKCFGR_PLLI2SDIVR_4 | RCC_DCKCFGR_PLLI2SDIVR_3 | RCC_DCKCFGR_PLLI2SDIVR_2 | RCC_DCKCFGR_PLLI2SDIVR_1 | RCC_DCKCFGR_PLLI2SDIVR_0) /*!< PLLI2S division factor for PLLI2SDIVR output by 31 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLI2SDIVR */ + +/** @defgroup RCC_LL_EC_PLLI2SR PLLI2SR division factor (PLLI2SR) + * @{ + */ +#define LL_RCC_PLLI2SR_DIV_2 RCC_PLLI2SCFGR_PLLI2SR_1 /*!< PLLI2S division factor for PLLI2SR output by 2 */ +#define LL_RCC_PLLI2SR_DIV_3 (RCC_PLLI2SCFGR_PLLI2SR_1 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 3 */ +#define LL_RCC_PLLI2SR_DIV_4 RCC_PLLI2SCFGR_PLLI2SR_2 /*!< PLLI2S division factor for PLLI2SR output by 4 */ +#define LL_RCC_PLLI2SR_DIV_5 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 5 */ +#define LL_RCC_PLLI2SR_DIV_6 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_1) /*!< PLLI2S division factor for PLLI2SR output by 6 */ +#define LL_RCC_PLLI2SR_DIV_7 (RCC_PLLI2SCFGR_PLLI2SR_2 | RCC_PLLI2SCFGR_PLLI2SR_1 | RCC_PLLI2SCFGR_PLLI2SR_0) /*!< PLLI2S division factor for PLLI2SR output by 7 */ +/** + * @} + */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SP) +/** @defgroup RCC_LL_EC_PLLI2SP PLLI2SP division factor (PLLI2SP) + * @{ + */ +#define LL_RCC_PLLI2SP_DIV_2 0x00000000U /*!< PLLI2S division factor for PLLI2SP output by 2 */ +#define LL_RCC_PLLI2SP_DIV_4 RCC_PLLI2SCFGR_PLLI2SP_0 /*!< PLLI2S division factor for PLLI2SP output by 4 */ +#define LL_RCC_PLLI2SP_DIV_6 RCC_PLLI2SCFGR_PLLI2SP_1 /*!< PLLI2S division factor for PLLI2SP output by 6 */ +#define LL_RCC_PLLI2SP_DIV_8 (RCC_PLLI2SCFGR_PLLI2SP_1 | RCC_PLLI2SCFGR_PLLI2SP_0) /*!< PLLI2S division factor for PLLI2SP output by 8 */ +/** + * @} + */ +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** @defgroup RCC_LL_EC_PLLSAIM PLLSAIM division factor (PLLSAIM or PLLM) + * @{ + */ +#if defined(RCC_PLLSAICFGR_PLLSAIM) +#define LL_RCC_PLLSAIM_DIV_2 (RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 2 */ +#define LL_RCC_PLLSAIM_DIV_3 (RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 3 */ +#define LL_RCC_PLLSAIM_DIV_4 (RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 4 */ +#define LL_RCC_PLLSAIM_DIV_5 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 5 */ +#define LL_RCC_PLLSAIM_DIV_6 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 6 */ +#define LL_RCC_PLLSAIM_DIV_7 (RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 7 */ +#define LL_RCC_PLLSAIM_DIV_8 (RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 8 */ +#define LL_RCC_PLLSAIM_DIV_9 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 9 */ +#define LL_RCC_PLLSAIM_DIV_10 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 10 */ +#define LL_RCC_PLLSAIM_DIV_11 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 11 */ +#define LL_RCC_PLLSAIM_DIV_12 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 12 */ +#define LL_RCC_PLLSAIM_DIV_13 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 13 */ +#define LL_RCC_PLLSAIM_DIV_14 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 14 */ +#define LL_RCC_PLLSAIM_DIV_15 (RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 15 */ +#define LL_RCC_PLLSAIM_DIV_16 (RCC_PLLSAICFGR_PLLSAIM_4) /*!< PLLSAI division factor for PLLSAIM output by 16 */ +#define LL_RCC_PLLSAIM_DIV_17 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 17 */ +#define LL_RCC_PLLSAIM_DIV_18 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 18 */ +#define LL_RCC_PLLSAIM_DIV_19 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 19 */ +#define LL_RCC_PLLSAIM_DIV_20 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 20 */ +#define LL_RCC_PLLSAIM_DIV_21 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 21 */ +#define LL_RCC_PLLSAIM_DIV_22 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 22 */ +#define LL_RCC_PLLSAIM_DIV_23 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 23 */ +#define LL_RCC_PLLSAIM_DIV_24 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 24 */ +#define LL_RCC_PLLSAIM_DIV_25 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 25 */ +#define LL_RCC_PLLSAIM_DIV_26 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 26 */ +#define LL_RCC_PLLSAIM_DIV_27 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 27 */ +#define LL_RCC_PLLSAIM_DIV_28 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 28 */ +#define LL_RCC_PLLSAIM_DIV_29 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 29 */ +#define LL_RCC_PLLSAIM_DIV_30 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 30 */ +#define LL_RCC_PLLSAIM_DIV_31 (RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 31 */ +#define LL_RCC_PLLSAIM_DIV_32 (RCC_PLLSAICFGR_PLLSAIM_5) /*!< PLLSAI division factor for PLLSAIM output by 32 */ +#define LL_RCC_PLLSAIM_DIV_33 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 33 */ +#define LL_RCC_PLLSAIM_DIV_34 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 34 */ +#define LL_RCC_PLLSAIM_DIV_35 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 35 */ +#define LL_RCC_PLLSAIM_DIV_36 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 36 */ +#define LL_RCC_PLLSAIM_DIV_37 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 37 */ +#define LL_RCC_PLLSAIM_DIV_38 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 38 */ +#define LL_RCC_PLLSAIM_DIV_39 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 39 */ +#define LL_RCC_PLLSAIM_DIV_40 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 40 */ +#define LL_RCC_PLLSAIM_DIV_41 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 41 */ +#define LL_RCC_PLLSAIM_DIV_42 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 42 */ +#define LL_RCC_PLLSAIM_DIV_43 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 43 */ +#define LL_RCC_PLLSAIM_DIV_44 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 44 */ +#define LL_RCC_PLLSAIM_DIV_45 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 45 */ +#define LL_RCC_PLLSAIM_DIV_46 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 46 */ +#define LL_RCC_PLLSAIM_DIV_47 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 47 */ +#define LL_RCC_PLLSAIM_DIV_48 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4) /*!< PLLSAI division factor for PLLSAIM output by 48 */ +#define LL_RCC_PLLSAIM_DIV_49 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 49 */ +#define LL_RCC_PLLSAIM_DIV_50 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 50 */ +#define LL_RCC_PLLSAIM_DIV_51 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 51 */ +#define LL_RCC_PLLSAIM_DIV_52 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 52 */ +#define LL_RCC_PLLSAIM_DIV_53 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 53 */ +#define LL_RCC_PLLSAIM_DIV_54 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 54 */ +#define LL_RCC_PLLSAIM_DIV_55 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 55 */ +#define LL_RCC_PLLSAIM_DIV_56 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3) /*!< PLLSAI division factor for PLLSAIM output by 56 */ +#define LL_RCC_PLLSAIM_DIV_57 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 57 */ +#define LL_RCC_PLLSAIM_DIV_58 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 58 */ +#define LL_RCC_PLLSAIM_DIV_59 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 59 */ +#define LL_RCC_PLLSAIM_DIV_60 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2) /*!< PLLSAI division factor for PLLSAIM output by 60 */ +#define LL_RCC_PLLSAIM_DIV_61 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 61 */ +#define LL_RCC_PLLSAIM_DIV_62 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1) /*!< PLLSAI division factor for PLLSAIM output by 62 */ +#define LL_RCC_PLLSAIM_DIV_63 (RCC_PLLSAICFGR_PLLSAIM_5 | RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIM_3 | RCC_PLLSAICFGR_PLLSAIM_2 | RCC_PLLSAICFGR_PLLSAIM_1 | RCC_PLLSAICFGR_PLLSAIM_0) /*!< PLLSAI division factor for PLLSAIM output by 63 */ +#else +#define LL_RCC_PLLSAIM_DIV_2 LL_RCC_PLLM_DIV_2 /*!< PLLSAI division factor for PLLSAIM output by 2 */ +#define LL_RCC_PLLSAIM_DIV_3 LL_RCC_PLLM_DIV_3 /*!< PLLSAI division factor for PLLSAIM output by 3 */ +#define LL_RCC_PLLSAIM_DIV_4 LL_RCC_PLLM_DIV_4 /*!< PLLSAI division factor for PLLSAIM output by 4 */ +#define LL_RCC_PLLSAIM_DIV_5 LL_RCC_PLLM_DIV_5 /*!< PLLSAI division factor for PLLSAIM output by 5 */ +#define LL_RCC_PLLSAIM_DIV_6 LL_RCC_PLLM_DIV_6 /*!< PLLSAI division factor for PLLSAIM output by 6 */ +#define LL_RCC_PLLSAIM_DIV_7 LL_RCC_PLLM_DIV_7 /*!< PLLSAI division factor for PLLSAIM output by 7 */ +#define LL_RCC_PLLSAIM_DIV_8 LL_RCC_PLLM_DIV_8 /*!< PLLSAI division factor for PLLSAIM output by 8 */ +#define LL_RCC_PLLSAIM_DIV_9 LL_RCC_PLLM_DIV_9 /*!< PLLSAI division factor for PLLSAIM output by 9 */ +#define LL_RCC_PLLSAIM_DIV_10 LL_RCC_PLLM_DIV_10 /*!< PLLSAI division factor for PLLSAIM output by 10 */ +#define LL_RCC_PLLSAIM_DIV_11 LL_RCC_PLLM_DIV_11 /*!< PLLSAI division factor for PLLSAIM output by 11 */ +#define LL_RCC_PLLSAIM_DIV_12 LL_RCC_PLLM_DIV_12 /*!< PLLSAI division factor for PLLSAIM output by 12 */ +#define LL_RCC_PLLSAIM_DIV_13 LL_RCC_PLLM_DIV_13 /*!< PLLSAI division factor for PLLSAIM output by 13 */ +#define LL_RCC_PLLSAIM_DIV_14 LL_RCC_PLLM_DIV_14 /*!< PLLSAI division factor for PLLSAIM output by 14 */ +#define LL_RCC_PLLSAIM_DIV_15 LL_RCC_PLLM_DIV_15 /*!< PLLSAI division factor for PLLSAIM output by 15 */ +#define LL_RCC_PLLSAIM_DIV_16 LL_RCC_PLLM_DIV_16 /*!< PLLSAI division factor for PLLSAIM output by 16 */ +#define LL_RCC_PLLSAIM_DIV_17 LL_RCC_PLLM_DIV_17 /*!< PLLSAI division factor for PLLSAIM output by 17 */ +#define LL_RCC_PLLSAIM_DIV_18 LL_RCC_PLLM_DIV_18 /*!< PLLSAI division factor for PLLSAIM output by 18 */ +#define LL_RCC_PLLSAIM_DIV_19 LL_RCC_PLLM_DIV_19 /*!< PLLSAI division factor for PLLSAIM output by 19 */ +#define LL_RCC_PLLSAIM_DIV_20 LL_RCC_PLLM_DIV_20 /*!< PLLSAI division factor for PLLSAIM output by 20 */ +#define LL_RCC_PLLSAIM_DIV_21 LL_RCC_PLLM_DIV_21 /*!< PLLSAI division factor for PLLSAIM output by 21 */ +#define LL_RCC_PLLSAIM_DIV_22 LL_RCC_PLLM_DIV_22 /*!< PLLSAI division factor for PLLSAIM output by 22 */ +#define LL_RCC_PLLSAIM_DIV_23 LL_RCC_PLLM_DIV_23 /*!< PLLSAI division factor for PLLSAIM output by 23 */ +#define LL_RCC_PLLSAIM_DIV_24 LL_RCC_PLLM_DIV_24 /*!< PLLSAI division factor for PLLSAIM output by 24 */ +#define LL_RCC_PLLSAIM_DIV_25 LL_RCC_PLLM_DIV_25 /*!< PLLSAI division factor for PLLSAIM output by 25 */ +#define LL_RCC_PLLSAIM_DIV_26 LL_RCC_PLLM_DIV_26 /*!< PLLSAI division factor for PLLSAIM output by 26 */ +#define LL_RCC_PLLSAIM_DIV_27 LL_RCC_PLLM_DIV_27 /*!< PLLSAI division factor for PLLSAIM output by 27 */ +#define LL_RCC_PLLSAIM_DIV_28 LL_RCC_PLLM_DIV_28 /*!< PLLSAI division factor for PLLSAIM output by 28 */ +#define LL_RCC_PLLSAIM_DIV_29 LL_RCC_PLLM_DIV_29 /*!< PLLSAI division factor for PLLSAIM output by 29 */ +#define LL_RCC_PLLSAIM_DIV_30 LL_RCC_PLLM_DIV_30 /*!< PLLSAI division factor for PLLSAIM output by 30 */ +#define LL_RCC_PLLSAIM_DIV_31 LL_RCC_PLLM_DIV_31 /*!< PLLSAI division factor for PLLSAIM output by 31 */ +#define LL_RCC_PLLSAIM_DIV_32 LL_RCC_PLLM_DIV_32 /*!< PLLSAI division factor for PLLSAIM output by 32 */ +#define LL_RCC_PLLSAIM_DIV_33 LL_RCC_PLLM_DIV_33 /*!< PLLSAI division factor for PLLSAIM output by 33 */ +#define LL_RCC_PLLSAIM_DIV_34 LL_RCC_PLLM_DIV_34 /*!< PLLSAI division factor for PLLSAIM output by 34 */ +#define LL_RCC_PLLSAIM_DIV_35 LL_RCC_PLLM_DIV_35 /*!< PLLSAI division factor for PLLSAIM output by 35 */ +#define LL_RCC_PLLSAIM_DIV_36 LL_RCC_PLLM_DIV_36 /*!< PLLSAI division factor for PLLSAIM output by 36 */ +#define LL_RCC_PLLSAIM_DIV_37 LL_RCC_PLLM_DIV_37 /*!< PLLSAI division factor for PLLSAIM output by 37 */ +#define LL_RCC_PLLSAIM_DIV_38 LL_RCC_PLLM_DIV_38 /*!< PLLSAI division factor for PLLSAIM output by 38 */ +#define LL_RCC_PLLSAIM_DIV_39 LL_RCC_PLLM_DIV_39 /*!< PLLSAI division factor for PLLSAIM output by 39 */ +#define LL_RCC_PLLSAIM_DIV_40 LL_RCC_PLLM_DIV_40 /*!< PLLSAI division factor for PLLSAIM output by 40 */ +#define LL_RCC_PLLSAIM_DIV_41 LL_RCC_PLLM_DIV_41 /*!< PLLSAI division factor for PLLSAIM output by 41 */ +#define LL_RCC_PLLSAIM_DIV_42 LL_RCC_PLLM_DIV_42 /*!< PLLSAI division factor for PLLSAIM output by 42 */ +#define LL_RCC_PLLSAIM_DIV_43 LL_RCC_PLLM_DIV_43 /*!< PLLSAI division factor for PLLSAIM output by 43 */ +#define LL_RCC_PLLSAIM_DIV_44 LL_RCC_PLLM_DIV_44 /*!< PLLSAI division factor for PLLSAIM output by 44 */ +#define LL_RCC_PLLSAIM_DIV_45 LL_RCC_PLLM_DIV_45 /*!< PLLSAI division factor for PLLSAIM output by 45 */ +#define LL_RCC_PLLSAIM_DIV_46 LL_RCC_PLLM_DIV_46 /*!< PLLSAI division factor for PLLSAIM output by 46 */ +#define LL_RCC_PLLSAIM_DIV_47 LL_RCC_PLLM_DIV_47 /*!< PLLSAI division factor for PLLSAIM output by 47 */ +#define LL_RCC_PLLSAIM_DIV_48 LL_RCC_PLLM_DIV_48 /*!< PLLSAI division factor for PLLSAIM output by 48 */ +#define LL_RCC_PLLSAIM_DIV_49 LL_RCC_PLLM_DIV_49 /*!< PLLSAI division factor for PLLSAIM output by 49 */ +#define LL_RCC_PLLSAIM_DIV_50 LL_RCC_PLLM_DIV_50 /*!< PLLSAI division factor for PLLSAIM output by 50 */ +#define LL_RCC_PLLSAIM_DIV_51 LL_RCC_PLLM_DIV_51 /*!< PLLSAI division factor for PLLSAIM output by 51 */ +#define LL_RCC_PLLSAIM_DIV_52 LL_RCC_PLLM_DIV_52 /*!< PLLSAI division factor for PLLSAIM output by 52 */ +#define LL_RCC_PLLSAIM_DIV_53 LL_RCC_PLLM_DIV_53 /*!< PLLSAI division factor for PLLSAIM output by 53 */ +#define LL_RCC_PLLSAIM_DIV_54 LL_RCC_PLLM_DIV_54 /*!< PLLSAI division factor for PLLSAIM output by 54 */ +#define LL_RCC_PLLSAIM_DIV_55 LL_RCC_PLLM_DIV_55 /*!< PLLSAI division factor for PLLSAIM output by 55 */ +#define LL_RCC_PLLSAIM_DIV_56 LL_RCC_PLLM_DIV_56 /*!< PLLSAI division factor for PLLSAIM output by 56 */ +#define LL_RCC_PLLSAIM_DIV_57 LL_RCC_PLLM_DIV_57 /*!< PLLSAI division factor for PLLSAIM output by 57 */ +#define LL_RCC_PLLSAIM_DIV_58 LL_RCC_PLLM_DIV_58 /*!< PLLSAI division factor for PLLSAIM output by 58 */ +#define LL_RCC_PLLSAIM_DIV_59 LL_RCC_PLLM_DIV_59 /*!< PLLSAI division factor for PLLSAIM output by 59 */ +#define LL_RCC_PLLSAIM_DIV_60 LL_RCC_PLLM_DIV_60 /*!< PLLSAI division factor for PLLSAIM output by 60 */ +#define LL_RCC_PLLSAIM_DIV_61 LL_RCC_PLLM_DIV_61 /*!< PLLSAI division factor for PLLSAIM output by 61 */ +#define LL_RCC_PLLSAIM_DIV_62 LL_RCC_PLLM_DIV_62 /*!< PLLSAI division factor for PLLSAIM output by 62 */ +#define LL_RCC_PLLSAIM_DIV_63 LL_RCC_PLLM_DIV_63 /*!< PLLSAI division factor for PLLSAIM output by 63 */ +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +/** + * @} + */ + +/** @defgroup RCC_LL_EC_PLLSAIQ PLLSAIQ division factor (PLLSAIQ) + * @{ + */ +#define LL_RCC_PLLSAIQ_DIV_2 RCC_PLLSAICFGR_PLLSAIQ_1 /*!< PLLSAI division factor for PLLSAIQ output by 2 */ +#define LL_RCC_PLLSAIQ_DIV_3 (RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 3 */ +#define LL_RCC_PLLSAIQ_DIV_4 RCC_PLLSAICFGR_PLLSAIQ_2 /*!< PLLSAI division factor for PLLSAIQ output by 4 */ +#define LL_RCC_PLLSAIQ_DIV_5 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 5 */ +#define LL_RCC_PLLSAIQ_DIV_6 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 6 */ +#define LL_RCC_PLLSAIQ_DIV_7 (RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 7 */ +#define LL_RCC_PLLSAIQ_DIV_8 RCC_PLLSAICFGR_PLLSAIQ_3 /*!< PLLSAI division factor for PLLSAIQ output by 8 */ +#define LL_RCC_PLLSAIQ_DIV_9 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 9 */ +#define LL_RCC_PLLSAIQ_DIV_10 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 10 */ +#define LL_RCC_PLLSAIQ_DIV_11 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 11 */ +#define LL_RCC_PLLSAIQ_DIV_12 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2) /*!< PLLSAI division factor for PLLSAIQ output by 12 */ +#define LL_RCC_PLLSAIQ_DIV_13 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 13 */ +#define LL_RCC_PLLSAIQ_DIV_14 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1) /*!< PLLSAI division factor for PLLSAIQ output by 14 */ +#define LL_RCC_PLLSAIQ_DIV_15 (RCC_PLLSAICFGR_PLLSAIQ_3 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIQ_1 | RCC_PLLSAICFGR_PLLSAIQ_0) /*!< PLLSAI division factor for PLLSAIQ output by 15 */ +/** + * @} + */ + +#if defined(RCC_DCKCFGR_PLLSAIDIVQ) +/** @defgroup RCC_LL_EC_PLLSAIDIVQ PLLSAIDIVQ division factor (PLLSAIDIVQ) + * @{ + */ +#define LL_RCC_PLLSAIDIVQ_DIV_1 0x00000000U /*!< PLLSAI division factor for PLLSAIDIVQ output by 1 */ +#define LL_RCC_PLLSAIDIVQ_DIV_2 RCC_DCKCFGR_PLLSAIDIVQ_0 /*!< PLLSAI division factor for PLLSAIDIVQ output by 2 */ +#define LL_RCC_PLLSAIDIVQ_DIV_3 RCC_DCKCFGR_PLLSAIDIVQ_1 /*!< PLLSAI division factor for PLLSAIDIVQ output by 3 */ +#define LL_RCC_PLLSAIDIVQ_DIV_4 (RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 4 */ +#define LL_RCC_PLLSAIDIVQ_DIV_5 RCC_DCKCFGR_PLLSAIDIVQ_2 /*!< PLLSAI division factor for PLLSAIDIVQ output by 5 */ +#define LL_RCC_PLLSAIDIVQ_DIV_6 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 6 */ +#define LL_RCC_PLLSAIDIVQ_DIV_7 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 7 */ +#define LL_RCC_PLLSAIDIVQ_DIV_8 (RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 8 */ +#define LL_RCC_PLLSAIDIVQ_DIV_9 RCC_DCKCFGR_PLLSAIDIVQ_3 /*!< PLLSAI division factor for PLLSAIDIVQ output by 9 */ +#define LL_RCC_PLLSAIDIVQ_DIV_10 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 10 */ +#define LL_RCC_PLLSAIDIVQ_DIV_11 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 11 */ +#define LL_RCC_PLLSAIDIVQ_DIV_12 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 12 */ +#define LL_RCC_PLLSAIDIVQ_DIV_13 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 13 */ +#define LL_RCC_PLLSAIDIVQ_DIV_14 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 14 */ +#define LL_RCC_PLLSAIDIVQ_DIV_15 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 15 */ +#define LL_RCC_PLLSAIDIVQ_DIV_16 (RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 16 */ +#define LL_RCC_PLLSAIDIVQ_DIV_17 RCC_DCKCFGR_PLLSAIDIVQ_4 /*!< PLLSAI division factor for PLLSAIDIVQ output by 17 */ +#define LL_RCC_PLLSAIDIVQ_DIV_18 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 18 */ +#define LL_RCC_PLLSAIDIVQ_DIV_19 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 19 */ +#define LL_RCC_PLLSAIDIVQ_DIV_20 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 20 */ +#define LL_RCC_PLLSAIDIVQ_DIV_21 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 21 */ +#define LL_RCC_PLLSAIDIVQ_DIV_22 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 22 */ +#define LL_RCC_PLLSAIDIVQ_DIV_23 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 23 */ +#define LL_RCC_PLLSAIDIVQ_DIV_24 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 24 */ +#define LL_RCC_PLLSAIDIVQ_DIV_25 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3) /*!< PLLSAI division factor for PLLSAIDIVQ output by 25 */ +#define LL_RCC_PLLSAIDIVQ_DIV_26 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 26 */ +#define LL_RCC_PLLSAIDIVQ_DIV_27 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 27 */ +#define LL_RCC_PLLSAIDIVQ_DIV_28 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 28 */ +#define LL_RCC_PLLSAIDIVQ_DIV_29 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2) /*!< PLLSAI division factor for PLLSAIDIVQ output by 29 */ +#define LL_RCC_PLLSAIDIVQ_DIV_30 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 30 */ +#define LL_RCC_PLLSAIDIVQ_DIV_31 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1) /*!< PLLSAI division factor for PLLSAIDIVQ output by 31 */ +#define LL_RCC_PLLSAIDIVQ_DIV_32 (RCC_DCKCFGR_PLLSAIDIVQ_4 | RCC_DCKCFGR_PLLSAIDIVQ_3 | RCC_DCKCFGR_PLLSAIDIVQ_2 | RCC_DCKCFGR_PLLSAIDIVQ_1 | RCC_DCKCFGR_PLLSAIDIVQ_0) /*!< PLLSAI division factor for PLLSAIDIVQ output by 32 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLSAIDIVQ */ + +#if defined(RCC_PLLSAICFGR_PLLSAIR) +/** @defgroup RCC_LL_EC_PLLSAIR PLLSAIR division factor (PLLSAIR) + * @{ + */ +#define LL_RCC_PLLSAIR_DIV_2 RCC_PLLSAICFGR_PLLSAIR_1 /*!< PLLSAI division factor for PLLSAIR output by 2 */ +#define LL_RCC_PLLSAIR_DIV_3 (RCC_PLLSAICFGR_PLLSAIR_1 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 3 */ +#define LL_RCC_PLLSAIR_DIV_4 RCC_PLLSAICFGR_PLLSAIR_2 /*!< PLLSAI division factor for PLLSAIR output by 4 */ +#define LL_RCC_PLLSAIR_DIV_5 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 5 */ +#define LL_RCC_PLLSAIR_DIV_6 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_1) /*!< PLLSAI division factor for PLLSAIR output by 6 */ +#define LL_RCC_PLLSAIR_DIV_7 (RCC_PLLSAICFGR_PLLSAIR_2 | RCC_PLLSAICFGR_PLLSAIR_1 | RCC_PLLSAICFGR_PLLSAIR_0) /*!< PLLSAI division factor for PLLSAIR output by 7 */ +/** + * @} + */ +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + +#if defined(RCC_DCKCFGR_PLLSAIDIVR) +/** @defgroup RCC_LL_EC_PLLSAIDIVR PLLSAIDIVR division factor (PLLSAIDIVR) + * @{ + */ +#define LL_RCC_PLLSAIDIVR_DIV_2 0x00000000U /*!< PLLSAI division factor for PLLSAIDIVR output by 2 */ +#define LL_RCC_PLLSAIDIVR_DIV_4 RCC_DCKCFGR_PLLSAIDIVR_0 /*!< PLLSAI division factor for PLLSAIDIVR output by 4 */ +#define LL_RCC_PLLSAIDIVR_DIV_8 RCC_DCKCFGR_PLLSAIDIVR_1 /*!< PLLSAI division factor for PLLSAIDIVR output by 8 */ +#define LL_RCC_PLLSAIDIVR_DIV_16 (RCC_DCKCFGR_PLLSAIDIVR_1 | RCC_DCKCFGR_PLLSAIDIVR_0) /*!< PLLSAI division factor for PLLSAIDIVR output by 16 */ +/** + * @} + */ +#endif /* RCC_DCKCFGR_PLLSAIDIVR */ + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** @defgroup RCC_LL_EC_PLLSAIP PLLSAIP division factor (PLLSAIP) + * @{ + */ +#define LL_RCC_PLLSAIP_DIV_2 0x00000000U /*!< PLLSAI division factor for PLLSAIP output by 2 */ +#define LL_RCC_PLLSAIP_DIV_4 RCC_PLLSAICFGR_PLLSAIP_0 /*!< PLLSAI division factor for PLLSAIP output by 4 */ +#define LL_RCC_PLLSAIP_DIV_6 RCC_PLLSAICFGR_PLLSAIP_1 /*!< PLLSAI division factor for PLLSAIP output by 6 */ +#define LL_RCC_PLLSAIP_DIV_8 (RCC_PLLSAICFGR_PLLSAIP_1 | RCC_PLLSAICFGR_PLLSAIP_0) /*!< PLLSAI division factor for PLLSAIP output by 8 */ +/** + * @} + */ +#endif /* RCC_PLLSAICFGR_PLLSAIP */ +#endif /* RCC_PLLSAI_SUPPORT */ +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Macros RCC Exported Macros + * @{ + */ + +/** @defgroup RCC_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in RCC register + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_RCC_WriteReg(__REG__, __VALUE__) WRITE_REG(RCC->__REG__, (__VALUE__)) + +/** + * @brief Read a value in RCC register + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_RCC_ReadReg(__REG__) READ_REG(RCC->__REG__) +/** + * @} + */ + +/** @defgroup RCC_LL_EM_CALC_FREQ Calculate frequencies + * @{ + */ + +/** + * @brief Helper macro to calculate the PLLCLK frequency on system domain + * @note ex: @ref __LL_RCC_CALC_PLLCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((((__PLLP__) >> RCC_PLLCFGR_PLLP_Pos ) + 1U) * 2U)) + +#if defined(RCC_PLLR_SYSCLK_SUPPORT) +/** + * @brief Helper macro to calculate the PLLRCLK frequency on system domain + * @note ex: @ref __LL_RCC_CALC_PLLRCLK_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLRCLK_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) + +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ + +/** + * @brief Helper macro to calculate the PLLCLK frequency used on 48M domain + * @note ex: @ref __LL_RCC_CALC_PLLCLK_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLQ__) >> RCC_PLLCFGR_PLLQ_Pos )) + +#if defined(DSI) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on DSI + * @note ex: @ref __LL_RCC_CALC_PLLCLK_DSI_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_DSI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* DSI */ + +#if defined(RCC_PLLR_I2S_CLKSOURCE_SUPPORT) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on I2S + * @note ex: @ref __LL_RCC_CALC_PLLCLK_I2S_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_I2S_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* RCC_PLLR_I2S_CLKSOURCE_SUPPORT */ + +#if defined(SPDIFRX) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on SPDIFRX + * @note ex: @ref __LL_RCC_CALC_PLLCLK_SPDIFRX_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLCLK_SPDIFRX_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* SPDIFRX */ + +#if defined(RCC_PLLCFGR_PLLR) +#if defined(SAI1) +/** + * @brief Helper macro to calculate the PLLCLK frequency used on SAI + * @note ex: @ref __LL_RCC_CALC_PLLCLK_SAI_FREQ (HSE_VALUE, @ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLL_GetN (), @ref LL_RCC_PLL_GetR (), @ref LL_RCC_PLL_GetDIVR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param __PLLN__ Between 50 and 432 + * @param __PLLR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @param __PLLDIVR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval PLL clock frequency (in Hz) + */ +#if defined(RCC_DCKCFGR_PLLDIVR) +#define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__, __PLLDIVR__) (((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) / ((__PLLDIVR__) >> RCC_DCKCFGR_PLLDIVR_Pos )) +#else +#define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLR__) ((__INPUTFREQ__) / (__PLLM__) * (__PLLN__) / \ + ((__PLLR__) >> RCC_PLLCFGR_PLLR_Pos )) +#endif /* RCC_DCKCFGR_PLLDIVR */ +#endif /* SAI1 */ +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetQ (), @ref LL_RCC_PLLSAI_GetDIVQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLSAIQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + * @param __PLLSAIDIVQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIQ__, __PLLSAIDIVQ__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + (((__PLLSAIQ__) >> RCC_PLLSAICFGR_PLLSAIQ_Pos) * (((__PLLSAIDIVQ__) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos) + 1U))) + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Helper macro to calculate the PLLSAI frequency used on 48Mhz domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 50 and 432 + * @param __PLLSAIP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIP__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + ((((__PLLSAIP__) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) * 2U)) +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +#if defined(LTDC) +/** + * @brief Helper macro to calculate the PLLSAI frequency used for LTDC domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI_LTDC_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI_GetDivider (), + * @ref LL_RCC_PLLSAI_GetN (), @ref LL_RCC_PLLSAI_GetR (), @ref LL_RCC_PLLSAI_GetDIVR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param __PLLSAIN__ Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLSAIR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + * @param __PLLSAIDIVR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + * @retval PLLSAI clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI_LTDC_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAIN__, __PLLSAIR__, __PLLSAIDIVR__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLSAIN__) / \ + (((__PLLSAIR__) >> RCC_PLLSAICFGR_PLLSAIR_Pos) * (aRCC_PLLSAIDIVRPrescTable[(__PLLSAIDIVR__) >> RCC_DCKCFGR_PLLSAIDIVR_Pos]))) +#endif /* LTDC */ +#endif /* RCC_PLLSAI_SUPPORT */ + +#if defined(RCC_PLLI2S_SUPPORT) +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) || defined(RCC_DCKCFGR_PLLI2SDIVR) +/** + * @brief Helper macro to calculate the PLLI2S frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetQ (), @ref LL_RCC_PLLI2S_GetDIVQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLI2SQ_R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @param __PLLI2SDIVQ_R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval PLLI2S clock frequency (in Hz) + */ +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +#define __LL_RCC_CALC_PLLI2S_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ_R__, __PLLI2SDIVQ_R__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + (((__PLLI2SQ_R__) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos) * (((__PLLI2SDIVQ_R__) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos) + 1U))) +#else +#define __LL_RCC_CALC_PLLI2S_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ_R__, __PLLI2SDIVQ_R__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + (((__PLLI2SQ_R__) >> RCC_PLLI2SCFGR_PLLI2SR_Pos) * ((__PLLI2SDIVQ_R__) >> RCC_DCKCFGR_PLLI2SDIVR_Pos))) + +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_DCKCFGR_PLLI2SDIVQ || RCC_DCKCFGR_PLLI2SDIVR */ + +#if defined(SPDIFRX) +/** + * @brief Helper macro to calculate the PLLI2S frequency used on SPDIFRX domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_SPDIFRX_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50 and 432 + * @param __PLLI2SP__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_SPDIFRX_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SP__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((((__PLLI2SP__) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) * 2U)) + +#endif /* SPDIFRX */ + +/** + * @brief Helper macro to calculate the PLLI2S frequency used for I2S domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_I2S_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param __PLLI2SR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_I2S_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SR__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((__PLLI2SR__) >> RCC_PLLI2SCFGR_PLLI2SR_Pos)) + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Helper macro to calculate the PLLI2S frequency used for 48Mhz domain + * @note ex: @ref __LL_RCC_CALC_PLLI2S_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLLI2S_GetDivider (), + * @ref LL_RCC_PLLI2S_GetN (), @ref LL_RCC_PLLI2S_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param __PLLI2SN__ Between 50 and 432 + * @param __PLLI2SQ__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + * @retval PLLI2S clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLI2S_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLI2SN__, __PLLI2SQ__) (((__INPUTFREQ__) / (__PLLM__)) * (__PLLI2SN__) / \ + ((__PLLI2SQ__) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos)) + +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ +#endif /* RCC_PLLI2S_SUPPORT */ + +/** + * @brief Helper macro to calculate the HCLK frequency + * @param __SYSCLKFREQ__ SYSCLK frequency (based on HSE/HSI/PLLCLK) + * @param __AHBPRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + * @retval HCLK clock frequency (in Hz) + */ +#define __LL_RCC_CALC_HCLK_FREQ(__SYSCLKFREQ__, __AHBPRESCALER__) ((__SYSCLKFREQ__) >> AHBPrescTable[((__AHBPRESCALER__) & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]) + +/** + * @brief Helper macro to calculate the PCLK1 frequency (ABP1) + * @param __HCLKFREQ__ HCLK frequency + * @param __APB1PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + * @retval PCLK1 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos]) + +/** + * @brief Helper macro to calculate the PCLK2 frequency (ABP2) + * @param __HCLKFREQ__ HCLK frequency + * @param __APB2PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + * @retval PCLK2 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos]) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup RCC_LL_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_LL_EF_HSE HSE + * @{ + */ + +/** + * @brief Enable the Clock Security System. + * @rmtoll CR CSSON LL_RCC_HSE_EnableCSS + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_EnableCSS(void) +{ + SET_BIT(RCC->CR, RCC_CR_CSSON); +} + +/** + * @brief Enable HSE external oscillator (HSE Bypass) + * @rmtoll CR HSEBYP LL_RCC_HSE_EnableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_EnableBypass(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSEBYP); +} + +/** + * @brief Disable HSE external oscillator (HSE Bypass) + * @rmtoll CR HSEBYP LL_RCC_HSE_DisableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_DisableBypass(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); +} + +/** + * @brief Enable HSE crystal oscillator (HSE ON) + * @rmtoll CR HSEON LL_RCC_HSE_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSEON); +} + +/** + * @brief Disable HSE crystal oscillator (HSE ON) + * @rmtoll CR HSEON LL_RCC_HSE_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSE_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON); +} + +/** + * @brief Check if HSE oscillator Ready + * @rmtoll CR HSERDY LL_RCC_HSE_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_HSI HSI + * @{ + */ + +/** + * @brief Enable HSI oscillator + * @rmtoll CR HSION LL_RCC_HSI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_HSION); +} + +/** + * @brief Disable HSI oscillator + * @rmtoll CR HSION LL_RCC_HSI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_HSION); +} + +/** + * @brief Check if HSI clock is ready + * @rmtoll CR HSIRDY LL_RCC_HSI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)); +} + +/** + * @brief Get HSI Calibration value + * @note When HSITRIM is written, HSICAL is updated with the sum of + * HSITRIM and the factory trim value + * @rmtoll CR HSICAL LL_RCC_HSI_GetCalibration + * @retval Between Min_Data = 0x00 and Max_Data = 0xFF + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibration(void) +{ + return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSICAL) >> RCC_CR_HSICAL_Pos); +} + +/** + * @brief Set HSI Calibration trimming + * @note user-programmable trimming value that is added to the HSICAL + * @note Default value is 16, which, when added to the HSICAL value, + * should trim the HSI to 16 MHz +/- 1 % + * @rmtoll CR HSITRIM LL_RCC_HSI_SetCalibTrimming + * @param Value Between Min_Data = 0 and Max_Data = 31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_HSI_SetCalibTrimming(uint32_t Value) +{ + MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, Value << RCC_CR_HSITRIM_Pos); +} + +/** + * @brief Get HSI Calibration trimming + * @rmtoll CR HSITRIM LL_RCC_HSI_GetCalibTrimming + * @retval Between Min_Data = 0 and Max_Data = 31 + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_GetCalibTrimming(void) +{ + return (uint32_t)(READ_BIT(RCC->CR, RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_LSE LSE + * @{ + */ + +/** + * @brief Enable Low Speed External (LSE) crystal. + * @rmtoll BDCR LSEON LL_RCC_LSE_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_Enable(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEON); +} + +/** + * @brief Disable Low Speed External (LSE) crystal. + * @rmtoll BDCR LSEON LL_RCC_LSE_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_Disable(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON); +} + +/** + * @brief Enable external clock source (LSE bypass). + * @rmtoll BDCR LSEBYP LL_RCC_LSE_EnableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_EnableBypass(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); +} + +/** + * @brief Disable external clock source (LSE bypass). + * @rmtoll BDCR LSEBYP LL_RCC_LSE_DisableBypass + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_DisableBypass(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP); +} + +/** + * @brief Check if LSE oscillator Ready + * @rmtoll BDCR LSERDY LL_RCC_LSE_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_LSE_IsReady(void) +{ + return (READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)); +} + +#if defined(RCC_BDCR_LSEMOD) +/** + * @brief Enable LSE high drive mode. + * @note LSE high drive mode can be enabled only when the LSE clock is disabled + * @rmtoll BDCR LSEMOD LL_RCC_LSE_EnableHighDriveMode + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_EnableHighDriveMode(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); +} + +/** + * @brief Disable LSE high drive mode. + * @note LSE high drive mode can be disabled only when the LSE clock is disabled + * @rmtoll BDCR LSEMOD LL_RCC_LSE_DisableHighDriveMode + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSE_DisableHighDriveMode(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); +} +#endif /* RCC_BDCR_LSEMOD */ + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_LSI LSI + * @{ + */ + +/** + * @brief Enable LSI Oscillator + * @rmtoll CSR LSION LL_RCC_LSI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSI_Enable(void) +{ + SET_BIT(RCC->CSR, RCC_CSR_LSION); +} + +/** + * @brief Disable LSI Oscillator + * @rmtoll CSR LSION LL_RCC_LSI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_LSI_Disable(void) +{ + CLEAR_BIT(RCC->CSR, RCC_CSR_LSION); +} + +/** + * @brief Check if LSI is Ready + * @rmtoll CSR LSIRDY LL_RCC_LSI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_LSI_IsReady(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_LSIRDY) == (RCC_CSR_LSIRDY)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_System System + * @{ + */ + +/** + * @brief Configure the system clock source + * @rmtoll CFGR SW LL_RCC_SetSysClkSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_SYS_CLKSOURCE_HSI + * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE + * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL + * @arg @ref LL_RCC_SYS_CLKSOURCE_PLLR (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source); +} + +/** + * @brief Get the system clock source + * @rmtoll CFGR SWS LL_RCC_GetSysClkSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL + * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLLR (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)); +} + +/** + * @brief Set AHB prescaler + * @rmtoll CFGR HPRE LL_RCC_SetAHBPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler); +} + +/** + * @brief Set APB1 prescaler + * @rmtoll CFGR PPRE1 LL_RCC_SetAPB1Prescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler); +} + +/** + * @brief Set APB2 prescaler + * @rmtoll CFGR PPRE2 LL_RCC_SetAPB2Prescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler); +} + +/** + * @brief Get AHB prescaler + * @rmtoll CFGR HPRE LL_RCC_GetAHBPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SYSCLK_DIV_1 + * @arg @ref LL_RCC_SYSCLK_DIV_2 + * @arg @ref LL_RCC_SYSCLK_DIV_4 + * @arg @ref LL_RCC_SYSCLK_DIV_8 + * @arg @ref LL_RCC_SYSCLK_DIV_16 + * @arg @ref LL_RCC_SYSCLK_DIV_64 + * @arg @ref LL_RCC_SYSCLK_DIV_128 + * @arg @ref LL_RCC_SYSCLK_DIV_256 + * @arg @ref LL_RCC_SYSCLK_DIV_512 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAHBPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE)); +} + +/** + * @brief Get APB1 prescaler + * @rmtoll CFGR PPRE1 LL_RCC_GetAPB1Prescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_APB1_DIV_1 + * @arg @ref LL_RCC_APB1_DIV_2 + * @arg @ref LL_RCC_APB1_DIV_4 + * @arg @ref LL_RCC_APB1_DIV_8 + * @arg @ref LL_RCC_APB1_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAPB1Prescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1)); +} + +/** + * @brief Get APB2 prescaler + * @rmtoll CFGR PPRE2 LL_RCC_GetAPB2Prescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_APB2_DIV_1 + * @arg @ref LL_RCC_APB2_DIV_2 + * @arg @ref LL_RCC_APB2_DIV_4 + * @arg @ref LL_RCC_APB2_DIV_8 + * @arg @ref LL_RCC_APB2_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_GetAPB2Prescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_MCO MCO + * @{ + */ + +#if defined(RCC_CFGR_MCO1EN) +/** + * @brief Enable MCO1 output + * @rmtoll CFGR RCC_CFGR_MCO1EN LL_RCC_MCO1_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO1_Enable(void) +{ + SET_BIT(RCC->CFGR, RCC_CFGR_MCO1EN); +} + +/** + * @brief Disable MCO1 output + * @rmtoll CFGR RCC_CFGR_MCO1EN LL_RCC_MCO1_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO1_Disable(void) +{ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_MCO1EN); +} +#endif /* RCC_CFGR_MCO1EN */ + +#if defined(RCC_CFGR_MCO2EN) +/** + * @brief Enable MCO2 output + * @rmtoll CFGR RCC_CFGR_MCO2EN LL_RCC_MCO2_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO2_Enable(void) +{ + SET_BIT(RCC->CFGR, RCC_CFGR_MCO2EN); +} + +/** + * @brief Disable MCO2 output + * @rmtoll CFGR RCC_CFGR_MCO2EN LL_RCC_MCO2_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_MCO2_Disable(void) +{ + CLEAR_BIT(RCC->CFGR, RCC_CFGR_MCO2EN); +} +#endif /* RCC_CFGR_MCO2EN */ + +/** + * @brief Configure MCOx + * @rmtoll CFGR MCO1 LL_RCC_ConfigMCO\n + * CFGR MCO1PRE LL_RCC_ConfigMCO\n + * CFGR MCO2 LL_RCC_ConfigMCO\n + * CFGR MCO2PRE LL_RCC_ConfigMCO + * @param MCOxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_MCO1SOURCE_HSI + * @arg @ref LL_RCC_MCO1SOURCE_LSE + * @arg @ref LL_RCC_MCO1SOURCE_HSE + * @arg @ref LL_RCC_MCO1SOURCE_PLLCLK + * @arg @ref LL_RCC_MCO2SOURCE_SYSCLK + * @arg @ref LL_RCC_MCO2SOURCE_PLLI2S + * @arg @ref LL_RCC_MCO2SOURCE_HSE + * @arg @ref LL_RCC_MCO2SOURCE_PLLCLK + * @param MCOxPrescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_MCO1_DIV_1 + * @arg @ref LL_RCC_MCO1_DIV_2 + * @arg @ref LL_RCC_MCO1_DIV_3 + * @arg @ref LL_RCC_MCO1_DIV_4 + * @arg @ref LL_RCC_MCO1_DIV_5 + * @arg @ref LL_RCC_MCO2_DIV_1 + * @arg @ref LL_RCC_MCO2_DIV_2 + * @arg @ref LL_RCC_MCO2_DIV_3 + * @arg @ref LL_RCC_MCO2_DIV_4 + * @arg @ref LL_RCC_MCO2_DIV_5 + * @retval None + */ +__STATIC_INLINE void LL_RCC_ConfigMCO(uint32_t MCOxSource, uint32_t MCOxPrescaler) +{ + MODIFY_REG(RCC->CFGR, (MCOxSource & 0xFFFF0000U) | (MCOxPrescaler & 0xFFFF0000U), (MCOxSource << 16U) | (MCOxPrescaler << 16U)); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_Peripheral_Clock_Source Peripheral Clock Source + * @{ + */ +#if defined(FMPI2C1) +/** + * @brief Configure FMPI2C clock source + * @rmtoll DCKCFGR2 FMPI2C1SEL LL_RCC_SetFMPI2CClockSource + * @param FMPI2CxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_HSI + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetFMPI2CClockSource(uint32_t FMPI2CxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_FMPI2C1SEL, FMPI2CxSource); +} +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** + * @brief Configure LPTIMx clock source + * @rmtoll DCKCFGR2 LPTIM1SEL LL_RCC_SetLPTIMClockSource + * @param LPTIMxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL, LPTIMxSource); +} +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** + * @brief Configure SAIx clock source + * @rmtoll DCKCFGR SAI1SRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI2SRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI1ASRC LL_RCC_SetSAIClockSource\n + * DCKCFGR SAI1BSRC LL_RCC_SetSAIClockSource + * @param SAIxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource) +{ + MODIFY_REG(RCC->DCKCFGR, (SAIxSource & 0xFFFF0000U), (SAIxSource << 16U)); +} +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** + * @brief Configure SDIO clock source + * @rmtoll DCKCFGR SDIOSEL LL_RCC_SetSDIOClockSource\n + * DCKCFGR2 SDIOSEL LL_RCC_SetSDIOClockSource + * @param SDIOxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE_PLL48CLK + * @arg @ref LL_RCC_SDIO_CLKSOURCE_SYSCLK + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSDIOClockSource(uint32_t SDIOxSource) +{ +#if defined(RCC_DCKCFGR_SDIOSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_SDIOSEL, SDIOxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SDIOSEL, SDIOxSource); +#endif /* RCC_DCKCFGR_SDIOSEL */ +} +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** + * @brief Configure 48Mhz domain clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetCK48MClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetCK48MClockSource + * @param CK48MxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLL + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetCK48MClockSource(uint32_t CK48MxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, CK48MxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, CK48MxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} + +#if defined(RNG) +/** + * @brief Configure RNG clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetRNGClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetRNGClockSource + * @param RNGxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRNGClockSource(uint32_t RNGxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, RNGxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, RNGxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** + * @brief Configure USB clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_SetUSBClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_SetUSBClockSource + * @param USBxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetUSBClockSource(uint32_t USBxSource) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CK48MSEL, USBxSource); +#else + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CK48MSEL, USBxSource); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* USB_OTG_FS || USB_OTG_HS */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(CEC) +/** + * @brief Configure CEC clock source + * @rmtoll DCKCFGR2 CECSEL LL_RCC_SetCECClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV488 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetCECClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_CECSEL, Source); +} +#endif /* CEC */ + +/** + * @brief Configure I2S clock source + * @rmtoll CFGR I2SSRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2SSRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2S1SRC LL_RCC_SetI2SClockSource\n + * DCKCFGR I2S2SRC LL_RCC_SetI2SClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PIN + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetI2SClockSource(uint32_t Source) +{ +#if defined(RCC_CFGR_I2SSRC) + MODIFY_REG(RCC->CFGR, RCC_CFGR_I2SSRC, Source); +#else + MODIFY_REG(RCC->DCKCFGR, (Source & 0xFFFF0000U), (Source << 16U)); +#endif /* RCC_CFGR_I2SSRC */ +} + +#if defined(DSI) +/** + * @brief Configure DSI clock source + * @rmtoll DCKCFGR DSISEL LL_RCC_SetDSIClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDSIClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_DSISEL, Source); +} +#endif /* DSI */ + +#if defined(DFSDM1_Channel0) +/** + * @brief Configure DFSDM Audio clock source + * @rmtoll DCKCFGR CKDFSDM1ASEL LL_RCC_SetDFSDMAudioClockSource\n + * DCKCFGR CKDFSDM2ASEL LL_RCC_SetDFSDMAudioClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (*) + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDFSDMAudioClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, (Source & 0x0000FFFFU), (Source >> 16U)); +} + +/** + * @brief Configure DFSDM Kernel clock source + * @rmtoll DCKCFGR CKDFSDM1SEL LL_RCC_SetDFSDMClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2 + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK2 (*) + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_CKDFSDM1SEL, Source); +} +#endif /* DFSDM1_Channel0 */ + +#if defined(SPDIFRX) +/** + * @brief Configure SPDIFRX clock source + * @rmtoll DCKCFGR2 SPDIFRXSEL LL_RCC_SetSPDIFRXClockSource + * @param SPDIFRXxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLL + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSPDIFRXClockSource(uint32_t SPDIFRXxSource) +{ + MODIFY_REG(RCC->DCKCFGR2, RCC_DCKCFGR2_SPDIFRXSEL, SPDIFRXxSource); +} +#endif /* SPDIFRX */ + +#if defined(FMPI2C1) +/** + * @brief Get FMPI2C clock source + * @rmtoll DCKCFGR2 FMPI2C1SEL LL_RCC_GetFMPI2CClockSource + * @param FMPI2Cx This parameter can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_FMPI2C1_CLKSOURCE_HSI + */ +__STATIC_INLINE uint32_t LL_RCC_GetFMPI2CClockSource(uint32_t FMPI2Cx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, FMPI2Cx)); +} +#endif /* FMPI2C1 */ + +#if defined(LPTIM1) +/** + * @brief Get LPTIMx clock source + * @rmtoll DCKCFGR2 LPTIM1SEL LL_RCC_GetLPTIMClockSource + * @param LPTIMx This parameter can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_PCLK1 + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_HSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSI + * @arg @ref LL_RCC_LPTIM1_CLKSOURCE_LSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, RCC_DCKCFGR2_LPTIM1SEL)); +} +#endif /* LPTIM1 */ + +#if defined(SAI1) +/** + * @brief Get SAIx clock source + * @rmtoll DCKCFGR SAI1SEL LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI2SEL LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI1ASRC LL_RCC_GetSAIClockSource\n + * DCKCFGR SAI1BSRC LL_RCC_GetSAIClockSource + * @param SAIx This parameter can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE (*) + * + * (*) value not defined in all devices. + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI2_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_A_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_SAI1_B_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, SAIx) >> 16U | SAIx); +} +#endif /* SAI1 */ + +#if defined(RCC_DCKCFGR_SDIOSEL) || defined(RCC_DCKCFGR2_SDIOSEL) +/** + * @brief Get SDIOx clock source + * @rmtoll DCKCFGR SDIOSEL LL_RCC_GetSDIOClockSource\n + * DCKCFGR2 SDIOSEL LL_RCC_GetSDIOClockSource + * @param SDIOx This parameter can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SDIO_CLKSOURCE_PLL48CLK + * @arg @ref LL_RCC_SDIO_CLKSOURCE_SYSCLK + */ +__STATIC_INLINE uint32_t LL_RCC_GetSDIOClockSource(uint32_t SDIOx) +{ +#if defined(RCC_DCKCFGR_SDIOSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, SDIOx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, SDIOx)); +#endif /* RCC_DCKCFGR_SDIOSEL */ +} +#endif /* RCC_DCKCFGR_SDIOSEL || RCC_DCKCFGR2_SDIOSEL */ + +#if defined(RCC_DCKCFGR_CK48MSEL) || defined(RCC_DCKCFGR2_CK48MSEL) +/** + * @brief Get 48Mhz domain clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetCK48MClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetCK48MClockSource + * @param CK48Mx This parameter can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLL + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_CK48M_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetCK48MClockSource(uint32_t CK48Mx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, CK48Mx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, CK48Mx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} + +#if defined(RNG) +/** + * @brief Get RNGx clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetRNGClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetRNGClockSource + * @param RNGx This parameter can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLL + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_RNG_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetRNGClockSource(uint32_t RNGx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RNGx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, RNGx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* RNG */ + +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +/** + * @brief Get USBx clock source + * @rmtoll DCKCFGR CK48MSEL LL_RCC_GetUSBClockSource\n + * DCKCFGR2 CK48MSEL LL_RCC_GetUSBClockSource + * @param USBx This parameter can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_USB_CLKSOURCE_PLL + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLSAI (*) + * @arg @ref LL_RCC_USB_CLKSOURCE_PLLI2S (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetUSBClockSource(uint32_t USBx) +{ +#if defined(RCC_DCKCFGR_CK48MSEL) + return (uint32_t)(READ_BIT(RCC->DCKCFGR, USBx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, USBx)); +#endif /* RCC_DCKCFGR_CK48MSEL */ +} +#endif /* USB_OTG_FS || USB_OTG_HS */ +#endif /* RCC_DCKCFGR_CK48MSEL || RCC_DCKCFGR2_CK48MSEL */ + +#if defined(CEC) +/** + * @brief Get CEC Clock Source + * @rmtoll DCKCFGR2 CECSEL LL_RCC_GetCECClockSource + * @param CECx This parameter can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_CEC_CLKSOURCE_HSI_DIV488 + * @arg @ref LL_RCC_CEC_CLKSOURCE_LSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetCECClockSource(uint32_t CECx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, CECx)); +} +#endif /* CEC */ + +/** + * @brief Get I2S Clock Source + * @rmtoll CFGR I2SSRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2SSRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2S1SRC LL_RCC_GetI2SClockSource\n + * DCKCFGR I2S2SRC LL_RCC_GetI2SClockSource + * @param I2Sx This parameter can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE + * @arg @ref LL_RCC_I2S2_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PIN + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S1_CLKSOURCE_PLLSRC (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLI2S (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PIN (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLL (*) + * @arg @ref LL_RCC_I2S2_CLKSOURCE_PLLSRC (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetI2SClockSource(uint32_t I2Sx) +{ +#if defined(RCC_CFGR_I2SSRC) + return (uint32_t)(READ_BIT(RCC->CFGR, I2Sx)); +#else + return (uint32_t)(READ_BIT(RCC->DCKCFGR, I2Sx) >> 16U | I2Sx); +#endif /* RCC_CFGR_I2SSRC */ +} + +#if defined(DFSDM1_Channel0) +/** + * @brief Get DFSDM Audio Clock Source + * @rmtoll DCKCFGR CKDFSDM1ASEL LL_RCC_GetDFSDMAudioClockSource\n + * DCKCFGR CKDFSDM2ASEL LL_RCC_GetDFSDMAudioClockSource + * @param DFSDMx This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_I2S2 + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S1 (*) + * @arg @ref LL_RCC_DFSDM2_AUDIO_CLKSOURCE_I2S2 (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetDFSDMAudioClockSource(uint32_t DFSDMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DFSDMx) << 16U | DFSDMx); +} + +/** + * @brief Get DFSDM Audio Clock Source + * @rmtoll DCKCFGR CKDFSDM1SEL LL_RCC_GetDFSDMClockSource + * @param DFSDMx This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE (*) + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2 + * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_PCLK2 (*) + * @arg @ref LL_RCC_DFSDM2_CLKSOURCE_SYSCLK (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t DFSDMx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DFSDMx)); +} +#endif /* DFSDM1_Channel0 */ + +#if defined(SPDIFRX) +/** + * @brief Get SPDIFRX clock source + * @rmtoll DCKCFGR2 SPDIFRXSEL LL_RCC_GetSPDIFRXClockSource + * @param SPDIFRXx This parameter can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLL + * @arg @ref LL_RCC_SPDIFRX1_CLKSOURCE_PLLI2S + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSPDIFRXClockSource(uint32_t SPDIFRXx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR2, SPDIFRXx)); +} +#endif /* SPDIFRX */ + +#if defined(DSI) +/** + * @brief Get DSI Clock Source + * @rmtoll DCKCFGR DSISEL LL_RCC_GetDSIClockSource + * @param DSIx This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + */ +__STATIC_INLINE uint32_t LL_RCC_GetDSIClockSource(uint32_t DSIx) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, DSIx)); +} +#endif /* DSI */ + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_RTC RTC + * @{ + */ + +/** + * @brief Set RTC Clock Source + * @note Once the RTC clock source has been selected, it cannot be changed anymore unless + * the Backup domain is reset, or unless a failure is detected on LSE (LSECSSD is + * set). The BDRST bit can be used to reset them. + * @rmtoll BDCR RTCSEL LL_RCC_SetRTCClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI + * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRTCClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source); +} + +/** + * @brief Get RTC Clock Source + * @rmtoll BDCR RTCSEL LL_RCC_GetRTCClockSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RTC_CLKSOURCE_NONE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSE + * @arg @ref LL_RCC_RTC_CLKSOURCE_LSI + * @arg @ref LL_RCC_RTC_CLKSOURCE_HSE + */ +__STATIC_INLINE uint32_t LL_RCC_GetRTCClockSource(void) +{ + return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)); +} + +/** + * @brief Enable RTC + * @rmtoll BDCR RTCEN LL_RCC_EnableRTC + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableRTC(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN); +} + +/** + * @brief Disable RTC + * @rmtoll BDCR RTCEN LL_RCC_DisableRTC + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableRTC(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_RTCEN); +} + +/** + * @brief Check if RTC has been enabled or not + * @rmtoll BDCR RTCEN LL_RCC_IsEnabledRTC + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledRTC(void) +{ + return (READ_BIT(RCC->BDCR, RCC_BDCR_RTCEN) == (RCC_BDCR_RTCEN)); +} + +/** + * @brief Force the Backup domain reset + * @rmtoll BDCR BDRST LL_RCC_ForceBackupDomainReset + * @retval None + */ +__STATIC_INLINE void LL_RCC_ForceBackupDomainReset(void) +{ + SET_BIT(RCC->BDCR, RCC_BDCR_BDRST); +} + +/** + * @brief Release the Backup domain reset + * @rmtoll BDCR BDRST LL_RCC_ReleaseBackupDomainReset + * @retval None + */ +__STATIC_INLINE void LL_RCC_ReleaseBackupDomainReset(void) +{ + CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST); +} + +/** + * @brief Set HSE Prescalers for RTC Clock + * @rmtoll CFGR RTCPRE LL_RCC_SetRTC_HSEPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_RTC_NOCLOCK + * @arg @ref LL_RCC_RTC_HSE_DIV_2 + * @arg @ref LL_RCC_RTC_HSE_DIV_3 + * @arg @ref LL_RCC_RTC_HSE_DIV_4 + * @arg @ref LL_RCC_RTC_HSE_DIV_5 + * @arg @ref LL_RCC_RTC_HSE_DIV_6 + * @arg @ref LL_RCC_RTC_HSE_DIV_7 + * @arg @ref LL_RCC_RTC_HSE_DIV_8 + * @arg @ref LL_RCC_RTC_HSE_DIV_9 + * @arg @ref LL_RCC_RTC_HSE_DIV_10 + * @arg @ref LL_RCC_RTC_HSE_DIV_11 + * @arg @ref LL_RCC_RTC_HSE_DIV_12 + * @arg @ref LL_RCC_RTC_HSE_DIV_13 + * @arg @ref LL_RCC_RTC_HSE_DIV_14 + * @arg @ref LL_RCC_RTC_HSE_DIV_15 + * @arg @ref LL_RCC_RTC_HSE_DIV_16 + * @arg @ref LL_RCC_RTC_HSE_DIV_17 + * @arg @ref LL_RCC_RTC_HSE_DIV_18 + * @arg @ref LL_RCC_RTC_HSE_DIV_19 + * @arg @ref LL_RCC_RTC_HSE_DIV_20 + * @arg @ref LL_RCC_RTC_HSE_DIV_21 + * @arg @ref LL_RCC_RTC_HSE_DIV_22 + * @arg @ref LL_RCC_RTC_HSE_DIV_23 + * @arg @ref LL_RCC_RTC_HSE_DIV_24 + * @arg @ref LL_RCC_RTC_HSE_DIV_25 + * @arg @ref LL_RCC_RTC_HSE_DIV_26 + * @arg @ref LL_RCC_RTC_HSE_DIV_27 + * @arg @ref LL_RCC_RTC_HSE_DIV_28 + * @arg @ref LL_RCC_RTC_HSE_DIV_29 + * @arg @ref LL_RCC_RTC_HSE_DIV_30 + * @arg @ref LL_RCC_RTC_HSE_DIV_31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetRTC_HSEPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->CFGR, RCC_CFGR_RTCPRE, Prescaler); +} + +/** + * @brief Get HSE Prescalers for RTC Clock + * @rmtoll CFGR RTCPRE LL_RCC_GetRTC_HSEPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_RTC_NOCLOCK + * @arg @ref LL_RCC_RTC_HSE_DIV_2 + * @arg @ref LL_RCC_RTC_HSE_DIV_3 + * @arg @ref LL_RCC_RTC_HSE_DIV_4 + * @arg @ref LL_RCC_RTC_HSE_DIV_5 + * @arg @ref LL_RCC_RTC_HSE_DIV_6 + * @arg @ref LL_RCC_RTC_HSE_DIV_7 + * @arg @ref LL_RCC_RTC_HSE_DIV_8 + * @arg @ref LL_RCC_RTC_HSE_DIV_9 + * @arg @ref LL_RCC_RTC_HSE_DIV_10 + * @arg @ref LL_RCC_RTC_HSE_DIV_11 + * @arg @ref LL_RCC_RTC_HSE_DIV_12 + * @arg @ref LL_RCC_RTC_HSE_DIV_13 + * @arg @ref LL_RCC_RTC_HSE_DIV_14 + * @arg @ref LL_RCC_RTC_HSE_DIV_15 + * @arg @ref LL_RCC_RTC_HSE_DIV_16 + * @arg @ref LL_RCC_RTC_HSE_DIV_17 + * @arg @ref LL_RCC_RTC_HSE_DIV_18 + * @arg @ref LL_RCC_RTC_HSE_DIV_19 + * @arg @ref LL_RCC_RTC_HSE_DIV_20 + * @arg @ref LL_RCC_RTC_HSE_DIV_21 + * @arg @ref LL_RCC_RTC_HSE_DIV_22 + * @arg @ref LL_RCC_RTC_HSE_DIV_23 + * @arg @ref LL_RCC_RTC_HSE_DIV_24 + * @arg @ref LL_RCC_RTC_HSE_DIV_25 + * @arg @ref LL_RCC_RTC_HSE_DIV_26 + * @arg @ref LL_RCC_RTC_HSE_DIV_27 + * @arg @ref LL_RCC_RTC_HSE_DIV_28 + * @arg @ref LL_RCC_RTC_HSE_DIV_29 + * @arg @ref LL_RCC_RTC_HSE_DIV_30 + * @arg @ref LL_RCC_RTC_HSE_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_GetRTC_HSEPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_RTCPRE)); +} + +/** + * @} + */ + +#if defined(RCC_DCKCFGR_TIMPRE) +/** @defgroup RCC_LL_EF_TIM_CLOCK_PRESCALER TIM + * @{ + */ + +/** + * @brief Set Timers Clock Prescalers + * @rmtoll DCKCFGR TIMPRE LL_RCC_SetTIMPrescaler + * @param Prescaler This parameter can be one of the following values: + * @arg @ref LL_RCC_TIM_PRESCALER_TWICE + * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetTIMPrescaler(uint32_t Prescaler) +{ + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_TIMPRE, Prescaler); +} + +/** + * @brief Get Timers Clock Prescalers + * @rmtoll DCKCFGR TIMPRE LL_RCC_GetTIMPrescaler + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_TIM_PRESCALER_TWICE + * @arg @ref LL_RCC_TIM_PRESCALER_FOUR_TIMES + */ +__STATIC_INLINE uint32_t LL_RCC_GetTIMPrescaler(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_TIMPRE)); +} + +/** + * @} + */ +#endif /* RCC_DCKCFGR_TIMPRE */ + +/** @defgroup RCC_LL_EF_PLL PLL + * @{ + */ + +/** + * @brief Enable PLL + * @rmtoll CR PLLON LL_RCC_PLL_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLON); +} + +/** + * @brief Disable PLL + * @note Cannot be disabled if the PLL clock is used as the system clock + * @rmtoll CR PLLON LL_RCC_PLL_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON); +} + +/** + * @brief Check if PLL Ready + * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)); +} + +/** + * @brief Configure PLL used for SYSCLK Domain + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLL is disabled + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SYS\n + * PLLCFGR PLLP LL_RCC_PLL_ConfigDomain_SYS + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLP_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + * @arg @ref LL_RCC_PLLR_DIV_2 (*) + * @arg @ref LL_RCC_PLLR_DIV_3 (*) + * @arg @ref LL_RCC_PLLR_DIV_4 (*) + * @arg @ref LL_RCC_PLLR_DIV_5 (*) + * @arg @ref LL_RCC_PLLR_DIV_6 (*) + * @arg @ref LL_RCC_PLLR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP_R) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos); + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLP, PLLP_R); +#if defined(RCC_PLLR_SYSCLK_SUPPORT) + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLR, PLLP_R); +#endif /* RCC_PLLR_SYSCLK_SUPPORT */ +} + +/** + * @brief Configure PLL used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLL is disabled + * @note This can be selected for USB, RNG, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_48M\n + * PLLCFGR PLLQ LL_RCC_PLL_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLQ, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLQ); +} + +#if defined(DSI) +/** + * @brief Configure PLL used for DSI clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for DSI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_DSI\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_DSI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_DSI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* DSI */ + +#if defined(RCC_PLLR_I2S_CLKSOURCE_SUPPORT) +/** + * @brief Configure PLL used for I2S clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for I2S + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_I2S\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_I2S + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_I2S(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* RCC_PLLR_I2S_CLKSOURCE_SUPPORT */ + +#if defined(SPDIFRX) +/** + * @brief Configure PLL used for SPDIFRX clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for SPDIFRX + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SPDIFRX + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SPDIFRX(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +} +#endif /* SPDIFRX */ + +#if defined(RCC_PLLCFGR_PLLR) +#if defined(SAI1) +/** + * @brief Configure PLL used for SAI clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI are disabled + * @note PLLN/PLLR can be written only when PLL is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SAI\n + * PLLCFGR PLLR LL_RCC_PLL_ConfigDomain_SAI\n + * DCKCFGR PLLDIVR LL_RCC_PLL_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + * @param PLLDIVR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +#if defined(RCC_DCKCFGR_PLLDIVR) +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR, uint32_t PLLDIVR) +#else +__STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +#endif /* RCC_DCKCFGR_PLLDIVR */ +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM | RCC_PLLCFGR_PLLN | RCC_PLLCFGR_PLLR, + Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLR); +#if defined(RCC_DCKCFGR_PLLDIVR) + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR, PLLDIVR); +#endif /* RCC_DCKCFGR_PLLDIVR */ +} +#endif /* SAI1 */ +#endif /* RCC_PLLCFGR_PLLR */ + +/** + * @brief Configure PLL clock source + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_SetMainSource + * @param PLLSource This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PLLSource); +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); +} + +/** + * @brief Get Main PLL multiplication factor for VCO + * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN + * @retval Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); +} + +/** + * @brief Get Main PLL division factor for PLLP + * @rmtoll PLLCFGR PLLP LL_RCC_PLL_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLP_DIV_2 + * @arg @ref LL_RCC_PLLP_DIV_4 + * @arg @ref LL_RCC_PLLP_DIV_6 + * @arg @ref LL_RCC_PLLP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP)); +} + +/** + * @brief Get Main PLL division factor for PLLQ + * @note used for PLL48MCLK selected for USB, RNG, SDIO (48 MHz clock) + * @rmtoll PLLCFGR PLLQ LL_RCC_PLL_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLQ_DIV_2 + * @arg @ref LL_RCC_PLLQ_DIV_3 + * @arg @ref LL_RCC_PLLQ_DIV_4 + * @arg @ref LL_RCC_PLLQ_DIV_5 + * @arg @ref LL_RCC_PLLQ_DIV_6 + * @arg @ref LL_RCC_PLLQ_DIV_7 + * @arg @ref LL_RCC_PLLQ_DIV_8 + * @arg @ref LL_RCC_PLLQ_DIV_9 + * @arg @ref LL_RCC_PLLQ_DIV_10 + * @arg @ref LL_RCC_PLLQ_DIV_11 + * @arg @ref LL_RCC_PLLQ_DIV_12 + * @arg @ref LL_RCC_PLLQ_DIV_13 + * @arg @ref LL_RCC_PLLQ_DIV_14 + * @arg @ref LL_RCC_PLLQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ)); +} + +#if defined(RCC_PLLCFGR_PLLR) +/** + * @brief Get Main PLL division factor for PLLR + * @note used for PLLCLK (system clock) + * @rmtoll PLLCFGR PLLR LL_RCC_PLL_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLR_DIV_2 + * @arg @ref LL_RCC_PLLR_DIV_3 + * @arg @ref LL_RCC_PLLR_DIV_4 + * @arg @ref LL_RCC_PLLR_DIV_5 + * @arg @ref LL_RCC_PLLR_DIV_6 + * @arg @ref LL_RCC_PLLR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR)); +} +#endif /* RCC_PLLCFGR_PLLR */ + +#if defined(RCC_DCKCFGR_PLLDIVR) +/** + * @brief Get Main PLL division factor for PLLDIVR + * @note used for PLLSAICLK (SAI1 and SAI2 clock) + * @rmtoll DCKCFGR PLLDIVR LL_RCC_PLL_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLDIVR_DIV_1 + * @arg @ref LL_RCC_PLLDIVR_DIV_2 + * @arg @ref LL_RCC_PLLDIVR_DIV_3 + * @arg @ref LL_RCC_PLLDIVR_DIV_4 + * @arg @ref LL_RCC_PLLDIVR_DIV_5 + * @arg @ref LL_RCC_PLLDIVR_DIV_6 + * @arg @ref LL_RCC_PLLDIVR_DIV_7 + * @arg @ref LL_RCC_PLLDIVR_DIV_8 + * @arg @ref LL_RCC_PLLDIVR_DIV_9 + * @arg @ref LL_RCC_PLLDIVR_DIV_10 + * @arg @ref LL_RCC_PLLDIVR_DIV_11 + * @arg @ref LL_RCC_PLLDIVR_DIV_12 + * @arg @ref LL_RCC_PLLDIVR_DIV_13 + * @arg @ref LL_RCC_PLLDIVR_DIV_14 + * @arg @ref LL_RCC_PLLDIVR_DIV_15 + * @arg @ref LL_RCC_PLLDIVR_DIV_16 + * @arg @ref LL_RCC_PLLDIVR_DIV_17 + * @arg @ref LL_RCC_PLLDIVR_DIV_18 + * @arg @ref LL_RCC_PLLDIVR_DIV_19 + * @arg @ref LL_RCC_PLLDIVR_DIV_20 + * @arg @ref LL_RCC_PLLDIVR_DIV_21 + * @arg @ref LL_RCC_PLLDIVR_DIV_22 + * @arg @ref LL_RCC_PLLDIVR_DIV_23 + * @arg @ref LL_RCC_PLLDIVR_DIV_24 + * @arg @ref LL_RCC_PLLDIVR_DIV_25 + * @arg @ref LL_RCC_PLLDIVR_DIV_26 + * @arg @ref LL_RCC_PLLDIVR_DIV_27 + * @arg @ref LL_RCC_PLLDIVR_DIV_28 + * @arg @ref LL_RCC_PLLDIVR_DIV_29 + * @arg @ref LL_RCC_PLLDIVR_DIV_30 + * @arg @ref LL_RCC_PLLDIVR_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLDIVR)); +} +#endif /* RCC_DCKCFGR_PLLDIVR */ + +/** + * @brief Get Division factor for the main PLL and other PLL + * @rmtoll PLLCFGR PLLM LL_RCC_PLL_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 + * @arg @ref LL_RCC_PLLM_DIV_10 + * @arg @ref LL_RCC_PLLM_DIV_11 + * @arg @ref LL_RCC_PLLM_DIV_12 + * @arg @ref LL_RCC_PLLM_DIV_13 + * @arg @ref LL_RCC_PLLM_DIV_14 + * @arg @ref LL_RCC_PLLM_DIV_15 + * @arg @ref LL_RCC_PLLM_DIV_16 + * @arg @ref LL_RCC_PLLM_DIV_17 + * @arg @ref LL_RCC_PLLM_DIV_18 + * @arg @ref LL_RCC_PLLM_DIV_19 + * @arg @ref LL_RCC_PLLM_DIV_20 + * @arg @ref LL_RCC_PLLM_DIV_21 + * @arg @ref LL_RCC_PLLM_DIV_22 + * @arg @ref LL_RCC_PLLM_DIV_23 + * @arg @ref LL_RCC_PLLM_DIV_24 + * @arg @ref LL_RCC_PLLM_DIV_25 + * @arg @ref LL_RCC_PLLM_DIV_26 + * @arg @ref LL_RCC_PLLM_DIV_27 + * @arg @ref LL_RCC_PLLM_DIV_28 + * @arg @ref LL_RCC_PLLM_DIV_29 + * @arg @ref LL_RCC_PLLM_DIV_30 + * @arg @ref LL_RCC_PLLM_DIV_31 + * @arg @ref LL_RCC_PLLM_DIV_32 + * @arg @ref LL_RCC_PLLM_DIV_33 + * @arg @ref LL_RCC_PLLM_DIV_34 + * @arg @ref LL_RCC_PLLM_DIV_35 + * @arg @ref LL_RCC_PLLM_DIV_36 + * @arg @ref LL_RCC_PLLM_DIV_37 + * @arg @ref LL_RCC_PLLM_DIV_38 + * @arg @ref LL_RCC_PLLM_DIV_39 + * @arg @ref LL_RCC_PLLM_DIV_40 + * @arg @ref LL_RCC_PLLM_DIV_41 + * @arg @ref LL_RCC_PLLM_DIV_42 + * @arg @ref LL_RCC_PLLM_DIV_43 + * @arg @ref LL_RCC_PLLM_DIV_44 + * @arg @ref LL_RCC_PLLM_DIV_45 + * @arg @ref LL_RCC_PLLM_DIV_46 + * @arg @ref LL_RCC_PLLM_DIV_47 + * @arg @ref LL_RCC_PLLM_DIV_48 + * @arg @ref LL_RCC_PLLM_DIV_49 + * @arg @ref LL_RCC_PLLM_DIV_50 + * @arg @ref LL_RCC_PLLM_DIV_51 + * @arg @ref LL_RCC_PLLM_DIV_52 + * @arg @ref LL_RCC_PLLM_DIV_53 + * @arg @ref LL_RCC_PLLM_DIV_54 + * @arg @ref LL_RCC_PLLM_DIV_55 + * @arg @ref LL_RCC_PLLM_DIV_56 + * @arg @ref LL_RCC_PLLM_DIV_57 + * @arg @ref LL_RCC_PLLM_DIV_58 + * @arg @ref LL_RCC_PLLM_DIV_59 + * @arg @ref LL_RCC_PLLM_DIV_60 + * @arg @ref LL_RCC_PLLM_DIV_61 + * @arg @ref LL_RCC_PLLM_DIV_62 + * @arg @ref LL_RCC_PLLM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +} + +/** + * @brief Configure Spread Spectrum used for PLL + * @note These bits must be written before enabling PLL + * @rmtoll SSCGR MODPER LL_RCC_PLL_ConfigSpreadSpectrum\n + * SSCGR INCSTEP LL_RCC_PLL_ConfigSpreadSpectrum\n + * SSCGR SPREADSEL LL_RCC_PLL_ConfigSpreadSpectrum + * @param Mod Between Min_Data=0 and Max_Data=8191 + * @param Inc Between Min_Data=0 and Max_Data=32767 + * @param Sel This parameter can be one of the following values: + * @arg @ref LL_RCC_SPREAD_SELECT_CENTER + * @arg @ref LL_RCC_SPREAD_SELECT_DOWN + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_ConfigSpreadSpectrum(uint32_t Mod, uint32_t Inc, uint32_t Sel) +{ + MODIFY_REG(RCC->SSCGR, RCC_SSCGR_MODPER | RCC_SSCGR_INCSTEP | RCC_SSCGR_SPREADSEL, Mod | (Inc << RCC_SSCGR_INCSTEP_Pos) | Sel); +} + +/** + * @brief Get Spread Spectrum Modulation Period for PLL + * @rmtoll SSCGR MODPER LL_RCC_PLL_GetPeriodModulation + * @retval Between Min_Data=0 and Max_Data=8191 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetPeriodModulation(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_MODPER)); +} + +/** + * @brief Get Spread Spectrum Incrementation Step for PLL + * @note Must be written before enabling PLL + * @rmtoll SSCGR INCSTEP LL_RCC_PLL_GetStepIncrementation + * @retval Between Min_Data=0 and Max_Data=32767 + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetStepIncrementation(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_INCSTEP) >> RCC_SSCGR_INCSTEP_Pos); +} + +/** + * @brief Get Spread Spectrum Selection for PLL + * @note Must be written before enabling PLL + * @rmtoll SSCGR SPREADSEL LL_RCC_PLL_GetSpreadSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SPREAD_SELECT_CENTER + * @arg @ref LL_RCC_SPREAD_SELECT_DOWN + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetSpreadSelection(void) +{ + return (uint32_t)(READ_BIT(RCC->SSCGR, RCC_SSCGR_SPREADSEL)); +} + +/** + * @brief Enable Spread Spectrum for PLL. + * @rmtoll SSCGR SSCGEN LL_RCC_PLL_SpreadSpectrum_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SpreadSpectrum_Enable(void) +{ + SET_BIT(RCC->SSCGR, RCC_SSCGR_SSCGEN); +} + +/** + * @brief Disable Spread Spectrum for PLL. + * @rmtoll SSCGR SSCGEN LL_RCC_PLL_SpreadSpectrum_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SpreadSpectrum_Disable(void) +{ + CLEAR_BIT(RCC->SSCGR, RCC_SSCGR_SSCGEN); +} + +/** + * @} + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** @defgroup RCC_LL_EF_PLLI2S PLLI2S + * @{ + */ + +/** + * @brief Enable PLLI2S + * @rmtoll CR PLLI2SON LL_RCC_PLLI2S_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLI2SON); +} + +/** + * @brief Disable PLLI2S + * @rmtoll CR PLLI2SON LL_RCC_PLLI2S_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLI2SON); +} + +/** + * @brief Check if PLLI2S Ready + * @rmtoll CR PLLI2SRDY LL_RCC_PLLI2S_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) == (RCC_CR_PLLI2SRDY)); +} + +#if (defined(RCC_DCKCFGR_PLLI2SDIVQ) || defined(RCC_DCKCFGR_PLLI2SDIVR)) +/** + * @brief Configure PLLI2S used for SAI domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ/PLLR can be written only when PLLI2S is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_ConfigDomain_SAI\n + * PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_ConfigDomain_SAI\n + * DCKCFGR PLLI2SDIVQ LL_RCC_PLLI2S_ConfigDomain_SAI\n + * DCKCFGR PLLI2SDIVR LL_RCC_PLLI2S_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SR_DIV_7 (*) + * + * (*) value not defined in all devices. + * @param PLLDIVQ_R This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 (*) + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 (*) + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ_R, uint32_t PLLDIVQ_R) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos); +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SQ, PLLQ_R); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ, PLLDIVQ_R); +#else + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SR, PLLQ_R); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR, PLLDIVQ_R); +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ +} +#endif /* RCC_DCKCFGR_PLLI2SDIVQ && RCC_DCKCFGR_PLLI2SDIVR */ + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) && !defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Configure PLLI2S used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLLI2S is disabled + * @note This can be selected for RNG, USB, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_48M\n + * PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SQ, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLQ); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SQ && !RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(SPDIFRX) +/** + * @brief Configure PLLI2S used for SPDIFRX domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLLI2S is disabled + * @note This can be selected for SPDIFRX + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_SPDIFRX\n + * PLLI2SCFGR PLLI2SP LL_RCC_PLLI2S_ConfigDomain_SPDIFRX + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_SPDIFRX(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SP, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLP); +} +#endif /* SPDIFRX */ + +/** + * @brief Configure PLLI2S used for I2S1 domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLR can be written only when PLLI2S is disabled + * @note This can be selected for I2S + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLCFGR PLLM LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_ConfigDomain_I2S\n + * PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_ConfigDomain_I2S + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + * @param PLLN Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLI2S_ConfigDomain_I2S(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + __IO uint32_t *pReg = (__IO uint32_t *)((uint32_t)((uint32_t)(&RCC->PLLCFGR) + (Source & 0x80U))); + MODIFY_REG(*pReg, RCC_PLLCFGR_PLLSRC, (Source & (~0x80U))); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ + MODIFY_REG(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN | RCC_PLLI2SCFGR_PLLI2SR, PLLN << RCC_PLLI2SCFGR_PLLI2SN_Pos | PLLR); +} + +/** + * @brief Get I2SPLL multiplication factor for VCO + * @rmtoll PLLI2SCFGR PLLI2SN LL_RCC_PLLI2S_GetN + * @retval Between 50/192(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); +} + +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) +/** + * @brief Get I2SPLL division factor for PLLI2SQ + * @rmtoll PLLI2SCFGR PLLI2SQ LL_RCC_PLLI2S_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SQ)); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + +/** + * @brief Get I2SPLL division factor for PLLI2SR + * @note used for PLLI2SCLK (I2S clock) + * @rmtoll PLLI2SCFGR PLLI2SR LL_RCC_PLLI2S_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SR_DIV_2 + * @arg @ref LL_RCC_PLLI2SR_DIV_3 + * @arg @ref LL_RCC_PLLI2SR_DIV_4 + * @arg @ref LL_RCC_PLLI2SR_DIV_5 + * @arg @ref LL_RCC_PLLI2SR_DIV_6 + * @arg @ref LL_RCC_PLLI2SR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SR)); +} + +#if defined(RCC_PLLI2SCFGR_PLLI2SP) +/** + * @brief Get I2SPLL division factor for PLLI2SP + * @note used for PLLSPDIFRXCLK (SPDIFRX clock) + * @rmtoll PLLI2SCFGR PLLI2SP LL_RCC_PLLI2S_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SP_DIV_2 + * @arg @ref LL_RCC_PLLI2SP_DIV_4 + * @arg @ref LL_RCC_PLLI2SP_DIV_6 + * @arg @ref LL_RCC_PLLI2SP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SP)); +} +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVQ) +/** + * @brief Get I2SPLL division factor for PLLI2SDIVQ + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLI2SDIVQ LL_RCC_PLLI2S_GetDIVQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLI2SDIVQ_DIV_32 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDIVQ(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVQ)); +} +#endif /* RCC_DCKCFGR_PLLI2SDIVQ */ + +#if defined(RCC_DCKCFGR_PLLI2SDIVR) +/** + * @brief Get I2SPLL division factor for PLLI2SDIVR + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLI2SDIVR LL_RCC_PLLI2S_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_1 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_2 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_3 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_4 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_5 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_6 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_7 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_8 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_9 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_10 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_11 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_12 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_13 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_14 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_15 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_16 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_17 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_18 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_19 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_20 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_21 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_22 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_23 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_24 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_25 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_26 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_27 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_28 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_29 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_30 + * @arg @ref LL_RCC_PLLI2SDIVR_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLI2SDIVR)); +} +#endif /* RCC_DCKCFGR_PLLI2SDIVR */ + +/** + * @brief Get division factor for PLLI2S input clock + * @rmtoll PLLCFGR PLLM LL_RCC_PLLI2S_GetDivider\n + * PLLI2SCFGR PLLI2SM LL_RCC_PLLI2S_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLI2SM_DIV_2 + * @arg @ref LL_RCC_PLLI2SM_DIV_3 + * @arg @ref LL_RCC_PLLI2SM_DIV_4 + * @arg @ref LL_RCC_PLLI2SM_DIV_5 + * @arg @ref LL_RCC_PLLI2SM_DIV_6 + * @arg @ref LL_RCC_PLLI2SM_DIV_7 + * @arg @ref LL_RCC_PLLI2SM_DIV_8 + * @arg @ref LL_RCC_PLLI2SM_DIV_9 + * @arg @ref LL_RCC_PLLI2SM_DIV_10 + * @arg @ref LL_RCC_PLLI2SM_DIV_11 + * @arg @ref LL_RCC_PLLI2SM_DIV_12 + * @arg @ref LL_RCC_PLLI2SM_DIV_13 + * @arg @ref LL_RCC_PLLI2SM_DIV_14 + * @arg @ref LL_RCC_PLLI2SM_DIV_15 + * @arg @ref LL_RCC_PLLI2SM_DIV_16 + * @arg @ref LL_RCC_PLLI2SM_DIV_17 + * @arg @ref LL_RCC_PLLI2SM_DIV_18 + * @arg @ref LL_RCC_PLLI2SM_DIV_19 + * @arg @ref LL_RCC_PLLI2SM_DIV_20 + * @arg @ref LL_RCC_PLLI2SM_DIV_21 + * @arg @ref LL_RCC_PLLI2SM_DIV_22 + * @arg @ref LL_RCC_PLLI2SM_DIV_23 + * @arg @ref LL_RCC_PLLI2SM_DIV_24 + * @arg @ref LL_RCC_PLLI2SM_DIV_25 + * @arg @ref LL_RCC_PLLI2SM_DIV_26 + * @arg @ref LL_RCC_PLLI2SM_DIV_27 + * @arg @ref LL_RCC_PLLI2SM_DIV_28 + * @arg @ref LL_RCC_PLLI2SM_DIV_29 + * @arg @ref LL_RCC_PLLI2SM_DIV_30 + * @arg @ref LL_RCC_PLLI2SM_DIV_31 + * @arg @ref LL_RCC_PLLI2SM_DIV_32 + * @arg @ref LL_RCC_PLLI2SM_DIV_33 + * @arg @ref LL_RCC_PLLI2SM_DIV_34 + * @arg @ref LL_RCC_PLLI2SM_DIV_35 + * @arg @ref LL_RCC_PLLI2SM_DIV_36 + * @arg @ref LL_RCC_PLLI2SM_DIV_37 + * @arg @ref LL_RCC_PLLI2SM_DIV_38 + * @arg @ref LL_RCC_PLLI2SM_DIV_39 + * @arg @ref LL_RCC_PLLI2SM_DIV_40 + * @arg @ref LL_RCC_PLLI2SM_DIV_41 + * @arg @ref LL_RCC_PLLI2SM_DIV_42 + * @arg @ref LL_RCC_PLLI2SM_DIV_43 + * @arg @ref LL_RCC_PLLI2SM_DIV_44 + * @arg @ref LL_RCC_PLLI2SM_DIV_45 + * @arg @ref LL_RCC_PLLI2SM_DIV_46 + * @arg @ref LL_RCC_PLLI2SM_DIV_47 + * @arg @ref LL_RCC_PLLI2SM_DIV_48 + * @arg @ref LL_RCC_PLLI2SM_DIV_49 + * @arg @ref LL_RCC_PLLI2SM_DIV_50 + * @arg @ref LL_RCC_PLLI2SM_DIV_51 + * @arg @ref LL_RCC_PLLI2SM_DIV_52 + * @arg @ref LL_RCC_PLLI2SM_DIV_53 + * @arg @ref LL_RCC_PLLI2SM_DIV_54 + * @arg @ref LL_RCC_PLLI2SM_DIV_55 + * @arg @ref LL_RCC_PLLI2SM_DIV_56 + * @arg @ref LL_RCC_PLLI2SM_DIV_57 + * @arg @ref LL_RCC_PLLI2SM_DIV_58 + * @arg @ref LL_RCC_PLLI2SM_DIV_59 + * @arg @ref LL_RCC_PLLI2SM_DIV_60 + * @arg @ref LL_RCC_PLLI2SM_DIV_61 + * @arg @ref LL_RCC_PLLI2SM_DIV_62 + * @arg @ref LL_RCC_PLLI2SM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetDivider(void) +{ +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + return (uint32_t)(READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SM)); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLI2S_GetMainSource\n + * PLLI2SCFGR PLLI2SSRC LL_RCC_PLLI2S_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @arg @ref LL_RCC_PLLI2SSOURCE_PIN (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLI2S_GetMainSource(void) +{ +#if defined(RCC_PLLI2SCFGR_PLLI2SSRC) + uint32_t pllsrc = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC); + uint32_t plli2sssrc0 = READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SSRC); + uint32_t plli2sssrc1 = READ_BIT(RCC->PLLI2SCFGR, RCC_PLLI2SCFGR_PLLI2SSRC) >> 15U; + return (uint32_t)(pllsrc | plli2sssrc0 | plli2sssrc1); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); +#endif /* RCC_PLLI2SCFGR_PLLI2SSRC */ +} + +/** + * @} + */ +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** @defgroup RCC_LL_EF_PLLSAI PLLSAI + * @{ + */ + +/** + * @brief Enable PLLSAI + * @rmtoll CR PLLSAION LL_RCC_PLLSAI_Enable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_Enable(void) +{ + SET_BIT(RCC->CR, RCC_CR_PLLSAION); +} + +/** + * @brief Disable PLLSAI + * @rmtoll CR PLLSAION LL_RCC_PLLSAI_Disable + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_Disable(void) +{ + CLEAR_BIT(RCC->CR, RCC_CR_PLLSAION); +} + +/** + * @brief Check if PLLSAI Ready + * @rmtoll CR PLLSAIRDY LL_RCC_PLLSAI_IsReady + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_IsReady(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_PLLSAIRDY) == (RCC_CR_PLLSAIRDY)); +} + +/** + * @brief Configure PLLSAI used for SAI domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLQ can be written only when PLLSAI is disabled + * @note This can be selected for SAI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_SAI\n + * PLLSAICFGR PLLSAIQ LL_RCC_PLLSAI_ConfigDomain_SAI\n + * DCKCFGR PLLSAIDIVQ LL_RCC_PLLSAI_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + * @param PLLDIVQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ, uint32_t PLLDIVQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIQ, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLQ); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ, PLLDIVQ); +} + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Configure PLLSAI used for 48Mhz domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLP can be written only when PLLSAI is disabled + * @note This can be selected for USB, RNG, SDIO + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_48M\n + * PLLSAICFGR PLLSAIP LL_RCC_PLLSAI_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 50 and 432 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM, PLLM); +#else + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, PLLM); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIP, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLP); +} +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +#if defined(LTDC) +/** + * @brief Configure PLLSAI used for LTDC domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLI2S and PLLSAI(*) are disabled + * @note PLLN/PLLR can be written only when PLLSAI is disabled + * @note This can be selected for LTDC + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLCFGR PLLM LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * PLLSAICFGR PLLSAIR LL_RCC_PLLSAI_ConfigDomain_LTDC\n + * DCKCFGR PLLSAIDIVR LL_RCC_PLLSAI_ConfigDomain_LTDC + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + * @param PLLN Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + * @param PLLDIVR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI_ConfigDomain_LTDC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR, uint32_t PLLDIVR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); + MODIFY_REG(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIR, PLLN << RCC_PLLSAICFGR_PLLSAIN_Pos | PLLR); + MODIFY_REG(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR, PLLDIVR); +} +#endif /* LTDC */ + +/** + * @brief Get division factor for PLLSAI input clock + * @rmtoll PLLCFGR PLLM LL_RCC_PLLSAI_GetDivider\n + * PLLSAICFGR PLLSAIM LL_RCC_PLLSAI_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIM_DIV_2 + * @arg @ref LL_RCC_PLLSAIM_DIV_3 + * @arg @ref LL_RCC_PLLSAIM_DIV_4 + * @arg @ref LL_RCC_PLLSAIM_DIV_5 + * @arg @ref LL_RCC_PLLSAIM_DIV_6 + * @arg @ref LL_RCC_PLLSAIM_DIV_7 + * @arg @ref LL_RCC_PLLSAIM_DIV_8 + * @arg @ref LL_RCC_PLLSAIM_DIV_9 + * @arg @ref LL_RCC_PLLSAIM_DIV_10 + * @arg @ref LL_RCC_PLLSAIM_DIV_11 + * @arg @ref LL_RCC_PLLSAIM_DIV_12 + * @arg @ref LL_RCC_PLLSAIM_DIV_13 + * @arg @ref LL_RCC_PLLSAIM_DIV_14 + * @arg @ref LL_RCC_PLLSAIM_DIV_15 + * @arg @ref LL_RCC_PLLSAIM_DIV_16 + * @arg @ref LL_RCC_PLLSAIM_DIV_17 + * @arg @ref LL_RCC_PLLSAIM_DIV_18 + * @arg @ref LL_RCC_PLLSAIM_DIV_19 + * @arg @ref LL_RCC_PLLSAIM_DIV_20 + * @arg @ref LL_RCC_PLLSAIM_DIV_21 + * @arg @ref LL_RCC_PLLSAIM_DIV_22 + * @arg @ref LL_RCC_PLLSAIM_DIV_23 + * @arg @ref LL_RCC_PLLSAIM_DIV_24 + * @arg @ref LL_RCC_PLLSAIM_DIV_25 + * @arg @ref LL_RCC_PLLSAIM_DIV_26 + * @arg @ref LL_RCC_PLLSAIM_DIV_27 + * @arg @ref LL_RCC_PLLSAIM_DIV_28 + * @arg @ref LL_RCC_PLLSAIM_DIV_29 + * @arg @ref LL_RCC_PLLSAIM_DIV_30 + * @arg @ref LL_RCC_PLLSAIM_DIV_31 + * @arg @ref LL_RCC_PLLSAIM_DIV_32 + * @arg @ref LL_RCC_PLLSAIM_DIV_33 + * @arg @ref LL_RCC_PLLSAIM_DIV_34 + * @arg @ref LL_RCC_PLLSAIM_DIV_35 + * @arg @ref LL_RCC_PLLSAIM_DIV_36 + * @arg @ref LL_RCC_PLLSAIM_DIV_37 + * @arg @ref LL_RCC_PLLSAIM_DIV_38 + * @arg @ref LL_RCC_PLLSAIM_DIV_39 + * @arg @ref LL_RCC_PLLSAIM_DIV_40 + * @arg @ref LL_RCC_PLLSAIM_DIV_41 + * @arg @ref LL_RCC_PLLSAIM_DIV_42 + * @arg @ref LL_RCC_PLLSAIM_DIV_43 + * @arg @ref LL_RCC_PLLSAIM_DIV_44 + * @arg @ref LL_RCC_PLLSAIM_DIV_45 + * @arg @ref LL_RCC_PLLSAIM_DIV_46 + * @arg @ref LL_RCC_PLLSAIM_DIV_47 + * @arg @ref LL_RCC_PLLSAIM_DIV_48 + * @arg @ref LL_RCC_PLLSAIM_DIV_49 + * @arg @ref LL_RCC_PLLSAIM_DIV_50 + * @arg @ref LL_RCC_PLLSAIM_DIV_51 + * @arg @ref LL_RCC_PLLSAIM_DIV_52 + * @arg @ref LL_RCC_PLLSAIM_DIV_53 + * @arg @ref LL_RCC_PLLSAIM_DIV_54 + * @arg @ref LL_RCC_PLLSAIM_DIV_55 + * @arg @ref LL_RCC_PLLSAIM_DIV_56 + * @arg @ref LL_RCC_PLLSAIM_DIV_57 + * @arg @ref LL_RCC_PLLSAIM_DIV_58 + * @arg @ref LL_RCC_PLLSAIM_DIV_59 + * @arg @ref LL_RCC_PLLSAIM_DIV_60 + * @arg @ref LL_RCC_PLLSAIM_DIV_61 + * @arg @ref LL_RCC_PLLSAIM_DIV_62 + * @arg @ref LL_RCC_PLLSAIM_DIV_63 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDivider(void) +{ +#if defined(RCC_PLLSAICFGR_PLLSAIM) + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIM)); +#else + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM)); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +} + +/** + * @brief Get SAIPLL multiplication factor for VCO + * @rmtoll PLLSAICFGR PLLSAIN LL_RCC_PLLSAI_GetN + * @retval Between 49/50(*) and 432 + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetN(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); +} + +/** + * @brief Get SAIPLL division factor for PLLSAIQ + * @rmtoll PLLSAICFGR PLLSAIQ LL_RCC_PLLSAI_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIQ_DIV_15 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIQ)); +} + +#if defined(RCC_PLLSAICFGR_PLLSAIR) +/** + * @brief Get SAIPLL division factor for PLLSAIR + * @note used for PLLSAICLK (SAI clock) + * @rmtoll PLLSAICFGR PLLSAIR LL_RCC_PLLSAI_GetR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIR_DIV_2 + * @arg @ref LL_RCC_PLLSAIR_DIV_3 + * @arg @ref LL_RCC_PLLSAIR_DIV_4 + * @arg @ref LL_RCC_PLLSAIR_DIV_5 + * @arg @ref LL_RCC_PLLSAIR_DIV_6 + * @arg @ref LL_RCC_PLLSAIR_DIV_7 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetR(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIR)); +} +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + +#if defined(RCC_PLLSAICFGR_PLLSAIP) +/** + * @brief Get SAIPLL division factor for PLLSAIP + * @note used for PLL48MCLK (48M domain clock) + * @rmtoll PLLSAICFGR PLLSAIP LL_RCC_PLLSAI_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIP_DIV_2 + * @arg @ref LL_RCC_PLLSAIP_DIV_4 + * @arg @ref LL_RCC_PLLSAIP_DIV_6 + * @arg @ref LL_RCC_PLLSAIP_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAICFGR, RCC_PLLSAICFGR_PLLSAIP)); +} +#endif /* RCC_PLLSAICFGR_PLLSAIP */ + +/** + * @brief Get SAIPLL division factor for PLLSAIDIVQ + * @note used PLLSAICLK selected (SAI clock) + * @rmtoll DCKCFGR PLLSAIDIVQ LL_RCC_PLLSAI_GetDIVQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_1 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_3 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_5 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_6 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_7 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_9 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_10 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_11 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_12 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_13 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_14 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_15 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_16 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_17 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_18 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_19 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_20 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_21 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_22 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_23 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_24 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_25 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_26 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_27 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_28 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_29 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_30 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_31 + * @arg @ref LL_RCC_PLLSAIDIVQ_DIV_32 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDIVQ(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVQ)); +} + +#if defined(RCC_DCKCFGR_PLLSAIDIVR) +/** + * @brief Get SAIPLL division factor for PLLSAIDIVR + * @note used for LTDC domain clock + * @rmtoll DCKCFGR PLLSAIDIVR LL_RCC_PLLSAI_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAIDIVR_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->DCKCFGR, RCC_DCKCFGR_PLLSAIDIVR)); +} +#endif /* RCC_DCKCFGR_PLLSAIDIVR */ + +/** + * @} + */ +#endif /* RCC_PLLSAI_SUPPORT */ + +/** @defgroup RCC_LL_EF_FLAG_Management FLAG Management + * @{ + */ + +/** + * @brief Clear LSI ready interrupt flag + * @rmtoll CIR LSIRDYC LL_RCC_ClearFlag_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_LSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC); +} + +/** + * @brief Clear LSE ready interrupt flag + * @rmtoll CIR LSERDYC LL_RCC_ClearFlag_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_LSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSERDYC); +} + +/** + * @brief Clear HSI ready interrupt flag + * @rmtoll CIR HSIRDYC LL_RCC_ClearFlag_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSIRDYC); +} + +/** + * @brief Clear HSE ready interrupt flag + * @rmtoll CIR HSERDYC LL_RCC_ClearFlag_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSERDYC); +} + +/** + * @brief Clear PLL ready interrupt flag + * @rmtoll CIR PLLRDYC LL_RCC_ClearFlag_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLRDYC); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Clear PLLI2S ready interrupt flag + * @rmtoll CIR PLLI2SRDYC LL_RCC_ClearFlag_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLI2SRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYC); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Clear PLLSAI ready interrupt flag + * @rmtoll CIR PLLSAIRDYC LL_RCC_ClearFlag_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_PLLSAIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYC); +} + +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Clear Clock security system interrupt flag + * @rmtoll CIR CSSC LL_RCC_ClearFlag_HSECSS + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearFlag_HSECSS(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_CSSC); +} + +/** + * @brief Check if LSI ready interrupt occurred or not + * @rmtoll CIR LSIRDYF LL_RCC_IsActiveFlag_LSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYF) == (RCC_CIR_LSIRDYF)); +} + +/** + * @brief Check if LSE ready interrupt occurred or not + * @rmtoll CIR LSERDYF LL_RCC_IsActiveFlag_LSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYF) == (RCC_CIR_LSERDYF)); +} + +/** + * @brief Check if HSI ready interrupt occurred or not + * @rmtoll CIR HSIRDYF LL_RCC_IsActiveFlag_HSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYF) == (RCC_CIR_HSIRDYF)); +} + +/** + * @brief Check if HSE ready interrupt occurred or not + * @rmtoll CIR HSERDYF LL_RCC_IsActiveFlag_HSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYF) == (RCC_CIR_HSERDYF)); +} + +/** + * @brief Check if PLL ready interrupt occurred or not + * @rmtoll CIR PLLRDYF LL_RCC_IsActiveFlag_PLLRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYF) == (RCC_CIR_PLLRDYF)); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Check if PLLI2S ready interrupt occurred or not + * @rmtoll CIR PLLI2SRDYF LL_RCC_IsActiveFlag_PLLI2SRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLI2SRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYF) == (RCC_CIR_PLLI2SRDYF)); +} +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Check if PLLSAI ready interrupt occurred or not + * @rmtoll CIR PLLSAIRDYF LL_RCC_IsActiveFlag_PLLSAIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PLLSAIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYF) == (RCC_CIR_PLLSAIRDYF)); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Check if Clock security system interrupt occurred or not + * @rmtoll CIR CSSF LL_RCC_IsActiveFlag_HSECSS + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HSECSS(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_CSSF) == (RCC_CIR_CSSF)); +} + +/** + * @brief Check if RCC flag Independent Watchdog reset is set or not. + * @rmtoll CSR IWDGRSTF LL_RCC_IsActiveFlag_IWDGRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_IWDGRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF) == (RCC_CSR_IWDGRSTF)); +} + +/** + * @brief Check if RCC flag Low Power reset is set or not. + * @rmtoll CSR LPWRRSTF LL_RCC_IsActiveFlag_LPWRRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_LPWRRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_LPWRRSTF) == (RCC_CSR_LPWRRSTF)); +} + +/** + * @brief Check if RCC flag Pin reset is set or not. + * @rmtoll CSR PINRSTF LL_RCC_IsActiveFlag_PINRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PINRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_PINRSTF) == (RCC_CSR_PINRSTF)); +} + +/** + * @brief Check if RCC flag POR/PDR reset is set or not. + * @rmtoll CSR PORRSTF LL_RCC_IsActiveFlag_PORRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PORRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_PORRSTF) == (RCC_CSR_PORRSTF)); +} + +/** + * @brief Check if RCC flag Software reset is set or not. + * @rmtoll CSR SFTRSTF LL_RCC_IsActiveFlag_SFTRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SFTRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_SFTRSTF) == (RCC_CSR_SFTRSTF)); +} + +/** + * @brief Check if RCC flag Window Watchdog reset is set or not. + * @rmtoll CSR WWDGRSTF LL_RCC_IsActiveFlag_WWDGRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_WWDGRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_WWDGRSTF) == (RCC_CSR_WWDGRSTF)); +} + +#if defined(RCC_CSR_BORRSTF) +/** + * @brief Check if RCC flag BOR reset is set or not. + * @rmtoll CSR BORRSTF LL_RCC_IsActiveFlag_BORRST + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_BORRST(void) +{ + return (READ_BIT(RCC->CSR, RCC_CSR_BORRSTF) == (RCC_CSR_BORRSTF)); +} +#endif /* RCC_CSR_BORRSTF */ + +/** + * @brief Set RMVF bit to clear the reset flags. + * @rmtoll CSR RMVF LL_RCC_ClearResetFlags + * @retval None + */ +__STATIC_INLINE void LL_RCC_ClearResetFlags(void) +{ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); +} + +/** + * @} + */ + +/** @defgroup RCC_LL_EF_IT_Management IT Management + * @{ + */ + +/** + * @brief Enable LSI ready interrupt + * @rmtoll CIR LSIRDYIE LL_RCC_EnableIT_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_LSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYIE); +} + +/** + * @brief Enable LSE ready interrupt + * @rmtoll CIR LSERDYIE LL_RCC_EnableIT_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_LSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_LSERDYIE); +} + +/** + * @brief Enable HSI ready interrupt + * @rmtoll CIR HSIRDYIE LL_RCC_EnableIT_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSIRDYIE); +} + +/** + * @brief Enable HSE ready interrupt + * @rmtoll CIR HSERDYIE LL_RCC_EnableIT_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_HSERDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_HSERDYIE); +} + +/** + * @brief Enable PLL ready interrupt + * @rmtoll CIR PLLRDYIE LL_RCC_EnableIT_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLRDYIE); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Enable PLLI2S ready interrupt + * @rmtoll CIR PLLI2SRDYIE LL_RCC_EnableIT_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLI2SRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +} +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Enable PLLSAI ready interrupt + * @rmtoll CIR PLLSAIRDYIE LL_RCC_EnableIT_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_EnableIT_PLLSAIRDY(void) +{ + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Disable LSI ready interrupt + * @rmtoll CIR LSIRDYIE LL_RCC_DisableIT_LSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_LSIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE); +} + +/** + * @brief Disable LSE ready interrupt + * @rmtoll CIR LSERDYIE LL_RCC_DisableIT_LSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_LSERDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSERDYIE); +} + +/** + * @brief Disable HSI ready interrupt + * @rmtoll CIR HSIRDYIE LL_RCC_DisableIT_HSIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSIRDYIE); +} + +/** + * @brief Disable HSE ready interrupt + * @rmtoll CIR HSERDYIE LL_RCC_DisableIT_HSERDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_HSERDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_HSERDYIE); +} + +/** + * @brief Disable PLL ready interrupt + * @rmtoll CIR PLLRDYIE LL_RCC_DisableIT_PLLRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLRDYIE); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Disable PLLI2S ready interrupt + * @rmtoll CIR PLLI2SRDYIE LL_RCC_DisableIT_PLLI2SRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLI2SRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Disable PLLSAI ready interrupt + * @rmtoll CIR PLLSAIRDYIE LL_RCC_DisableIT_PLLSAIRDY + * @retval None + */ +__STATIC_INLINE void LL_RCC_DisableIT_PLLSAIRDY(void) +{ + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @brief Checks if LSI ready interrupt source is enabled or disabled. + * @rmtoll CIR LSIRDYIE LL_RCC_IsEnabledIT_LSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSIRDYIE) == (RCC_CIR_LSIRDYIE)); +} + +/** + * @brief Checks if LSE ready interrupt source is enabled or disabled. + * @rmtoll CIR LSERDYIE LL_RCC_IsEnabledIT_LSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_LSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_LSERDYIE) == (RCC_CIR_LSERDYIE)); +} + +/** + * @brief Checks if HSI ready interrupt source is enabled or disabled. + * @rmtoll CIR HSIRDYIE LL_RCC_IsEnabledIT_HSIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSIRDYIE) == (RCC_CIR_HSIRDYIE)); +} + +/** + * @brief Checks if HSE ready interrupt source is enabled or disabled. + * @rmtoll CIR HSERDYIE LL_RCC_IsEnabledIT_HSERDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_HSERDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_HSERDYIE) == (RCC_CIR_HSERDYIE)); +} + +/** + * @brief Checks if PLL ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLRDYIE LL_RCC_IsEnabledIT_PLLRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLRDYIE) == (RCC_CIR_PLLRDYIE)); +} + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Checks if PLLI2S ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLI2SRDYIE LL_RCC_IsEnabledIT_PLLI2SRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLI2SRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE) == (RCC_CIR_PLLI2SRDYIE)); +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Checks if PLLSAI ready interrupt source is enabled or disabled. + * @rmtoll CIR PLLSAIRDYIE LL_RCC_IsEnabledIT_PLLSAIRDY + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_IsEnabledIT_PLLSAIRDY(void) +{ + return (READ_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE) == (RCC_CIR_PLLSAIRDYIE)); +} +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RCC_LL_EF_Init De-initialization function + * @{ + */ +ErrorStatus LL_RCC_DeInit(void); +/** + * @} + */ + +/** @defgroup RCC_LL_EF_Get_Freq Get system and peripherals clocks frequency functions + * @{ + */ +void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks); +#if defined(FMPI2C1) +uint32_t LL_RCC_GetFMPI2CClockFreq(uint32_t FMPI2CxSource); +#endif /* FMPI2C1 */ +#if defined(LPTIM1) +uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource); +#endif /* LPTIM1 */ +#if defined(SAI1) +uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource); +#endif /* SAI1 */ +#if defined(SDIO) +uint32_t LL_RCC_GetSDIOClockFreq(uint32_t SDIOxSource); +#endif /* SDIO */ +#if defined(RNG) +uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource); +#endif /* RNG */ +#if defined(USB_OTG_FS) || defined(USB_OTG_HS) +uint32_t LL_RCC_GetUSBClockFreq(uint32_t USBxSource); +#endif /* USB_OTG_FS || USB_OTG_HS */ +#if defined(DFSDM1_Channel0) +uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource); +uint32_t LL_RCC_GetDFSDMAudioClockFreq(uint32_t DFSDMxSource); +#endif /* DFSDM1_Channel0 */ +uint32_t LL_RCC_GetI2SClockFreq(uint32_t I2SxSource); +#if defined(CEC) +uint32_t LL_RCC_GetCECClockFreq(uint32_t CECxSource); +#endif /* CEC */ +#if defined(LTDC) +uint32_t LL_RCC_GetLTDCClockFreq(uint32_t LTDCxSource); +#endif /* LTDC */ +#if defined(SPDIFRX) +uint32_t LL_RCC_GetSPDIFRXClockFreq(uint32_t SPDIFRXxSource); +#endif /* SPDIFRX */ +#if defined(DSI) +uint32_t LL_RCC_GetDSIClockFreq(uint32_t DSIxSource); +#endif /* DSI */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(RCC) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_RCC_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h new file mode 100644 index 0000000..84ea5c4 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h @@ -0,0 +1,1711 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_system.h + * @author MCD Application Team + * @brief Header file of SYSTEM LL module. + * + ****************************************************************************** + * @attention + * + *Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL SYSTEM driver contains a set of generic APIs that can be + used by user: + (+) Some of the FLASH features need to be handled in the SYSTEM file. + (+) Access to DBGCMU registers + (+) Access to SYSCFG registers + + @endverbatim + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_SYSTEM_H +#define __STM32F4xx_LL_SYSTEM_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (FLASH) || defined (SYSCFG) || defined (DBGMCU) + +/** @defgroup SYSTEM_LL SYSTEM + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Private_Constants SYSTEM Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Exported_Constants SYSTEM Exported Constants + * @{ + */ + +/** @defgroup SYSTEM_LL_EC_REMAP SYSCFG REMAP +* @{ +*/ +#define LL_SYSCFG_REMAP_FLASH (uint32_t)0x00000000 /*!< Main Flash memory mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SYSTEMFLASH SYSCFG_MEMRMP_MEM_MODE_0 /*!< System Flash memory mapped at 0x00000000 */ +#if defined(FSMC_Bank1) +#define LL_SYSCFG_REMAP_FSMC SYSCFG_MEMRMP_MEM_MODE_1 /*!< FSMC(NOR/PSRAM 1 and 2) mapped at 0x00000000 */ +#endif /* FSMC_Bank1 */ +#if defined(FMC_Bank1) +#define LL_SYSCFG_REMAP_FMC SYSCFG_MEMRMP_MEM_MODE_1 /*!< FMC(NOR/PSRAM 1 and 2) mapped at 0x00000000 */ +#define LL_SYSCFG_REMAP_SDRAM SYSCFG_MEMRMP_MEM_MODE_2 /*!< FMC/SDRAM mapped at 0x00000000 */ +#endif /* FMC_Bank1 */ +#define LL_SYSCFG_REMAP_SRAM (SYSCFG_MEMRMP_MEM_MODE_1 | SYSCFG_MEMRMP_MEM_MODE_0) /*!< SRAM1 mapped at 0x00000000 */ + +/** + * @} + */ + +#if defined(SYSCFG_PMC_MII_RMII_SEL) + /** @defgroup SYSTEM_LL_EC_PMC SYSCFG PMC +* @{ +*/ +#define LL_SYSCFG_PMC_ETHMII (uint32_t)0x00000000 /*!< ETH Media MII interface */ +#define LL_SYSCFG_PMC_ETHRMII (uint32_t)SYSCFG_PMC_MII_RMII_SEL /*!< ETH Media RMII interface */ + +/** + * @} + */ +#endif /* SYSCFG_PMC_MII_RMII_SEL */ + + + +#if defined(SYSCFG_MEMRMP_UFB_MODE) +/** @defgroup SYSTEM_LL_EC_BANKMODE SYSCFG BANK MODE + * @{ + */ +#define LL_SYSCFG_BANKMODE_BANK1 (uint32_t)0x00000000 /*!< Flash Bank 1 base address mapped at 0x0800 0000 (AXI) and 0x0020 0000 (TCM) + and Flash Bank 2 base address mapped at 0x0810 0000 (AXI) and 0x0030 0000 (TCM)*/ +#define LL_SYSCFG_BANKMODE_BANK2 SYSCFG_MEMRMP_UFB_MODE /*!< Flash Bank 2 base address mapped at 0x0800 0000 (AXI) and 0x0020 0000(TCM) + and Flash Bank 1 base address mapped at 0x0810 0000 (AXI) and 0x0030 0000(TCM) */ +/** + * @} + */ +#endif /* SYSCFG_MEMRMP_UFB_MODE */ +/** @defgroup SYSTEM_LL_EC_I2C_FASTMODEPLUS SYSCFG I2C FASTMODEPLUS + * @{ + */ +#if defined(SYSCFG_CFGR_FMPI2C1_SCL) +#define LL_SYSCFG_I2C_FASTMODEPLUS_SCL SYSCFG_CFGR_FMPI2C1_SCL /*!< Enable Fast Mode Plus on FMPI2C_SCL pin */ +#define LL_SYSCFG_I2C_FASTMODEPLUS_SDA SYSCFG_CFGR_FMPI2C1_SDA /*!< Enable Fast Mode Plus on FMPI2C_SDA pin*/ +#endif /* SYSCFG_CFGR_FMPI2C1_SCL */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_PORT SYSCFG EXTI PORT + * @{ + */ +#define LL_SYSCFG_EXTI_PORTA (uint32_t)0 /*!< EXTI PORT A */ +#define LL_SYSCFG_EXTI_PORTB (uint32_t)1 /*!< EXTI PORT B */ +#define LL_SYSCFG_EXTI_PORTC (uint32_t)2 /*!< EXTI PORT C */ +#define LL_SYSCFG_EXTI_PORTD (uint32_t)3 /*!< EXTI PORT D */ +#define LL_SYSCFG_EXTI_PORTE (uint32_t)4 /*!< EXTI PORT E */ +#if defined(GPIOF) +#define LL_SYSCFG_EXTI_PORTF (uint32_t)5 /*!< EXTI PORT F */ +#endif /* GPIOF */ +#if defined(GPIOG) +#define LL_SYSCFG_EXTI_PORTG (uint32_t)6 /*!< EXTI PORT G */ +#endif /* GPIOG */ +#define LL_SYSCFG_EXTI_PORTH (uint32_t)7 /*!< EXTI PORT H */ +#if defined(GPIOI) +#define LL_SYSCFG_EXTI_PORTI (uint32_t)8 /*!< EXTI PORT I */ +#endif /* GPIOI */ +#if defined(GPIOJ) +#define LL_SYSCFG_EXTI_PORTJ (uint32_t)9 /*!< EXTI PORT J */ +#endif /* GPIOJ */ +#if defined(GPIOK) +#define LL_SYSCFG_EXTI_PORTK (uint32_t)10 /*!< EXTI PORT k */ +#endif /* GPIOK */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_EXTI_LINE SYSCFG EXTI LINE + * @{ + */ +#define LL_SYSCFG_EXTI_LINE0 (uint32_t)(0x000FU << 16 | 0) /*!< EXTI_POSITION_0 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE1 (uint32_t)(0x00F0U << 16 | 0) /*!< EXTI_POSITION_4 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE2 (uint32_t)(0x0F00U << 16 | 0) /*!< EXTI_POSITION_8 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE3 (uint32_t)(0xF000U << 16 | 0) /*!< EXTI_POSITION_12 | EXTICR[0] */ +#define LL_SYSCFG_EXTI_LINE4 (uint32_t)(0x000FU << 16 | 1) /*!< EXTI_POSITION_0 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE5 (uint32_t)(0x00F0U << 16 | 1) /*!< EXTI_POSITION_4 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE6 (uint32_t)(0x0F00U << 16 | 1) /*!< EXTI_POSITION_8 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE7 (uint32_t)(0xF000U << 16 | 1) /*!< EXTI_POSITION_12 | EXTICR[1] */ +#define LL_SYSCFG_EXTI_LINE8 (uint32_t)(0x000FU << 16 | 2) /*!< EXTI_POSITION_0 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE9 (uint32_t)(0x00F0U << 16 | 2) /*!< EXTI_POSITION_4 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE10 (uint32_t)(0x0F00U << 16 | 2) /*!< EXTI_POSITION_8 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE11 (uint32_t)(0xF000U << 16 | 2) /*!< EXTI_POSITION_12 | EXTICR[2] */ +#define LL_SYSCFG_EXTI_LINE12 (uint32_t)(0x000FU << 16 | 3) /*!< EXTI_POSITION_0 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE13 (uint32_t)(0x00F0U << 16 | 3) /*!< EXTI_POSITION_4 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE14 (uint32_t)(0x0F00U << 16 | 3) /*!< EXTI_POSITION_8 | EXTICR[3] */ +#define LL_SYSCFG_EXTI_LINE15 (uint32_t)(0xF000U << 16 | 3) /*!< EXTI_POSITION_12 | EXTICR[3] */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_TIMBREAK SYSCFG TIMER BREAK + * @{ + */ +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +#define LL_SYSCFG_TIMBREAK_LOCKUP SYSCFG_CFGR2_LOCKUP_LOCK /*!< Enables and locks the LOCKUP output of CortexM4 + with Break Input of TIM1/8 */ +#define LL_SYSCFG_TIMBREAK_PVD SYSCFG_CFGR2_PVD_LOCK /*!< Enables and locks the PVD connection with TIM1/8 Break Input + and also the PVDE and PLS bits of the Power Control Interface */ +#endif /* SYSCFG_CFGR2_CLL */ +/** + * @} + */ + +#if defined(SYSCFG_MCHDLYCR_BSCKSEL) +/** @defgroup SYSTEM_LL_DFSDM_BitStream_ClockSource SYSCFG MCHDLY BCKKSEL + * @{ + */ +#define LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 (uint32_t)0x00000000 +#define LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 SYSCFG_MCHDLYCR_BSCKSEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_MCHDLYEN SYSCFG MCHDLY MCHDLYEN + * @{ + */ +#define LL_SYSCFG_DFSDM1_MCHDLYEN SYSCFG_MCHDLYCR_MCHDLY1EN +#define LL_SYSCFG_DFSDM2_MCHDLYEN SYSCFG_MCHDLYCR_MCHDLY2EN +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_DataIn0_Source SYSCFG MCHDLY DFSDMD0SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_DataIn0 SYSCFG_MCHDLYCR_DFSDM1D0SEL +#define LL_SYSCFG_DFSDM2_DataIn0 SYSCFG_MCHDLYCR_DFSDM2D0SEL + +#define LL_SYSCFG_DFSDM1_DataIn0_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D0SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM1_DataIn0_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D0SEL << 16) | SYSCFG_MCHDLYCR_DFSDM1D0SEL) +#define LL_SYSCFG_DFSDM2_DataIn0_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D0SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM2_DataIn0_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D0SEL << 16) | SYSCFG_MCHDLYCR_DFSDM2D0SEL) +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM_DataIn2_Source SYSCFG MCHDLY DFSDMD2SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_DataIn2 SYSCFG_MCHDLYCR_DFSDM1D2SEL +#define LL_SYSCFG_DFSDM2_DataIn2 SYSCFG_MCHDLYCR_DFSDM2D2SEL + +#define LL_SYSCFG_DFSDM1_DataIn2_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D2SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM1_DataIn2_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM1D2SEL << 16) | SYSCFG_MCHDLYCR_DFSDM1D2SEL) +#define LL_SYSCFG_DFSDM2_DataIn2_PAD (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D2SEL << 16) | 0x00000000) +#define LL_SYSCFG_DFSDM2_DataIn2_DM (uint32_t)((SYSCFG_MCHDLYCR_DFSDM2D2SEL << 16) | SYSCFG_MCHDLYCR_DFSDM2D2SEL) +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_TIM4OC2_BitstreamDistribution SYSCFG MCHDLY DFSDM1CK02SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 SYSCFG_MCHDLYCR_DFSDM1CK02SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_TIM4OC1_BitstreamDistribution SYSCFG MCHDLY DFSDM1CK13SEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 SYSCFG_MCHDLYCR_DFSDM1CK13SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_CLKIN_SourceSelection SYSCFG MCHDLY DFSDMCFG + * @{ + */ +#define LL_SYSCFG_DFSDM1_CKIN_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_CKIN_DM SYSCFG_MCHDLYCR_DFSDM1CFG +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM1_CLKOUT_SourceSelection SYSCFG MCHDLY DFSDM1CKOSEL + * @{ + */ +#define LL_SYSCFG_DFSDM1_CKOUT (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM1_CKOUT_M27 SYSCFG_MCHDLYCR_DFSDM1CKOSEL +/** + * @} + */ + +/** @defgroup SYSTEM_LL_DFSDM2_DataIn4_SourceSelection SYSCFG MCHDLY DFSDM2D4SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_DataIn4_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_DataIn4_DM SYSCFG_MCHDLYCR_DFSDM2D4SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_DataIn6_SourceSelection SYSCFG MCHDLY DFSDM2D6SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_DataIn6_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_DataIn6_DM SYSCFG_MCHDLYCR_DFSDM2D6SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC4_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK04SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 SYSCFG_MCHDLYCR_DFSDM2CK04SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC3_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK15SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 SYSCFG_MCHDLYCR_DFSDM2CK15SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC2_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK26SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 SYSCFG_MCHDLYCR_DFSDM2CK26SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_TIM3OC1_BitstreamDistribution SYSCFG MCHDLY DFSDM2CK37SEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 SYSCFG_MCHDLYCR_DFSDM2CK37SEL +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_CLKIN_SourceSelection SYSCFG MCHDLY DFSDM2CFG + * @{ + */ +#define LL_SYSCFG_DFSDM2_CKIN_PAD (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_CKIN_DM SYSCFG_MCHDLYCR_DFSDM2CFG +/** + * @} + */ +/** @defgroup SYSTEM_LL_DFSDM2_CLKOUT_SourceSelection SYSCFG MCHDLY DFSDM2CKOSEL + * @{ + */ +#define LL_SYSCFG_DFSDM2_CKOUT (uint32_t)0x00000000 +#define LL_SYSCFG_DFSDM2_CKOUT_M27 SYSCFG_MCHDLYCR_DFSDM2CKOSEL +/** + * @} + */ +#endif /* SYSCFG_MCHDLYCR_BSCKSEL */ + +/** @defgroup SYSTEM_LL_EC_TRACE DBGMCU TRACE Pin Assignment + * @{ + */ +#define LL_DBGMCU_TRACE_NONE 0x00000000U /*!< TRACE pins not assigned (default state) */ +#define LL_DBGMCU_TRACE_ASYNCH DBGMCU_CR_TRACE_IOEN /*!< TRACE pin assignment for Asynchronous Mode */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE1 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE_0) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 1 */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE2 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE_1) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 2 */ +#define LL_DBGMCU_TRACE_SYNCH_SIZE4 (DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE) /*!< TRACE pin assignment for Synchronous Mode with a TRACEDATA size of 4 */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_APB1_GRP1_STOP_IP DBGMCU APB1 GRP1 STOP IP + * @{ + */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM2_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM2_STOP DBGMCU_APB1_FZ_DBG_TIM2_STOP /*!< TIM2 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM2_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM3_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM3_STOP DBGMCU_APB1_FZ_DBG_TIM3_STOP /*!< TIM3 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM3_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM4_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM4_STOP DBGMCU_APB1_FZ_DBG_TIM4_STOP /*!< TIM4 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM4_STOP */ +#define LL_DBGMCU_APB1_GRP1_TIM5_STOP DBGMCU_APB1_FZ_DBG_TIM5_STOP /*!< TIM5 counter stopped when core is halted */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM6_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM6_STOP DBGMCU_APB1_FZ_DBG_TIM6_STOP /*!< TIM6 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM6_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM7_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM7_STOP DBGMCU_APB1_FZ_DBG_TIM7_STOP /*!< TIM7 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM7_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM12_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM12_STOP DBGMCU_APB1_FZ_DBG_TIM12_STOP /*!< TIM12 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM12_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM13_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM13_STOP DBGMCU_APB1_FZ_DBG_TIM13_STOP /*!< TIM13 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM13_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_TIM14_STOP) +#define LL_DBGMCU_APB1_GRP1_TIM14_STOP DBGMCU_APB1_FZ_DBG_TIM14_STOP /*!< TIM14 counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_TIM14_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_LPTIM_STOP) +#define LL_DBGMCU_APB1_GRP1_LPTIM_STOP DBGMCU_APB1_FZ_DBG_LPTIM_STOP /*!< LPTIM counter stopped when core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_LPTIM_STOP */ +#define LL_DBGMCU_APB1_GRP1_RTC_STOP DBGMCU_APB1_FZ_DBG_RTC_STOP /*!< RTC counter stopped when core is halted */ +#define LL_DBGMCU_APB1_GRP1_WWDG_STOP DBGMCU_APB1_FZ_DBG_WWDG_STOP /*!< Debug Window Watchdog stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_IWDG_STOP DBGMCU_APB1_FZ_DBG_IWDG_STOP /*!< Debug Independent Watchdog stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_I2C1_STOP DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT /*!< I2C1 SMBUS timeout mode stopped when Core is halted */ +#define LL_DBGMCU_APB1_GRP1_I2C2_STOP DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT /*!< I2C2 SMBUS timeout mode stopped when Core is halted */ +#if defined(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT) +#define LL_DBGMCU_APB1_GRP1_I2C3_STOP DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT /*!< I2C3 SMBUS timeout mode stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT */ +#if defined(DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT) +#define LL_DBGMCU_APB1_GRP1_I2C4_STOP DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT /*!< I2C4 SMBUS timeout mode stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_I2C4_SMBUS_TIMEOUT */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN1_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN1_STOP DBGMCU_APB1_FZ_DBG_CAN1_STOP /*!< CAN1 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN1_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN2_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN2_STOP DBGMCU_APB1_FZ_DBG_CAN2_STOP /*!< CAN2 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN2_STOP */ +#if defined(DBGMCU_APB1_FZ_DBG_CAN3_STOP) +#define LL_DBGMCU_APB1_GRP1_CAN3_STOP DBGMCU_APB1_FZ_DBG_CAN3_STOP /*!< CAN3 debug stopped when Core is halted */ +#endif /* DBGMCU_APB1_FZ_DBG_CAN3_STOP */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_APB2_GRP1_STOP_IP DBGMCU APB2 GRP1 STOP IP + * @{ + */ +#define LL_DBGMCU_APB2_GRP1_TIM1_STOP DBGMCU_APB2_FZ_DBG_TIM1_STOP /*!< TIM1 counter stopped when core is halted */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM8_STOP) +#define LL_DBGMCU_APB2_GRP1_TIM8_STOP DBGMCU_APB2_FZ_DBG_TIM8_STOP /*!< TIM8 counter stopped when core is halted */ +#endif /* DBGMCU_APB2_FZ_DBG_TIM8_STOP */ +#define LL_DBGMCU_APB2_GRP1_TIM9_STOP DBGMCU_APB2_FZ_DBG_TIM9_STOP /*!< TIM9 counter stopped when core is halted */ +#if defined(DBGMCU_APB2_FZ_DBG_TIM10_STOP) +#define LL_DBGMCU_APB2_GRP1_TIM10_STOP DBGMCU_APB2_FZ_DBG_TIM10_STOP /*!< TIM10 counter stopped when core is halted */ +#endif /* DBGMCU_APB2_FZ_DBG_TIM10_STOP */ +#define LL_DBGMCU_APB2_GRP1_TIM11_STOP DBGMCU_APB2_FZ_DBG_TIM11_STOP /*!< TIM11 counter stopped when core is halted */ +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EC_LATENCY FLASH LATENCY + * @{ + */ +#define LL_FLASH_LATENCY_0 FLASH_ACR_LATENCY_0WS /*!< FLASH Zero wait state */ +#define LL_FLASH_LATENCY_1 FLASH_ACR_LATENCY_1WS /*!< FLASH One wait state */ +#define LL_FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two wait states */ +#define LL_FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three wait states */ +#define LL_FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four wait states */ +#define LL_FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH five wait state */ +#define LL_FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH six wait state */ +#define LL_FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH seven wait states */ +#define LL_FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS /*!< FLASH eight wait states */ +#define LL_FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS /*!< FLASH nine wait states */ +#define LL_FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS /*!< FLASH ten wait states */ +#define LL_FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS /*!< FLASH eleven wait states */ +#define LL_FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS /*!< FLASH twelve wait states */ +#define LL_FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS /*!< FLASH thirteen wait states */ +#define LL_FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS /*!< FLASH fourteen wait states */ +#define LL_FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS /*!< FLASH fifteen wait states */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SYSTEM_LL_Exported_Functions SYSTEM Exported Functions + * @{ + */ + +/** @defgroup SYSTEM_LL_EF_SYSCFG SYSCFG + * @{ + */ +/** + * @brief Set memory mapping at address 0x00000000 + * @rmtoll SYSCFG_MEMRMP MEM_MODE LL_SYSCFG_SetRemapMemory + * @param Memory This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_REMAP_FLASH + * @arg @ref LL_SYSCFG_REMAP_SYSTEMFLASH + * @arg @ref LL_SYSCFG_REMAP_SRAM + * @arg @ref LL_SYSCFG_REMAP_FSMC (*) + * @arg @ref LL_SYSCFG_REMAP_FMC (*) + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetRemapMemory(uint32_t Memory) +{ + MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, Memory); +} + +/** + * @brief Get memory mapping at address 0x00000000 + * @rmtoll SYSCFG_MEMRMP MEM_MODE LL_SYSCFG_GetRemapMemory + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_REMAP_FLASH + * @arg @ref LL_SYSCFG_REMAP_SYSTEMFLASH + * @arg @ref LL_SYSCFG_REMAP_SRAM + * @arg @ref LL_SYSCFG_REMAP_FSMC (*) + * @arg @ref LL_SYSCFG_REMAP_FMC (*) + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetRemapMemory(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE)); +} + +#if defined(SYSCFG_MEMRMP_SWP_FMC) +/** + * @brief Enables the FMC Memory Mapping Swapping + * @rmtoll SYSCFG_MEMRMP SWP_FMC LL_SYSCFG_EnableFMCMemorySwapping + * @note SDRAM is accessible at 0x60000000 and NOR/RAM + * is accessible at 0xC0000000 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableFMCMemorySwapping(void) +{ + SET_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWP_FMC_0); +} + +/** + * @brief Disables the FMC Memory Mapping Swapping + * @rmtoll SYSCFG_MEMRMP SWP_FMC LL_SYSCFG_DisableFMCMemorySwapping + * @note SDRAM is accessible at 0xC0000000 (default mapping) + * and NOR/RAM is accessible at 0x60000000 (default mapping) + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableFMCMemorySwapping(void) +{ + CLEAR_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_SWP_FMC); +} + +#endif /* SYSCFG_MEMRMP_SWP_FMC */ +/** + * @brief Enables the Compensation cell Power Down + * @rmtoll SYSCFG_CMPCR CMP_PD LL_SYSCFG_EnableCompensationCell + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableCompensationCell(void) +{ + SET_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_CMP_PD); +} + +/** + * @brief Disables the Compensation cell Power Down + * @rmtoll SYSCFG_CMPCR CMP_PD LL_SYSCFG_DisableCompensationCell + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableCompensationCell(void) +{ + CLEAR_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_CMP_PD); +} + +/** + * @brief Get Compensation Cell ready Flag + * @rmtoll SYSCFG_CMPCR READY LL_SYSCFG_IsActiveFlag_CMPCR + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SYSCFG_IsActiveFlag_CMPCR(void) +{ + return (READ_BIT(SYSCFG->CMPCR, SYSCFG_CMPCR_READY) == (SYSCFG_CMPCR_READY)); +} + +#if defined(SYSCFG_PMC_MII_RMII_SEL) +/** + * @brief Select Ethernet PHY interface + * @rmtoll SYSCFG_PMC MII_RMII_SEL LL_SYSCFG_SetPHYInterface + * @param Interface This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_PMC_ETHMII + * @arg @ref LL_SYSCFG_PMC_ETHRMII + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetPHYInterface(uint32_t Interface) +{ + MODIFY_REG(SYSCFG->PMC, SYSCFG_PMC_MII_RMII_SEL, Interface); +} + +/** + * @brief Get Ethernet PHY interface + * @rmtoll SYSCFG_PMC MII_RMII_SEL LL_SYSCFG_GetPHYInterface + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_PMC_ETHMII + * @arg @ref LL_SYSCFG_PMC_ETHRMII + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetPHYInterface(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->PMC, SYSCFG_PMC_MII_RMII_SEL)); +} +#endif /* SYSCFG_PMC_MII_RMII_SEL */ + + + +#if defined(SYSCFG_MEMRMP_UFB_MODE) +/** + * @brief Select Flash bank mode (Bank flashed at 0x08000000) + * @rmtoll SYSCFG_MEMRMP UFB_MODE LL_SYSCFG_SetFlashBankMode + * @param Bank This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_BANKMODE_BANK1 + * @arg @ref LL_SYSCFG_BANKMODE_BANK2 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetFlashBankMode(uint32_t Bank) +{ + MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_UFB_MODE, Bank); +} + +/** + * @brief Get Flash bank mode (Bank flashed at 0x08000000) + * @rmtoll SYSCFG_MEMRMP UFB_MODE LL_SYSCFG_GetFlashBankMode + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_BANKMODE_BANK1 + * @arg @ref LL_SYSCFG_BANKMODE_BANK2 + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetFlashBankMode(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_UFB_MODE)); +} +#endif /* SYSCFG_MEMRMP_UFB_MODE */ + +#if defined(SYSCFG_CFGR_FMPI2C1_SCL) +/** + * @brief Enable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR FMPI2C1_SCL LL_SYSCFG_EnableFastModePlus\n + * SYSCFG_CFGR FMPI2C1_SDA LL_SYSCFG_EnableFastModePlus + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SCL + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SDA + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_EnableFastModePlus(uint32_t ConfigFastModePlus) +{ + SET_BIT(SYSCFG->CFGR, ConfigFastModePlus); +} + +/** + * @brief Disable the I2C fast mode plus driving capability. + * @rmtoll SYSCFG_CFGR FMPI2C1_SCL LL_SYSCFG_DisableFastModePlus\n + * SYSCFG_CFGR FMPI2C1_SDA LL_SYSCFG_DisableFastModePlus\n + * @param ConfigFastModePlus This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SCL + * @arg @ref LL_SYSCFG_I2C_FASTMODEPLUS_SDA + * (*) value not defined in all devices + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DisableFastModePlus(uint32_t ConfigFastModePlus) +{ + CLEAR_BIT(SYSCFG->CFGR, ConfigFastModePlus); +} +#endif /* SYSCFG_CFGR_FMPI2C1_SCL */ + +/** + * @brief Configure source input for the EXTI external interrupt. + * @rmtoll SYSCFG_EXTICR1 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR2 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR3 EXTIx LL_SYSCFG_SetEXTISource\n + * SYSCFG_EXTICR4 EXTIx LL_SYSCFG_SetEXTISource + * @param Port This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_PORTA + * @arg @ref LL_SYSCFG_EXTI_PORTB + * @arg @ref LL_SYSCFG_EXTI_PORTC + * @arg @ref LL_SYSCFG_EXTI_PORTD + * @arg @ref LL_SYSCFG_EXTI_PORTE + * @arg @ref LL_SYSCFG_EXTI_PORTF (*) + * @arg @ref LL_SYSCFG_EXTI_PORTG (*) + * @arg @ref LL_SYSCFG_EXTI_PORTH + * + * (*) value not defined in all devices + * @param Line This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_LINE0 + * @arg @ref LL_SYSCFG_EXTI_LINE1 + * @arg @ref LL_SYSCFG_EXTI_LINE2 + * @arg @ref LL_SYSCFG_EXTI_LINE3 + * @arg @ref LL_SYSCFG_EXTI_LINE4 + * @arg @ref LL_SYSCFG_EXTI_LINE5 + * @arg @ref LL_SYSCFG_EXTI_LINE6 + * @arg @ref LL_SYSCFG_EXTI_LINE7 + * @arg @ref LL_SYSCFG_EXTI_LINE8 + * @arg @ref LL_SYSCFG_EXTI_LINE9 + * @arg @ref LL_SYSCFG_EXTI_LINE10 + * @arg @ref LL_SYSCFG_EXTI_LINE11 + * @arg @ref LL_SYSCFG_EXTI_LINE12 + * @arg @ref LL_SYSCFG_EXTI_LINE13 + * @arg @ref LL_SYSCFG_EXTI_LINE14 + * @arg @ref LL_SYSCFG_EXTI_LINE15 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetEXTISource(uint32_t Port, uint32_t Line) +{ + MODIFY_REG(SYSCFG->EXTICR[Line & 0xFF], (Line >> 16), Port << POSITION_VAL((Line >> 16))); +} + +/** + * @brief Get the configured defined for specific EXTI Line + * @rmtoll SYSCFG_EXTICR1 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR2 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR3 EXTIx LL_SYSCFG_GetEXTISource\n + * SYSCFG_EXTICR4 EXTIx LL_SYSCFG_GetEXTISource + * @param Line This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_LINE0 + * @arg @ref LL_SYSCFG_EXTI_LINE1 + * @arg @ref LL_SYSCFG_EXTI_LINE2 + * @arg @ref LL_SYSCFG_EXTI_LINE3 + * @arg @ref LL_SYSCFG_EXTI_LINE4 + * @arg @ref LL_SYSCFG_EXTI_LINE5 + * @arg @ref LL_SYSCFG_EXTI_LINE6 + * @arg @ref LL_SYSCFG_EXTI_LINE7 + * @arg @ref LL_SYSCFG_EXTI_LINE8 + * @arg @ref LL_SYSCFG_EXTI_LINE9 + * @arg @ref LL_SYSCFG_EXTI_LINE10 + * @arg @ref LL_SYSCFG_EXTI_LINE11 + * @arg @ref LL_SYSCFG_EXTI_LINE12 + * @arg @ref LL_SYSCFG_EXTI_LINE13 + * @arg @ref LL_SYSCFG_EXTI_LINE14 + * @arg @ref LL_SYSCFG_EXTI_LINE15 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_EXTI_PORTA + * @arg @ref LL_SYSCFG_EXTI_PORTB + * @arg @ref LL_SYSCFG_EXTI_PORTC + * @arg @ref LL_SYSCFG_EXTI_PORTD + * @arg @ref LL_SYSCFG_EXTI_PORTE + * @arg @ref LL_SYSCFG_EXTI_PORTF (*) + * @arg @ref LL_SYSCFG_EXTI_PORTG (*) + * @arg @ref LL_SYSCFG_EXTI_PORTH + * (*) value not defined in all devices + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetEXTISource(uint32_t Line) +{ + return (uint32_t)(READ_BIT(SYSCFG->EXTICR[Line & 0xFF], (Line >> 16)) >> POSITION_VAL(Line >> 16)); +} + +#if defined(SYSCFG_CFGR2_LOCKUP_LOCK) +/** + * @brief Set connections to TIM1/8 break inputs + * @rmtoll SYSCFG_CFGR2 LockUp Lock LL_SYSCFG_SetTIMBreakInputs \n + * SYSCFG_CFGR2 PVD Lock LL_SYSCFG_SetTIMBreakInputs + * @param Break This parameter can be a combination of the following values: + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * @arg @ref LL_SYSCFG_TIMBREAK_PVD + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_SetTIMBreakInputs(uint32_t Break) +{ + MODIFY_REG(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_PVD_LOCK, Break); +} + +/** + * @brief Get connections to TIM1/8 Break inputs + * @rmtoll SYSCFG_CFGR2 LockUp Lock LL_SYSCFG_SetTIMBreakInputs \n + * SYSCFG_CFGR2 PVD Lock LL_SYSCFG_SetTIMBreakInputs + * @retval Returned value can be can be a combination of the following values: + * @arg @ref LL_SYSCFG_TIMBREAK_LOCKUP + * @arg @ref LL_SYSCFG_TIMBREAK_PVD + */ +__STATIC_INLINE uint32_t LL_SYSCFG_GetTIMBreakInputs(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_LOCKUP_LOCK | SYSCFG_CFGR2_PVD_LOCK)); +} +#endif /* SYSCFG_CFGR2_LOCKUP_LOCK */ +#if defined(SYSCFG_MCHDLYCR_BSCKSEL) +/** + * @brief Select the DFSDM2 or TIM2_OC1 as clock source for the bitstream clock. + * @rmtoll SYSCFG_MCHDLYCR BSCKSEL LL_SYSCFG_DFSDM_SetBitstreamClockSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetBitstreamClockSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_BSCKSEL, ClockSource); +} +/** + * @brief Get the DFSDM2 or TIM2_OC1 as clock source for the bitstream clock. + * @rmtoll SYSCFG_MCHDLYCR BSCKSEL LL_SYSCFG_DFSDM_GetBitstreamClockSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_DFSDM2 + * @arg @ref LL_SYSCFG_BITSTREAM_CLOCK_TIM2OC1 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetBitstreamClockSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_BSCKSEL)); +} +/** + * @brief Enables the DFSDM1 or DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLYEN LL_SYSCFG_DFSDM_EnableDelayClock + * @param MCHDLY This parameter can be one of the following values + * @arg @ref LL_SYSCFG_DFSDM1_MCHDLYEN + * @arg @ref LL_SYSCFG_DFSDM2_MCHDLYEN + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_EnableDelayClock(uint32_t MCHDLY) +{ + SET_BIT(SYSCFG->MCHDLYCR, MCHDLY); +} + +/** + * @brief Disables the DFSDM1 or the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY1EN LL_SYSCFG_DFSDM1_DisableDelayClock + * @param MCHDLY This parameter can be one of the following values + * @arg @ref LL_SYSCFG_DFSDM1_MCHDLYEN + * @arg @ref LL_SYSCFG_DFSDM2_MCHDLYEN + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_DisableDelayClock(uint32_t MCHDLY) +{ + CLEAR_BIT(SYSCFG->MCHDLYCR, MCHDLY); +} + +/** + * @brief Select the source for DFSDM1 or DFSDM2 DatIn0 + * @rmtoll SYSCFG_MCHDLYCR DFSDMD0SEL LL_SYSCFG_DFSDM_SetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetDataIn0Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, (Source >> 16), (Source & 0x0000FFFF)); +} +/** + * @brief Get the source for DFSDM1 or DFSDM2 DatIn0. + * @rmtoll SYSCFG_MCHDLYCR DFSDMD0SEL LL_SYSCFG_DFSDM_GetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0 + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn0_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetDataIn0Source(uint32_t Source) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, Source)); +} +/** + * @brief Select the source for DFSDM1 or DFSDM2 DatIn2 + * @rmtoll SYSCFG_MCHDLYCR DFSDMD2SEL LL_SYSCFG_DFSDM_SetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM_SetDataIn2Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, (Source >> 16), (Source & 0x0000FFFF)); +} +/** + * @brief Get the source for DFSDM1 or DFSDM2 DatIn2. + * @rmtoll SYSCFG_MCHDLYCR DFSDMD2SEL LL_SYSCFG_DFSDM_GetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2 + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2 + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM1_DataIn2_DM + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM_GetDataIn2Source(uint32_t Source) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, Source)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM4 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CK02SEL LL_SYSCFG_DFSDM1_SetTIM4OC2BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetTIM4OC2BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK02SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM4 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1D2SEL LL_SYSCFG_DFSDM1_GetTIM4OC2BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC2_CLKIN2 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetTIM4OC2BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK02SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM4 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CK13SEL LL_SYSCFG_DFSDM1_SetTIM4OC1BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetTIM4OC1BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK13SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM4 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM1D2SEL LL_SYSCFG_DFSDM1_GetTIM4OC1BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM1_TIM4OC1_CLKIN3 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetTIM4OC1BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CK13SEL)); +} + +/** + * @brief Select the DFSDM1 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CFG LL_SYSCFG_DFSDM1_SetClockInSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetClockInSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CFG, ClockSource); +} +/** + * @brief GET the DFSDM1 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CFG LL_SYSCFG_DFSDM1_GetClockInSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM1_CKIN_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetClockInSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CFG)); +} + +/** + * @brief Select the DFSDM1 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CKOSEL LL_SYSCFG_DFSDM1_SetClockOutSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM1_SetClockOutSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CKOSEL, ClockSource); +} +/** + * @brief GET the DFSDM1 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM1CKOSEL LL_SYSCFG_DFSDM1_GetClockOutSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT + * @arg @ref LL_SYSCFG_DFSDM1_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM1_GetClockOutSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM1CKOSEL)); +} + +/** + * @brief Enables the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY2EN LL_SYSCFG_DFSDM2_EnableDelayClock + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_EnableDelayClock(void) +{ + SET_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_MCHDLY2EN); +} + +/** + * @brief Disables the DFSDM2 Delay clock + * @rmtoll SYSCFG_MCHDLYCR MCHDLY2EN LL_SYSCFG_DFSDM2_DisableDelayClock + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_DisableDelayClock(void) +{ + CLEAR_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_MCHDLY2EN); +} +/** + * @brief Select the source for DFSDM2 DatIn0 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D0SEL LL_SYSCFG_DFSDM2_SetDataIn0Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn0Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D0SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn0. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D0SEL LL_SYSCFG_DFSDM2_GetDataIn0Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn0_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn0Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D0SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D2SEL LL_SYSCFG_DFSDM2_SetDataIn2Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn2Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D2SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn2. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D2SEL LL_SYSCFG_DFSDM2_GetDataIn2Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn2_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn2Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D2SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D4SEL LL_SYSCFG_DFSDM2_SetDataIn4Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn4Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D4SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn4. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D4SEL LL_SYSCFG_DFSDM2_GetDataIn4Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn4_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn4Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D4SEL)); +} + +/** + * @brief Select the source for DFSDM2 DatIn6 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D6SEL LL_SYSCFG_DFSDM2_SetDataIn6Source + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetDataIn6Source(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D6SEL, Source); +} +/** + * @brief Get the source for DFSDM2 DatIn6. + * @rmtoll SYSCFG_MCHDLYCR DFSDM2D6SEL LL_SYSCFG_DFSDM2_GetDataIn6Source + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_PAD + * @arg @ref LL_SYSCFG_DFSDM2_DataIn6_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetDataIn6Source(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2D6SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_SetTIM3OC4BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC4BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK04SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC4BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN0 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC4_CLKIN4 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC4BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK04SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC3 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK15SEL LL_SYSCFG_DFSDM2_SetTIM3OC3BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC3BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK15SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC4 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC3BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN1 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC3_CLKIN5 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC3BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK15SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK26SEL LL_SYSCFG_DFSDM2_SetTIM3OC2BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC2BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK26SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC2 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK04SEL LL_SYSCFG_DFSDM2_GetTIM3OC2BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN2 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC2_CLKIN6 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC2BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK26SEL)); +} + +/** + * @brief Select the distribution of the bitsream lock gated by TIM3 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK37SEL LL_SYSCFG_DFSDM2_SetTIM3OC1BitStreamDistribution + * @param Source This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetTIM3OC1BitStreamDistribution(uint32_t Source) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK37SEL, Source); +} +/** + * @brief Get the distribution of the bitsream lock gated by TIM3 OC1 + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CK37SEL LL_SYSCFG_DFSDM2_GetTIM3OC1BitStreamDistribution + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN3 + * @arg @ref LL_SYSCFG_DFSDM2_TIM3OC1_CLKIN7 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetTIM3OC1BitStreamDistribution(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CK37SEL)); +} + +/** + * @brief Select the DFSDM2 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CFG LL_SYSCFG_DFSDM2_SetClockInSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_DM + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetClockInSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CFG, ClockSource); +} +/** + * @brief GET the DFSDM2 Clock In + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CFG LL_SYSCFG_DFSDM2_GetClockInSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_PAD + * @arg @ref LL_SYSCFG_DFSDM2_CKIN_DM + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetClockInSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CFG)); +} + +/** + * @brief Select the DFSDM2 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CKOSEL LL_SYSCFG_DFSDM2_SetClockOutSourceSelection + * @param ClockSource This parameter can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE void LL_SYSCFG_DFSDM2_SetClockOutSourceSelection(uint32_t ClockSource) +{ + MODIFY_REG(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CKOSEL, ClockSource); +} +/** + * @brief GET the DFSDM2 Clock Out + * @rmtoll SYSCFG_MCHDLYCR DFSDM2CKOSEL LL_SYSCFG_DFSDM2_GetClockOutSourceSelection + * @retval Returned value can be one of the following values: + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT + * @arg @ref LL_SYSCFG_DFSDM2_CKOUT_M27 + * @retval None + */ +__STATIC_INLINE uint32_t LL_SYSCFG_DFSDM2_GetClockOutSourceSelection(void) +{ + return (uint32_t)(READ_BIT(SYSCFG->MCHDLYCR, SYSCFG_MCHDLYCR_DFSDM2CKOSEL)); +} + +#endif /* SYSCFG_MCHDLYCR_BSCKSEL */ +/** + * @} + */ + + +/** @defgroup SYSTEM_LL_EF_DBGMCU DBGMCU + * @{ + */ + +/** + * @brief Return the device identifier + * @note For STM32F405/407xx and STM32F415/417xx devices, the device ID is 0x413 + * @note For STM32F42xxx and STM32F43xxx devices, the device ID is 0x419 + * @note For STM32F401xx devices, the device ID is 0x423 + * @note For STM32F401xx devices, the device ID is 0x433 + * @note For STM32F411xx devices, the device ID is 0x431 + * @note For STM32F410xx devices, the device ID is 0x458 + * @note For STM32F412xx devices, the device ID is 0x441 + * @note For STM32F413xx and STM32423xx devices, the device ID is 0x463 + * @note For STM32F446xx devices, the device ID is 0x421 + * @note For STM32F469xx and STM32F479xx devices, the device ID is 0x434 + * @rmtoll DBGMCU_IDCODE DEV_ID LL_DBGMCU_GetDeviceID + * @retval Values between Min_Data=0x00 and Max_Data=0xFFF + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetDeviceID(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_DEV_ID)); +} + +/** + * @brief Return the device revision identifier + * @note This field indicates the revision of the device. + For example, it is read as RevA -> 0x1000, Cat 2 revZ -> 0x1001, rev1 -> 0x1003, rev2 ->0x1007, revY -> 0x100F for STM32F405/407xx and STM32F415/417xx devices + For example, it is read as RevA -> 0x1000, Cat 2 revY -> 0x1003, rev1 -> 0x1007, rev3 ->0x2001 for STM32F42xxx and STM32F43xxx devices + For example, it is read as RevZ -> 0x1000, Cat 2 revA -> 0x1001 for STM32F401xB/C devices + For example, it is read as RevA -> 0x1000, Cat 2 revZ -> 0x1001 for STM32F401xD/E devices + For example, it is read as RevA -> 0x1000 for STM32F411xx,STM32F413/423xx,STM32F469/423xx, STM32F446xx and STM32F410xx devices + For example, it is read as RevZ -> 0x1001, Cat 2 revB -> 0x2000, revC -> 0x3000 for STM32F412xx devices + * @rmtoll DBGMCU_IDCODE REV_ID LL_DBGMCU_GetRevisionID + * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetRevisionID(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_REV_ID) >> DBGMCU_IDCODE_REV_ID_Pos); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @rmtoll DBGMCU_CR DBG_SLEEP LL_DBGMCU_EnableDBGSleepMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * @rmtoll DBGMCU_CR DBG_SLEEP LL_DBGMCU_DisableDBGSleepMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * @rmtoll DBGMCU_CR DBG_STOP LL_DBGMCU_EnableDBGStopMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * @rmtoll DBGMCU_CR DBG_STOP LL_DBGMCU_DisableDBGStopMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * @rmtoll DBGMCU_CR DBG_STANDBY LL_DBGMCU_EnableDBGStandbyMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * @rmtoll DBGMCU_CR DBG_STANDBY LL_DBGMCU_DisableDBGStandbyMode + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Set Trace pin assignment control + * @rmtoll DBGMCU_CR TRACE_IOEN LL_DBGMCU_SetTracePinAssignment\n + * DBGMCU_CR TRACE_MODE LL_DBGMCU_SetTracePinAssignment + * @param PinAssignment This parameter can be one of the following values: + * @arg @ref LL_DBGMCU_TRACE_NONE + * @arg @ref LL_DBGMCU_TRACE_ASYNCH + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE1 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE2 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE4 + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_SetTracePinAssignment(uint32_t PinAssignment) +{ + MODIFY_REG(DBGMCU->CR, DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE, PinAssignment); +} + +/** + * @brief Get Trace pin assignment control + * @rmtoll DBGMCU_CR TRACE_IOEN LL_DBGMCU_GetTracePinAssignment\n + * DBGMCU_CR TRACE_MODE LL_DBGMCU_GetTracePinAssignment + * @retval Returned value can be one of the following values: + * @arg @ref LL_DBGMCU_TRACE_NONE + * @arg @ref LL_DBGMCU_TRACE_ASYNCH + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE1 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE2 + * @arg @ref LL_DBGMCU_TRACE_SYNCH_SIZE4 + */ +__STATIC_INLINE uint32_t LL_DBGMCU_GetTracePinAssignment(void) +{ + return (uint32_t)(READ_BIT(DBGMCU->CR, DBGMCU_CR_TRACE_IOEN | DBGMCU_CR_TRACE_MODE)); +} + +/** + * @brief Freeze APB1 peripherals (group1 peripherals) + * @rmtoll DBGMCU_APB1_FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM4_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM5_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM12_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM13_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_LPTIM_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C2_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C3_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C4_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN1_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN2_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN3_STOP LL_DBGMCU_APB1_GRP1_FreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM5_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM12_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM13_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_LPTIM_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_RTC_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_WWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_IWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C2_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN1_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN3_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP1_FreezePeriph(uint32_t Periphs) +{ + SET_BIT(DBGMCU->APB1FZ, Periphs); +} + +/** + * @brief Unfreeze APB1 peripherals (group1 peripherals) + * @rmtoll DBGMCU_APB1_FZ DBG_TIM2_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM3_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM4_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM5_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM6_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM7_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM12_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM13_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_TIM14_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_LPTIM_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_RTC_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_WWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_IWDG_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C1_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C2_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C3_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_I2C4_SMBUS_TIMEOUT LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN1_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN2_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph\n + * DBGMCU_APB1_FZ DBG_CAN3_STOP LL_DBGMCU_APB1_GRP1_UnFreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM5_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM6_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM7_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM12_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM13_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_TIM14_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_LPTIM_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_RTC_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_WWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_IWDG_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C1_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C2_STOP + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C3_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_I2C4_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN1_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN2_STOP (*) + * @arg @ref LL_DBGMCU_APB1_GRP1_CAN3_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB1_GRP1_UnFreezePeriph(uint32_t Periphs) +{ + CLEAR_BIT(DBGMCU->APB1FZ, Periphs); +} + +/** + * @brief Freeze APB2 peripherals + * @rmtoll DBGMCU_APB2_FZ DBG_TIM1_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM8_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM9_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM10_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM11_STOP LL_DBGMCU_APB2_GRP1_FreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM1_STOP + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM8_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM9_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM10_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM11_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB2_GRP1_FreezePeriph(uint32_t Periphs) +{ + SET_BIT(DBGMCU->APB2FZ, Periphs); +} + +/** + * @brief Unfreeze APB2 peripherals + * @rmtoll DBGMCU_APB2_FZ DBG_TIM1_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM8_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM9_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM10_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph\n + * DBGMCU_APB2_FZ DBG_TIM11_STOP LL_DBGMCU_APB2_GRP1_UnFreezePeriph + * @param Periphs This parameter can be a combination of the following values: + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM1_STOP + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM8_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM9_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM10_STOP (*) + * @arg @ref LL_DBGMCU_APB2_GRP1_TIM11_STOP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_DBGMCU_APB2_GRP1_UnFreezePeriph(uint32_t Periphs) +{ + CLEAR_BIT(DBGMCU->APB2FZ, Periphs); +} +/** + * @} + */ + +/** @defgroup SYSTEM_LL_EF_FLASH FLASH + * @{ + */ + +/** + * @brief Set FLASH Latency + * @rmtoll FLASH_ACR LATENCY LL_FLASH_SetLatency + * @param Latency This parameter can be one of the following values: + * @arg @ref LL_FLASH_LATENCY_0 + * @arg @ref LL_FLASH_LATENCY_1 + * @arg @ref LL_FLASH_LATENCY_2 + * @arg @ref LL_FLASH_LATENCY_3 + * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 + * @arg @ref LL_FLASH_LATENCY_6 + * @arg @ref LL_FLASH_LATENCY_7 + * @arg @ref LL_FLASH_LATENCY_8 + * @arg @ref LL_FLASH_LATENCY_9 + * @arg @ref LL_FLASH_LATENCY_10 + * @arg @ref LL_FLASH_LATENCY_11 + * @arg @ref LL_FLASH_LATENCY_12 + * @arg @ref LL_FLASH_LATENCY_13 + * @arg @ref LL_FLASH_LATENCY_14 + * @arg @ref LL_FLASH_LATENCY_15 + * @retval None + */ +__STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency) +{ + MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, Latency); +} + +/** + * @brief Get FLASH Latency + * @rmtoll FLASH_ACR LATENCY LL_FLASH_GetLatency + * @retval Returned value can be one of the following values: + * @arg @ref LL_FLASH_LATENCY_0 + * @arg @ref LL_FLASH_LATENCY_1 + * @arg @ref LL_FLASH_LATENCY_2 + * @arg @ref LL_FLASH_LATENCY_3 + * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 + * @arg @ref LL_FLASH_LATENCY_6 + * @arg @ref LL_FLASH_LATENCY_7 + * @arg @ref LL_FLASH_LATENCY_8 + * @arg @ref LL_FLASH_LATENCY_9 + * @arg @ref LL_FLASH_LATENCY_10 + * @arg @ref LL_FLASH_LATENCY_11 + * @arg @ref LL_FLASH_LATENCY_12 + * @arg @ref LL_FLASH_LATENCY_13 + * @arg @ref LL_FLASH_LATENCY_14 + * @arg @ref LL_FLASH_LATENCY_15 + */ +__STATIC_INLINE uint32_t LL_FLASH_GetLatency(void) +{ + return (uint32_t)(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)); +} + +/** + * @brief Enable Prefetch + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_EnablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnablePrefetch(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_PRFTEN); +} + +/** + * @brief Disable Prefetch + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_DisablePrefetch + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisablePrefetch(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_PRFTEN); +} + +/** + * @brief Check if Prefetch buffer is enabled + * @rmtoll FLASH_ACR PRFTEN LL_FLASH_IsPrefetchEnabled + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_FLASH_IsPrefetchEnabled(void) +{ + return (READ_BIT(FLASH->ACR, FLASH_ACR_PRFTEN) == (FLASH_ACR_PRFTEN)); +} + +/** + * @brief Enable Instruction cache + * @rmtoll FLASH_ACR ICEN LL_FLASH_EnableInstCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableInstCache(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_ICEN); +} + +/** + * @brief Disable Instruction cache + * @rmtoll FLASH_ACR ICEN LL_FLASH_DisableInstCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableInstCache(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_ICEN); +} + +/** + * @brief Enable Data cache + * @rmtoll FLASH_ACR DCEN LL_FLASH_EnableDataCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableDataCache(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_DCEN); +} + +/** + * @brief Disable Data cache + * @rmtoll FLASH_ACR DCEN LL_FLASH_DisableDataCache + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableDataCache(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_DCEN); +} + +/** + * @brief Enable Instruction cache reset + * @note bit can be written only when the instruction cache is disabled + * @rmtoll FLASH_ACR ICRST LL_FLASH_EnableInstCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableInstCacheReset(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_ICRST); +} + +/** + * @brief Disable Instruction cache reset + * @rmtoll FLASH_ACR ICRST LL_FLASH_DisableInstCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableInstCacheReset(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_ICRST); +} + +/** + * @brief Enable Data cache reset + * @note bit can be written only when the data cache is disabled + * @rmtoll FLASH_ACR DCRST LL_FLASH_EnableDataCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_EnableDataCacheReset(void) +{ + SET_BIT(FLASH->ACR, FLASH_ACR_DCRST); +} + +/** + * @brief Disable Data cache reset + * @rmtoll FLASH_ACR DCRST LL_FLASH_DisableDataCacheReset + * @retval None + */ +__STATIC_INLINE void LL_FLASH_DisableDataCacheReset(void) +{ + CLEAR_BIT(FLASH->ACR, FLASH_ACR_DCRST); +} + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined (FLASH) || defined (SYSCFG) || defined (DBGMCU) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_SYSTEM_H */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h new file mode 100644 index 0000000..e07c232 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usart.h @@ -0,0 +1,2521 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_usart.h + * @author MCD Application Team + * @brief Header file of USART LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_USART_H +#define __STM32F4xx_LL_USART_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +#if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5) || defined (UART7) || defined (UART8) || defined (UART9) || defined (UART10) + +/** @defgroup USART_LL USART + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup USART_LL_Private_Constants USART Private Constants + * @{ + */ + +/* Defines used for the bit position in the register and perform offsets*/ +#define USART_POSITION_GTPR_GT USART_GTPR_GT_Pos +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_Private_Macros USART Private Macros + * @{ + */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_ES_INIT USART Exported Init structures + * @{ + */ + +/** + * @brief LL USART Init Structure definition + */ +typedef struct +{ + uint32_t BaudRate; /*!< This field defines expected Usart communication baud rate. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetBaudRate().*/ + + uint32_t DataWidth; /*!< Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref USART_LL_EC_DATAWIDTH. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetDataWidth().*/ + + uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. + This parameter can be a value of @ref USART_LL_EC_STOPBITS. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetStopBitsLength().*/ + + uint32_t Parity; /*!< Specifies the parity mode. + This parameter can be a value of @ref USART_LL_EC_PARITY. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetParity().*/ + + uint32_t TransferDirection; /*!< Specifies whether the Receive and/or Transmit mode is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_DIRECTION. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetTransferDirection().*/ + + uint32_t HardwareFlowControl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_HWCONTROL. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetHWFlowCtrl().*/ + + uint32_t OverSampling; /*!< Specifies whether USART oversampling mode is 16 or 8. + This parameter can be a value of @ref USART_LL_EC_OVERSAMPLING. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetOverSampling().*/ + +} LL_USART_InitTypeDef; + +/** + * @brief LL USART Clock Init Structure definition + */ +typedef struct +{ + uint32_t ClockOutput; /*!< Specifies whether the USART clock is enabled or disabled. + This parameter can be a value of @ref USART_LL_EC_CLOCK. + + USART HW configuration can be modified afterwards using unitary functions + @ref LL_USART_EnableSCLKOutput() or @ref LL_USART_DisableSCLKOutput(). + For more details, refer to description of this function. */ + + uint32_t ClockPolarity; /*!< Specifies the steady state of the serial clock. + This parameter can be a value of @ref USART_LL_EC_POLARITY. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPolarity(). + For more details, refer to description of this function. */ + + uint32_t ClockPhase; /*!< Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref USART_LL_EC_PHASE. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetClockPhase(). + For more details, refer to description of this function. */ + + uint32_t LastBitClockPulse; /*!< Specifies whether the clock pulse corresponding to the last transmitted + data bit (MSB) has to be output on the SCLK pin in synchronous mode. + This parameter can be a value of @ref USART_LL_EC_LASTCLKPULSE. + + USART HW configuration can be modified afterwards using unitary functions @ref LL_USART_SetLastClkPulseOutput(). + For more details, refer to description of this function. */ + +} LL_USART_ClockInitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup USART_LL_Exported_Constants USART Exported Constants + * @{ + */ + +/** @defgroup USART_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_USART_ReadReg function + * @{ + */ +#define LL_USART_SR_PE USART_SR_PE /*!< Parity error flag */ +#define LL_USART_SR_FE USART_SR_FE /*!< Framing error flag */ +#define LL_USART_SR_NE USART_SR_NE /*!< Noise detected flag */ +#define LL_USART_SR_ORE USART_SR_ORE /*!< Overrun error flag */ +#define LL_USART_SR_IDLE USART_SR_IDLE /*!< Idle line detected flag */ +#define LL_USART_SR_RXNE USART_SR_RXNE /*!< Read data register not empty flag */ +#define LL_USART_SR_TC USART_SR_TC /*!< Transmission complete flag */ +#define LL_USART_SR_TXE USART_SR_TXE /*!< Transmit data register empty flag */ +#define LL_USART_SR_LBD USART_SR_LBD /*!< LIN break detection flag */ +#define LL_USART_SR_CTS USART_SR_CTS /*!< CTS flag */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_USART_ReadReg and LL_USART_WriteReg functions + * @{ + */ +#define LL_USART_CR1_IDLEIE USART_CR1_IDLEIE /*!< IDLE interrupt enable */ +#define LL_USART_CR1_RXNEIE USART_CR1_RXNEIE /*!< Read data register not empty interrupt enable */ +#define LL_USART_CR1_TCIE USART_CR1_TCIE /*!< Transmission complete interrupt enable */ +#define LL_USART_CR1_TXEIE USART_CR1_TXEIE /*!< Transmit data register empty interrupt enable */ +#define LL_USART_CR1_PEIE USART_CR1_PEIE /*!< Parity error */ +#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */ +#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ +#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_DIRECTION Communication Direction + * @{ + */ +#define LL_USART_DIRECTION_NONE 0x00000000U /*!< Transmitter and Receiver are disabled */ +#define LL_USART_DIRECTION_RX USART_CR1_RE /*!< Transmitter is disabled and Receiver is enabled */ +#define LL_USART_DIRECTION_TX USART_CR1_TE /*!< Transmitter is enabled and Receiver is disabled */ +#define LL_USART_DIRECTION_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< Transmitter and Receiver are enabled */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_PARITY Parity Control + * @{ + */ +#define LL_USART_PARITY_NONE 0x00000000U /*!< Parity control disabled */ +#define LL_USART_PARITY_EVEN USART_CR1_PCE /*!< Parity control enabled and Even Parity is selected */ +#define LL_USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Parity control enabled and Odd Parity is selected */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_WAKEUP Wakeup + * @{ + */ +#define LL_USART_WAKEUP_IDLELINE 0x00000000U /*!< USART wake up from Mute mode on Idle Line */ +#define LL_USART_WAKEUP_ADDRESSMARK USART_CR1_WAKE /*!< USART wake up from Mute mode on Address Mark */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_DATAWIDTH Datawidth + * @{ + */ +#define LL_USART_DATAWIDTH_8B 0x00000000U /*!< 8 bits word length : Start bit, 8 data bits, n stop bits */ +#define LL_USART_DATAWIDTH_9B USART_CR1_M /*!< 9 bits word length : Start bit, 9 data bits, n stop bits */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_OVERSAMPLING Oversampling + * @{ + */ +#define LL_USART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ +#define LL_USART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_EC_CLOCK Clock Signal + * @{ + */ + +#define LL_USART_CLOCK_DISABLE 0x00000000U /*!< Clock signal not provided */ +#define LL_USART_CLOCK_ENABLE USART_CR2_CLKEN /*!< Clock signal provided */ +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/** @defgroup USART_LL_EC_LASTCLKPULSE Last Clock Pulse + * @{ + */ +#define LL_USART_LASTCLKPULSE_NO_OUTPUT 0x00000000U /*!< The clock pulse of the last data bit is not output to the SCLK pin */ +#define LL_USART_LASTCLKPULSE_OUTPUT USART_CR2_LBCL /*!< The clock pulse of the last data bit is output to the SCLK pin */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_PHASE Clock Phase + * @{ + */ +#define LL_USART_PHASE_1EDGE 0x00000000U /*!< The first clock transition is the first data capture edge */ +#define LL_USART_PHASE_2EDGE USART_CR2_CPHA /*!< The second clock transition is the first data capture edge */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_USART_POLARITY_LOW 0x00000000U /*!< Steady low value on SCLK pin outside transmission window*/ +#define LL_USART_POLARITY_HIGH USART_CR2_CPOL /*!< Steady high value on SCLK pin outside transmission window */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_STOPBITS Stop Bits + * @{ + */ +#define LL_USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< 0.5 stop bit */ +#define LL_USART_STOPBITS_1 0x00000000U /*!< 1 stop bit */ +#define LL_USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< 1.5 stop bits */ +#define LL_USART_STOPBITS_2 USART_CR2_STOP_1 /*!< 2 stop bits */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_HWCONTROL Hardware Control + * @{ + */ +#define LL_USART_HWCONTROL_NONE 0x00000000U /*!< CTS and RTS hardware flow control disabled */ +#define LL_USART_HWCONTROL_RTS USART_CR3_RTSE /*!< RTS output enabled, data is only requested when there is space in the receive buffer */ +#define LL_USART_HWCONTROL_CTS USART_CR3_CTSE /*!< CTS mode enabled, data is only transmitted when the nCTS input is asserted (tied to 0) */ +#define LL_USART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /*!< CTS and RTS hardware flow control enabled */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power + * @{ + */ +#define LL_USART_IRDA_POWER_NORMAL 0x00000000U /*!< IrDA normal power mode */ +#define LL_USART_IRDA_POWER_LOW USART_CR3_IRLP /*!< IrDA low power mode */ +/** + * @} + */ + +/** @defgroup USART_LL_EC_LINBREAK_DETECT LIN Break Detection Length + * @{ + */ +#define LL_USART_LINBREAK_DETECT_10B 0x00000000U /*!< 10-bit break detection method selected */ +#define LL_USART_LINBREAK_DETECT_11B USART_CR2_LBDL /*!< 11-bit break detection method selected */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup USART_LL_Exported_Macros USART Exported Macros + * @{ + */ + +/** @defgroup USART_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in USART register + * @param __INSTANCE__ USART Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_USART_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in USART register + * @param __INSTANCE__ USART Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_USART_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** @defgroup USART_LL_EM_Exported_Macros_Helper Exported_Macros_Helper + * @{ + */ + +/** + * @brief Compute USARTDIV value according to Peripheral Clock and + * expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned) + * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + * @param __BAUDRATE__ Baud rate value to achieve + * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case + */ +#define __LL_USART_DIV_SAMPLING8_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(2*((uint64_t)(__BAUDRATE__))))) +#define __LL_USART_DIVMANT_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__))/100) +#define __LL_USART_DIVFRAQ_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING8_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 8)\ + + 50) / 100) +/* UART BRR = mantissa + overflow + fraction + = (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07) */ +#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ + ((__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0xF8) << 1)) + \ + (__LL_USART_DIVFRAQ_SAMPLING8((__PERIPHCLK__), (__BAUDRATE__)) & 0x07)) + +/** + * @brief Compute USARTDIV value according to Peripheral Clock and + * expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned) + * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + * @param __BAUDRATE__ Baud rate value to achieve + * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case + */ +#define __LL_USART_DIV_SAMPLING16_100(__PERIPHCLK__, __BAUDRATE__) ((uint32_t)((((uint64_t)(__PERIPHCLK__))*25)/(4*((uint64_t)(__BAUDRATE__))))) +#define __LL_USART_DIVMANT_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__))/100) +#define __LL_USART_DIVFRAQ_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) ((((__LL_USART_DIV_SAMPLING16_100((__PERIPHCLK__), (__BAUDRATE__)) - (__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) * 100)) * 16)\ + + 50) / 100) +/* USART BRR = mantissa + overflow + fraction + = (USART DIVMANT << 4) + (USART DIVFRAQ & 0xF0) + (USART DIVFRAQ & 0x0F) */ +#define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (((__LL_USART_DIVMANT_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) << 4) + \ + (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0xF0)) + \ + (__LL_USART_DIVFRAQ_SAMPLING16((__PERIPHCLK__), (__BAUDRATE__)) & 0x0F)) + +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup USART_LL_Exported_Functions USART Exported Functions + * @{ + */ + +/** @defgroup USART_LL_EF_Configuration Configuration functions + * @{ + */ + +/** + * @brief USART Enable + * @rmtoll CR1 UE LL_USART_Enable + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_UE); +} + +/** + * @brief USART Disable (all USART prescalers and outputs are disabled) + * @note When USART is disabled, USART prescalers and outputs are stopped immediately, + * and current operations are discarded. The configuration of the USART is kept, but all the status + * flags, in the USARTx_SR are set to their default values. + * @rmtoll CR1 UE LL_USART_Disable + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_Disable(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_UE); +} + +/** + * @brief Indicate if USART is enabled + * @rmtoll CR1 UE LL_USART_IsEnabled + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); +} + +/** + * @brief Receiver Enable (Receiver is enabled and begins searching for a start bit) + * @rmtoll CR1 RE LL_USART_EnableDirectionRx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDirectionRx(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RE); +} + +/** + * @brief Receiver Disable + * @rmtoll CR1 RE LL_USART_DisableDirectionRx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDirectionRx(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RE); +} + +/** + * @brief Transmitter Enable + * @rmtoll CR1 TE LL_USART_EnableDirectionTx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDirectionTx(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TE); +} + +/** + * @brief Transmitter Disable + * @rmtoll CR1 TE LL_USART_DisableDirectionTx + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDirectionTx(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TE); +} + +/** + * @brief Configure simultaneously enabled/disabled states + * of Transmitter and Receiver + * @rmtoll CR1 RE LL_USART_SetTransferDirection\n + * CR1 TE LL_USART_SetTransferDirection + * @param USARTx USART Instance + * @param TransferDirection This parameter can be one of the following values: + * @arg @ref LL_USART_DIRECTION_NONE + * @arg @ref LL_USART_DIRECTION_RX + * @arg @ref LL_USART_DIRECTION_TX + * @arg @ref LL_USART_DIRECTION_TX_RX + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTransferDirection(USART_TypeDef *USARTx, uint32_t TransferDirection) +{ + ATOMIC_MODIFY_REG(USARTx->CR1, USART_CR1_RE | USART_CR1_TE, TransferDirection); +} + +/** + * @brief Return enabled/disabled states of Transmitter and Receiver + * @rmtoll CR1 RE LL_USART_GetTransferDirection\n + * CR1 TE LL_USART_GetTransferDirection + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DIRECTION_NONE + * @arg @ref LL_USART_DIRECTION_RX + * @arg @ref LL_USART_DIRECTION_TX + * @arg @ref LL_USART_DIRECTION_TX_RX + */ +__STATIC_INLINE uint32_t LL_USART_GetTransferDirection(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_RE | USART_CR1_TE)); +} + +/** + * @brief Configure Parity (enabled/disabled and parity mode if enabled). + * @note This function selects if hardware parity control (generation and detection) is enabled or disabled. + * When the parity control is enabled (Odd or Even), computed parity bit is inserted at the MSB position + * (9th or 8th bit depending on data width) and parity is checked on the received data. + * @rmtoll CR1 PS LL_USART_SetParity\n + * CR1 PCE LL_USART_SetParity + * @param USARTx USART Instance + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + * @retval None + */ +__STATIC_INLINE void LL_USART_SetParity(USART_TypeDef *USARTx, uint32_t Parity) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE, Parity); +} + +/** + * @brief Return Parity configuration (enabled/disabled and parity mode if enabled) + * @rmtoll CR1 PS LL_USART_GetParity\n + * CR1 PCE LL_USART_GetParity + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + */ +__STATIC_INLINE uint32_t LL_USART_GetParity(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE)); +} + +/** + * @brief Set Receiver Wake Up method from Mute mode. + * @rmtoll CR1 WAKE LL_USART_SetWakeUpMethod + * @param USARTx USART Instance + * @param Method This parameter can be one of the following values: + * @arg @ref LL_USART_WAKEUP_IDLELINE + * @arg @ref LL_USART_WAKEUP_ADDRESSMARK + * @retval None + */ +__STATIC_INLINE void LL_USART_SetWakeUpMethod(USART_TypeDef *USARTx, uint32_t Method) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_WAKE, Method); +} + +/** + * @brief Return Receiver Wake Up method from Mute mode + * @rmtoll CR1 WAKE LL_USART_GetWakeUpMethod + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_WAKEUP_IDLELINE + * @arg @ref LL_USART_WAKEUP_ADDRESSMARK + */ +__STATIC_INLINE uint32_t LL_USART_GetWakeUpMethod(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_WAKE)); +} + +/** + * @brief Set Word length (i.e. nb of data bits, excluding start and stop bits) + * @rmtoll CR1 M LL_USART_SetDataWidth + * @param USARTx USART Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * @retval None + */ +__STATIC_INLINE void LL_USART_SetDataWidth(USART_TypeDef *USARTx, uint32_t DataWidth) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_M, DataWidth); +} + +/** + * @brief Return Word length (i.e. nb of data bits, excluding start and stop bits) + * @rmtoll CR1 M LL_USART_GetDataWidth + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + */ +__STATIC_INLINE uint32_t LL_USART_GetDataWidth(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_M)); +} + +/** + * @brief Set Oversampling to 8-bit or 16-bit mode + * @rmtoll CR1 OVER8 LL_USART_SetOverSampling + * @param USARTx USART Instance + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetOverSampling(USART_TypeDef *USARTx, uint32_t OverSampling) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_OVER8, OverSampling); +} + +/** + * @brief Return Oversampling mode + * @rmtoll CR1 OVER8 LL_USART_GetOverSampling + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + */ +__STATIC_INLINE uint32_t LL_USART_GetOverSampling(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR1, USART_CR1_OVER8)); +} + +/** + * @brief Configure if Clock pulse of the last data bit is output to the SCLK pin or not + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 LBCL LL_USART_SetLastClkPulseOutput + * @param USARTx USART Instance + * @param LastBitClockPulse This parameter can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_USART_SetLastClkPulseOutput(USART_TypeDef *USARTx, uint32_t LastBitClockPulse) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_LBCL, LastBitClockPulse); +} + +/** + * @brief Retrieve Clock pulse of the last data bit output configuration + * (Last bit Clock pulse output to the SCLK pin or not) + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 LBCL LL_USART_GetLastClkPulseOutput + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + */ +__STATIC_INLINE uint32_t LL_USART_GetLastClkPulseOutput(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBCL)); +} + +/** + * @brief Select the phase of the clock output on the SCLK pin in synchronous mode + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPHA LL_USART_SetClockPhase + * @param USARTx USART Instance + * @param ClockPhase This parameter can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + * @retval None + */ +__STATIC_INLINE void LL_USART_SetClockPhase(USART_TypeDef *USARTx, uint32_t ClockPhase) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPHA, ClockPhase); +} + +/** + * @brief Return phase of the clock output on the SCLK pin in synchronous mode + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPHA LL_USART_GetClockPhase + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_USART_GetClockPhase(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPHA)); +} + +/** + * @brief Select the polarity of the clock output on the SCLK pin in synchronous mode + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPOL LL_USART_SetClockPolarity + * @param USARTx USART Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_USART_SetClockPolarity(USART_TypeDef *USARTx, uint32_t ClockPolarity) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPOL, ClockPolarity); +} + +/** + * @brief Return polarity of the clock output on the SCLK pin in synchronous mode + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CPOL LL_USART_GetClockPolarity + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_USART_GetClockPolarity(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_CPOL)); +} + +/** + * @brief Configure Clock signal format (Phase Polarity and choice about output of last bit clock pulse) + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clock Phase configuration using @ref LL_USART_SetClockPhase() function + * - Clock Polarity configuration using @ref LL_USART_SetClockPolarity() function + * - Output of Last bit Clock pulse configuration using @ref LL_USART_SetLastClkPulseOutput() function + * @rmtoll CR2 CPHA LL_USART_ConfigClock\n + * CR2 CPOL LL_USART_ConfigClock\n + * CR2 LBCL LL_USART_ConfigClock + * @param USARTx USART Instance + * @param Phase This parameter can be one of the following values: + * @arg @ref LL_USART_PHASE_1EDGE + * @arg @ref LL_USART_PHASE_2EDGE + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_USART_POLARITY_LOW + * @arg @ref LL_USART_POLARITY_HIGH + * @param LBCPOutput This parameter can be one of the following values: + * @arg @ref LL_USART_LASTCLKPULSE_NO_OUTPUT + * @arg @ref LL_USART_LASTCLKPULSE_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, uint32_t Polarity, uint32_t LBCPOutput) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput); +} + +/** + * @brief Enable Clock output on SCLK pin + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_EnableSCLKOutput + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSCLKOutput(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Disable Clock output on SCLK pin + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_DisableSCLKOutput + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSCLKOutput(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Indicate if Clock output on SCLK pin is enabled + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @rmtoll CR2 CLKEN LL_USART_IsEnabledSCLKOutput + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSCLKOutput(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_CLKEN) == (USART_CR2_CLKEN)); +} + +/** + * @brief Set the length of the stop bits + * @rmtoll CR2 STOP LL_USART_SetStopBitsLength + * @param USARTx USART Instance + * @param StopBits This parameter can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetStopBitsLength(USART_TypeDef *USARTx, uint32_t StopBits) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); +} + +/** + * @brief Retrieve the length of the stop bits + * @rmtoll CR2 STOP LL_USART_GetStopBitsLength + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + */ +__STATIC_INLINE uint32_t LL_USART_GetStopBitsLength(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_STOP)); +} + +/** + * @brief Configure Character frame format (Datawidth, Parity control, Stop Bits) + * @note Call of this function is equivalent to following function call sequence : + * - Data Width configuration using @ref LL_USART_SetDataWidth() function + * - Parity Control and mode configuration using @ref LL_USART_SetParity() function + * - Stop bits configuration using @ref LL_USART_SetStopBitsLength() function + * @rmtoll CR1 PS LL_USART_ConfigCharacter\n + * CR1 PCE LL_USART_ConfigCharacter\n + * CR1 M LL_USART_ConfigCharacter\n + * CR2 STOP LL_USART_ConfigCharacter + * @param USARTx USART Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_USART_DATAWIDTH_8B + * @arg @ref LL_USART_DATAWIDTH_9B + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_USART_PARITY_NONE + * @arg @ref LL_USART_PARITY_EVEN + * @arg @ref LL_USART_PARITY_ODD + * @param StopBits This parameter can be one of the following values: + * @arg @ref LL_USART_STOPBITS_0_5 + * @arg @ref LL_USART_STOPBITS_1 + * @arg @ref LL_USART_STOPBITS_1_5 + * @arg @ref LL_USART_STOPBITS_2 + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigCharacter(USART_TypeDef *USARTx, uint32_t DataWidth, uint32_t Parity, + uint32_t StopBits) +{ + MODIFY_REG(USARTx->CR1, USART_CR1_PS | USART_CR1_PCE | USART_CR1_M, Parity | DataWidth); + MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); +} + +/** + * @brief Set Address of the USART node. + * @note This is used in multiprocessor communication during Mute mode or Stop mode, + * for wake up with address mark detection. + * @rmtoll CR2 ADD LL_USART_SetNodeAddress + * @param USARTx USART Instance + * @param NodeAddress 4 bit Address of the USART node. + * @retval None + */ +__STATIC_INLINE void LL_USART_SetNodeAddress(USART_TypeDef *USARTx, uint32_t NodeAddress) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_ADD, (NodeAddress & USART_CR2_ADD)); +} + +/** + * @brief Return 4 bit Address of the USART node as set in ADD field of CR2. + * @note only 4bits (b3-b0) of returned value are relevant (b31-b4 are not relevant) + * @rmtoll CR2 ADD LL_USART_GetNodeAddress + * @param USARTx USART Instance + * @retval Address of the USART node (Value between Min_Data=0 and Max_Data=255) + */ +__STATIC_INLINE uint32_t LL_USART_GetNodeAddress(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_ADD)); +} + +/** + * @brief Enable RTS HW Flow Control + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_EnableRTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableRTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_RTSE); +} + +/** + * @brief Disable RTS HW Flow Control + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_DisableRTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableRTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_RTSE); +} + +/** + * @brief Enable CTS HW Flow Control + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSE LL_USART_EnableCTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableCTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_CTSE); +} + +/** + * @brief Disable CTS HW Flow Control + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSE LL_USART_DisableCTSHWFlowCtrl + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableCTSHWFlowCtrl(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_CTSE); +} + +/** + * @brief Configure HW Flow Control mode (both CTS and RTS) + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_SetHWFlowCtrl\n + * CR3 CTSE LL_USART_SetHWFlowCtrl + * @param USARTx USART Instance + * @param HardwareFlowControl This parameter can be one of the following values: + * @arg @ref LL_USART_HWCONTROL_NONE + * @arg @ref LL_USART_HWCONTROL_RTS + * @arg @ref LL_USART_HWCONTROL_CTS + * @arg @ref LL_USART_HWCONTROL_RTS_CTS + * @retval None + */ +__STATIC_INLINE void LL_USART_SetHWFlowCtrl(USART_TypeDef *USARTx, uint32_t HardwareFlowControl) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl); +} + +/** + * @brief Return HW Flow Control configuration (both CTS and RTS) + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 RTSE LL_USART_GetHWFlowCtrl\n + * CR3 CTSE LL_USART_GetHWFlowCtrl + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_HWCONTROL_NONE + * @arg @ref LL_USART_HWCONTROL_RTS + * @arg @ref LL_USART_HWCONTROL_CTS + * @arg @ref LL_USART_HWCONTROL_RTS_CTS + */ +__STATIC_INLINE uint32_t LL_USART_GetHWFlowCtrl(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE)); +} + +/** + * @brief Enable One bit sampling method + * @rmtoll CR3 ONEBIT LL_USART_EnableOneBitSamp + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableOneBitSamp(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_ONEBIT); +} + +/** + * @brief Disable One bit sampling method + * @rmtoll CR3 ONEBIT LL_USART_DisableOneBitSamp + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableOneBitSamp(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_ONEBIT); +} + +/** + * @brief Indicate if One bit sampling method is enabled + * @rmtoll CR3 ONEBIT LL_USART_IsEnabledOneBitSamp + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledOneBitSamp(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_ONEBIT) == (USART_CR3_ONEBIT)); +} + +/** + * @brief Configure USART BRR register for achieving expected Baud Rate value. + * @note Compute and set USARTDIV value in BRR Register (full BRR content) + * according to used Peripheral Clock, Oversampling mode, and expected Baud Rate values + * @note Peripheral clock and Baud rate values provided as function parameters should be valid + * (Baud rate value != 0) + * @rmtoll BRR BRR LL_USART_SetBaudRate + * @param USARTx USART Instance + * @param PeriphClk Peripheral Clock + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @param BaudRate Baud Rate + * @retval None + */ +__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling, + uint32_t BaudRate) +{ + if (OverSampling == LL_USART_OVERSAMPLING_8) + { + USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate)); + } + else + { + USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate)); + } +} + +/** + * @brief Return current Baud Rate value, according to USARTDIV present in BRR register + * (full BRR content), and to used Peripheral Clock and Oversampling mode values + * @note In case of non-initialized or invalid value stored in BRR register, value 0 will be returned. + * @rmtoll BRR BRR LL_USART_GetBaudRate + * @param USARTx USART Instance + * @param PeriphClk Peripheral Clock + * @param OverSampling This parameter can be one of the following values: + * @arg @ref LL_USART_OVERSAMPLING_16 + * @arg @ref LL_USART_OVERSAMPLING_8 + * @retval Baud Rate + */ +__STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling) +{ + uint32_t usartdiv = 0x0U; + uint32_t brrresult = 0x0U; + + usartdiv = USARTx->BRR; + + if (OverSampling == LL_USART_OVERSAMPLING_8) + { + if ((usartdiv & 0xFFF7U) != 0U) + { + usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ; + brrresult = (PeriphClk * 2U) / usartdiv; + } + } + else + { + if ((usartdiv & 0xFFFFU) != 0U) + { + brrresult = PeriphClk / usartdiv; + } + } + return (brrresult); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_IRDA Configuration functions related to Irda feature + * @{ + */ + +/** + * @brief Enable IrDA mode + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_EnableIrda + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIrda(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Disable IrDA mode + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_DisableIrda + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIrda(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Indicate if IrDA mode is enabled + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IREN LL_USART_IsEnabledIrda + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIrda(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_IREN) == (USART_CR3_IREN)); +} + +/** + * @brief Configure IrDA Power Mode (Normal or Low Power) + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IRLP LL_USART_SetIrdaPowerMode + * @param USARTx USART Instance + * @param PowerMode This parameter can be one of the following values: + * @arg @ref LL_USART_IRDA_POWER_NORMAL + * @arg @ref LL_USART_IRDA_POWER_LOW + * @retval None + */ +__STATIC_INLINE void LL_USART_SetIrdaPowerMode(USART_TypeDef *USARTx, uint32_t PowerMode) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_IRLP, PowerMode); +} + +/** + * @brief Retrieve IrDA Power Mode configuration (Normal or Low Power) + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll CR3 IRLP LL_USART_GetIrdaPowerMode + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_IRDA_POWER_NORMAL + * @arg @ref LL_USART_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_USART_GetIrdaPowerMode(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_IRLP)); +} + +/** + * @brief Set Irda prescaler value, used for dividing the USART clock source + * to achieve the Irda Low Power frequency (8 bits value) + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_SetIrdaPrescaler + * @param USARTx USART Instance + * @param PrescalerValue Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetIrdaPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); +} + +/** + * @brief Return Irda prescaler value, used for dividing the USART clock source + * to achieve the Irda Low Power frequency (8 bits value) + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_GetIrdaPrescaler + * @param USARTx USART Instance + * @retval Irda prescaler value (Value between Min_Data=0x00 and Max_Data=0xFF) + */ +__STATIC_INLINE uint32_t LL_USART_GetIrdaPrescaler(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_Smartcard Configuration functions related to Smartcard feature + * @{ + */ + +/** + * @brief Enable Smartcard NACK transmission + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_EnableSmartcardNACK + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSmartcardNACK(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_NACK); +} + +/** + * @brief Disable Smartcard NACK transmission + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_DisableSmartcardNACK + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSmartcardNACK(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_NACK); +} + +/** + * @brief Indicate if Smartcard NACK transmission is enabled + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 NACK LL_USART_IsEnabledSmartcardNACK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcardNACK(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_NACK) == (USART_CR3_NACK)); +} + +/** + * @brief Enable Smartcard mode + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_EnableSmartcard + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSmartcard(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Disable Smartcard mode + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_DisableSmartcard + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSmartcard(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Indicate if Smartcard mode is enabled + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll CR3 SCEN LL_USART_IsEnabledSmartcard + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSmartcard(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_SCEN) == (USART_CR3_SCEN)); +} + +/** + * @brief Set Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_SetSmartcardPrescaler + * @param USARTx USART Instance + * @param PrescalerValue Value between Min_Data=0 and Max_Data=31 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetSmartcardPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_PSC, PrescalerValue); +} + +/** + * @brief Return Smartcard prescaler value, used for dividing the USART clock + * source to provide the SMARTCARD Clock (5 bits value) + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR PSC LL_USART_GetSmartcardPrescaler + * @param USARTx USART Instance + * @retval Smartcard prescaler value (Value between Min_Data=0 and Max_Data=31) + */ +__STATIC_INLINE uint32_t LL_USART_GetSmartcardPrescaler(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_PSC)); +} + +/** + * @brief Set Smartcard Guard time value, expressed in nb of baud clocks periods + * (GT[7:0] bits : Guard time value) + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR GT LL_USART_SetSmartcardGuardTime + * @param USARTx USART Instance + * @param GuardTime Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_SetSmartcardGuardTime(USART_TypeDef *USARTx, uint32_t GuardTime) +{ + MODIFY_REG(USARTx->GTPR, USART_GTPR_GT, GuardTime << USART_POSITION_GTPR_GT); +} + +/** + * @brief Return Smartcard Guard time value, expressed in nb of baud clocks periods + * (GT[7:0] bits : Guard time value) + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @rmtoll GTPR GT LL_USART_GetSmartcardGuardTime + * @param USARTx USART Instance + * @retval Smartcard Guard time value (Value between Min_Data=0x00 and Max_Data=0xFF) + */ +__STATIC_INLINE uint32_t LL_USART_GetSmartcardGuardTime(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->GTPR, USART_GTPR_GT) >> USART_POSITION_GTPR_GT); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_HalfDuplex Configuration functions related to Half Duplex feature + * @{ + */ + +/** + * @brief Enable Single Wire Half-Duplex mode + * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_EnableHalfDuplex + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableHalfDuplex(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Disable Single Wire Half-Duplex mode + * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_DisableHalfDuplex + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableHalfDuplex(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Indicate if Single Wire Half-Duplex mode is enabled + * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @rmtoll CR3 HDSEL LL_USART_IsEnabledHalfDuplex + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_HDSEL) == (USART_CR3_HDSEL)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature + * @{ + */ + +/** + * @brief Set LIN Break Detection Length + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDL LL_USART_SetLINBrkDetectionLen + * @param USARTx USART Instance + * @param LINBDLength This parameter can be one of the following values: + * @arg @ref LL_USART_LINBREAK_DETECT_10B + * @arg @ref LL_USART_LINBREAK_DETECT_11B + * @retval None + */ +__STATIC_INLINE void LL_USART_SetLINBrkDetectionLen(USART_TypeDef *USARTx, uint32_t LINBDLength) +{ + MODIFY_REG(USARTx->CR2, USART_CR2_LBDL, LINBDLength); +} + +/** + * @brief Return LIN Break Detection Length + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDL LL_USART_GetLINBrkDetectionLen + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_LINBREAK_DETECT_10B + * @arg @ref LL_USART_LINBREAK_DETECT_11B + */ +__STATIC_INLINE uint32_t LL_USART_GetLINBrkDetectionLen(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR2, USART_CR2_LBDL)); +} + +/** + * @brief Enable LIN mode + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_EnableLIN + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableLIN(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Disable LIN mode + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_DisableLIN + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableLIN(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Indicate if LIN mode is enabled + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LINEN LL_USART_IsEnabledLIN + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledLIN(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_LINEN) == (USART_CR2_LINEN)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_AdvancedConfiguration Advanced Configurations services + * @{ + */ + +/** + * @brief Perform basic configuration of USART for enabling use in Asynchronous Mode (UART) + * @note In UART mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * @note Other remaining configurations items related to Asynchronous Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigAsyncMode\n + * CR2 CLKEN LL_USART_ConfigAsyncMode\n + * CR3 SCEN LL_USART_ConfigAsyncMode\n + * CR3 IREN LL_USART_ConfigAsyncMode\n + * CR3 HDSEL LL_USART_ConfigAsyncMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx) +{ + /* In Asynchronous mode, the following bits must be kept cleared: + - LINEN, CLKEN bits in the USART_CR2 register, + - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Synchronous Mode + * @note In Synchronous mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also sets the USART in Synchronous mode. + * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not + * Synchronous mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function + * @note Other remaining configurations items related to Synchronous Mode + * (as Baud Rate, Word length, Parity, Clock Polarity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigSyncMode\n + * CR2 CLKEN LL_USART_ConfigSyncMode\n + * CR3 SCEN LL_USART_ConfigSyncMode\n + * CR3 IREN LL_USART_ConfigSyncMode\n + * CR3 HDSEL LL_USART_ConfigSyncMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx) +{ + /* In Synchronous mode, the following bits must be kept cleared: + - LINEN bit in the USART_CR2 register, + - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); + /* set the UART/USART in Synchronous mode */ + SET_BIT(USARTx->CR2, USART_CR2_CLKEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in LIN Mode + * @note In LIN mode, the following bits must be kept cleared: + * - STOP and CLKEN bits in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also set the UART/USART in LIN mode. + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Set LINEN in CR2 using @ref LL_USART_EnableLIN() function + * @note Other remaining configurations items related to LIN Mode + * (as Baud Rate, Word length, LIN Break Detection Length, ...) should be set using + * dedicated functions + * @rmtoll CR2 CLKEN LL_USART_ConfigLINMode\n + * CR2 STOP LL_USART_ConfigLINMode\n + * CR2 LINEN LL_USART_ConfigLINMode\n + * CR3 IREN LL_USART_ConfigLINMode\n + * CR3 SCEN LL_USART_ConfigLINMode\n + * CR3 HDSEL LL_USART_ConfigLINMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx) +{ + /* In LIN mode, the following bits must be kept cleared: + - STOP and CLKEN bits in the USART_CR2 register, + - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL)); + /* Set the UART/USART in LIN mode */ + SET_BIT(USARTx->CR2, USART_CR2_LINEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Half Duplex Mode + * @note In Half Duplex mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * This function also sets the UART/USART in Half Duplex mode. + * @note Macro @ref IS_UART_HALFDUPLEX_INSTANCE(USARTx) can be used to check whether or not + * Half-Duplex mode is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Set HDSEL in CR3 using @ref LL_USART_EnableHalfDuplex() function + * @note Other remaining configurations items related to Half Duplex Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigHalfDuplexMode\n + * CR2 CLKEN LL_USART_ConfigHalfDuplexMode\n + * CR3 HDSEL LL_USART_ConfigHalfDuplexMode\n + * CR3 SCEN LL_USART_ConfigHalfDuplexMode\n + * CR3 IREN LL_USART_ConfigHalfDuplexMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx) +{ + /* In Half Duplex mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN)); + /* set the UART/USART in Half Duplex mode */ + SET_BIT(USARTx->CR3, USART_CR3_HDSEL); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Smartcard Mode + * @note In Smartcard mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also configures Stop bits to 1.5 bits and + * sets the USART in Smartcard mode (SCEN bit). + * Clock Output is also enabled (CLKEN). + * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not + * Smartcard feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Set CLKEN in CR2 using @ref LL_USART_EnableSCLKOutput() function + * - Set SCEN in CR3 using @ref LL_USART_EnableSmartcard() function + * @note Other remaining configurations items related to Smartcard Mode + * (as Baud Rate, Word length, Parity, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigSmartcardMode\n + * CR2 STOP LL_USART_ConfigSmartcardMode\n + * CR2 CLKEN LL_USART_ConfigSmartcardMode\n + * CR3 HDSEL LL_USART_ConfigSmartcardMode\n + * CR3 SCEN LL_USART_ConfigSmartcardMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx) +{ + /* In Smartcard mode, the following bits must be kept cleared: + - LINEN bit in the USART_CR2 register, + - IREN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL)); + /* Configure Stop bits to 1.5 bits */ + /* Synchronous mode is activated by default */ + SET_BIT(USARTx->CR2, (USART_CR2_STOP_0 | USART_CR2_STOP_1 | USART_CR2_CLKEN)); + /* set the UART/USART in Smartcard mode */ + SET_BIT(USARTx->CR3, USART_CR3_SCEN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Irda Mode + * @note In IRDA mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - STOP and CLKEN bits in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * This function also sets the UART/USART in IRDA mode (IREN bit). + * @note Macro @ref IS_IRDA_INSTANCE(USARTx) can be used to check whether or not + * IrDA feature is supported by the USARTx instance. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * - Configure STOP in CR2 using @ref LL_USART_SetStopBitsLength() function + * - Set IREN in CR3 using @ref LL_USART_EnableIrda() function + * @note Other remaining configurations items related to Irda Mode + * (as Baud Rate, Word length, Power mode, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigIrdaMode\n + * CR2 CLKEN LL_USART_ConfigIrdaMode\n + * CR2 STOP LL_USART_ConfigIrdaMode\n + * CR3 SCEN LL_USART_ConfigIrdaMode\n + * CR3 HDSEL LL_USART_ConfigIrdaMode\n + * CR3 IREN LL_USART_ConfigIrdaMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx) +{ + /* In IRDA mode, the following bits must be kept cleared: + - LINEN, STOP and CLKEN bits in the USART_CR2 register, + - SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL)); + /* set the UART/USART in IRDA mode */ + SET_BIT(USARTx->CR3, USART_CR3_IREN); +} + +/** + * @brief Perform basic configuration of USART for enabling use in Multi processor Mode + * (several USARTs connected in a network, one of the USARTs can be the master, + * its TX output connected to the RX inputs of the other slaves USARTs). + * @note In MultiProcessor mode, the following bits must be kept cleared: + * - LINEN bit in the USART_CR2 register, + * - CLKEN bit in the USART_CR2 register, + * - SCEN bit in the USART_CR3 register, + * - IREN bit in the USART_CR3 register, + * - HDSEL bit in the USART_CR3 register. + * @note Call of this function is equivalent to following function call sequence : + * - Clear LINEN in CR2 using @ref LL_USART_DisableLIN() function + * - Clear CLKEN in CR2 using @ref LL_USART_DisableSCLKOutput() function + * - Clear SCEN in CR3 using @ref LL_USART_DisableSmartcard() function + * - Clear IREN in CR3 using @ref LL_USART_DisableIrda() function + * - Clear HDSEL in CR3 using @ref LL_USART_DisableHalfDuplex() function + * @note Other remaining configurations items related to Multi processor Mode + * (as Baud Rate, Wake Up Method, Node address, ...) should be set using + * dedicated functions + * @rmtoll CR2 LINEN LL_USART_ConfigMultiProcessMode\n + * CR2 CLKEN LL_USART_ConfigMultiProcessMode\n + * CR3 SCEN LL_USART_ConfigMultiProcessMode\n + * CR3 HDSEL LL_USART_ConfigMultiProcessMode\n + * CR3 IREN LL_USART_ConfigMultiProcessMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx) +{ + /* In Multi Processor mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/ + CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Check if the USART Parity Error Flag is set or not + * @rmtoll SR PE LL_USART_IsActiveFlag_PE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_PE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_PE) == (USART_SR_PE)); +} + +/** + * @brief Check if the USART Framing Error Flag is set or not + * @rmtoll SR FE LL_USART_IsActiveFlag_FE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_FE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_FE) == (USART_SR_FE)); +} + +/** + * @brief Check if the USART Noise error detected Flag is set or not + * @rmtoll SR NF LL_USART_IsActiveFlag_NE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_NE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_NE) == (USART_SR_NE)); +} + +/** + * @brief Check if the USART OverRun Error Flag is set or not + * @rmtoll SR ORE LL_USART_IsActiveFlag_ORE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_ORE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_ORE) == (USART_SR_ORE)); +} + +/** + * @brief Check if the USART IDLE line detected Flag is set or not + * @rmtoll SR IDLE LL_USART_IsActiveFlag_IDLE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_IDLE) == (USART_SR_IDLE)); +} + +/** + * @brief Check if the USART Read Data Register Not Empty Flag is set or not + * @rmtoll SR RXNE LL_USART_IsActiveFlag_RXNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_RXNE) == (USART_SR_RXNE)); +} + +/** + * @brief Check if the USART Transmission Complete Flag is set or not + * @rmtoll SR TC LL_USART_IsActiveFlag_TC + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_TC) == (USART_SR_TC)); +} + +/** + * @brief Check if the USART Transmit Data Register Empty Flag is set or not + * @rmtoll SR TXE LL_USART_IsActiveFlag_TXE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_TXE) == (USART_SR_TXE)); +} + +/** + * @brief Check if the USART LIN Break Detection Flag is set or not + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll SR LBD LL_USART_IsActiveFlag_LBD + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_LBD(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_LBD) == (USART_SR_LBD)); +} + +/** + * @brief Check if the USART CTS Flag is set or not + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll SR CTS LL_USART_IsActiveFlag_nCTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_nCTS(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->SR, USART_SR_CTS) == (USART_SR_CTS)); +} + +/** + * @brief Check if the USART Send Break Flag is set or not + * @rmtoll CR1 SBK LL_USART_IsActiveFlag_SBK + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_SBK(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_SBK) == (USART_CR1_SBK)); +} + +/** + * @brief Check if the USART Receive Wake Up from mute mode Flag is set or not + * @rmtoll CR1 RWU LL_USART_IsActiveFlag_RWU + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RWU) == (USART_CR1_RWU)); +} + +/** + * @brief Clear Parity Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * NE, FE, ORE, IDLE would also be cleared. + * @rmtoll SR PE LL_USART_ClearFlag_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_PE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Framing Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, ORE, IDLE would also be cleared. + * @rmtoll SR FE LL_USART_ClearFlag_FE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_FE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Noise detected Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, FE, ORE, IDLE would also be cleared. + * @rmtoll SR NF LL_USART_ClearFlag_NE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_NE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear OverRun Error Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, FE, IDLE would also be cleared. + * @rmtoll SR ORE LL_USART_ClearFlag_ORE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_ORE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear IDLE line detected Flag + * @note Clearing this flag is done by a read access to the USARTx_SR + * register followed by a read access to the USARTx_DR register. + * @note Please also consider that when clearing this flag, other flags as + * PE, NE, FE, ORE would also be cleared. + * @rmtoll SR IDLE LL_USART_ClearFlag_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx) +{ + __IO uint32_t tmpreg; + tmpreg = USARTx->SR; + (void) tmpreg; + tmpreg = USARTx->DR; + (void) tmpreg; +} + +/** + * @brief Clear Transmission Complete Flag + * @rmtoll SR TC LL_USART_ClearFlag_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_TC)); +} + +/** + * @brief Clear RX Not Empty Flag + * @rmtoll SR RXNE LL_USART_ClearFlag_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_RXNE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_RXNE)); +} + +/** + * @brief Clear LIN Break Detection Flag + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll SR LBD LL_USART_ClearFlag_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_LBD(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_LBD)); +} + +/** + * @brief Clear CTS Interrupt Flag + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll SR CTS LL_USART_ClearFlag_nCTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_nCTS(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->SR, ~(USART_SR_CTS)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable IDLE Interrupt + * @rmtoll CR1 IDLEIE LL_USART_EnableIT_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_IDLEIE); +} + +/** + * @brief Enable RX Not Empty Interrupt + * @rmtoll CR1 RXNEIE LL_USART_EnableIT_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_RXNEIE); +} + +/** + * @brief Enable Transmission Complete Interrupt + * @rmtoll CR1 TCIE LL_USART_EnableIT_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TCIE); +} + +/** + * @brief Enable TX Empty Interrupt + * @rmtoll CR1 TXEIE LL_USART_EnableIT_TXE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_TXEIE); +} + +/** + * @brief Enable Parity Error Interrupt + * @rmtoll CR1 PEIE LL_USART_EnableIT_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_PE(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR1, USART_CR1_PEIE); +} + +/** + * @brief Enable LIN Break Detection Interrupt + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_EnableIT_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_LBD(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_LBDIE); +} + +/** + * @brief Enable Error Interrupt + * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing + * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. + * @rmtoll CR3 EIE LL_USART_EnableIT_ERROR + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_ERROR(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_EIE); +} + +/** + * @brief Enable CTS Interrupt + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_EnableIT_CTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_CTSIE); +} + +/** + * @brief Disable IDLE Interrupt + * @rmtoll CR1 IDLEIE LL_USART_DisableIT_IDLE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE); +} + +/** + * @brief Disable RX Not Empty Interrupt + * @rmtoll CR1 RXNEIE LL_USART_DisableIT_RXNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE); +} + +/** + * @brief Disable Transmission Complete Interrupt + * @rmtoll CR1 TCIE LL_USART_DisableIT_TC + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE); +} + +/** + * @brief Disable TX Empty Interrupt + * @rmtoll CR1 TXEIE LL_USART_DisableIT_TXE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE); +} + +/** + * @brief Disable Parity Error Interrupt + * @rmtoll CR1 PEIE LL_USART_DisableIT_PE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_PE(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR1, USART_CR1_PEIE); +} + +/** + * @brief Disable LIN Break Detection Interrupt + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_DisableIT_LBD + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_LBD(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_LBDIE); +} + +/** + * @brief Disable Error Interrupt + * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing + * error, overrun error or noise flag (FE=1 or ORE=1 or NF=1 in the USARTx_SR register). + * 0: Interrupt is inhibited + * 1: An interrupt is generated when FE=1 or ORE=1 or NF=1 in the USARTx_SR register. + * @rmtoll CR3 EIE LL_USART_DisableIT_ERROR + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_ERROR(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_EIE); +} + +/** + * @brief Disable CTS Interrupt + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_DisableIT_CTS + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE); +} + +/** + * @brief Check if the USART IDLE Interrupt source is enabled or disabled. + * @rmtoll CR1 IDLEIE LL_USART_IsEnabledIT_IDLE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)); +} + +/** + * @brief Check if the USART RX Not Empty Interrupt is enabled or disabled. + * @rmtoll CR1 RXNEIE LL_USART_IsEnabledIT_RXNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)); +} + +/** + * @brief Check if the USART Transmission Complete Interrupt is enabled or disabled. + * @rmtoll CR1 TCIE LL_USART_IsEnabledIT_TC + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)); +} + +/** + * @brief Check if the USART TX Empty Interrupt is enabled or disabled. + * @rmtoll CR1 TXEIE LL_USART_IsEnabledIT_TXE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)); +} + +/** + * @brief Check if the USART Parity Error Interrupt is enabled or disabled. + * @rmtoll CR1 PEIE LL_USART_IsEnabledIT_PE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_PE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_PEIE) == (USART_CR1_PEIE)); +} + +/** + * @brief Check if the USART LIN Break Detection Interrupt is enabled or disabled. + * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not + * LIN feature is supported by the USARTx instance. + * @rmtoll CR2 LBDIE LL_USART_IsEnabledIT_LBD + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_LBD(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_LBDIE) == (USART_CR2_LBDIE)); +} + +/** + * @brief Check if the USART Error Interrupt is enabled or disabled. + * @rmtoll CR3 EIE LL_USART_IsEnabledIT_ERROR + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_ERROR(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_EIE) == (USART_CR3_EIE)); +} + +/** + * @brief Check if the USART CTS Interrupt is enabled or disabled. + * @note Macro @ref IS_UART_HWFLOW_INSTANCE(USARTx) can be used to check whether or not + * Hardware Flow control feature is supported by the USARTx instance. + * @rmtoll CR3 CTSIE LL_USART_IsEnabledIT_CTS + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_DMA_Management DMA_Management + * @{ + */ + +/** + * @brief Enable DMA Mode for reception + * @rmtoll CR3 DMAR LL_USART_EnableDMAReq_RX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDMAReq_RX(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAR); +} + +/** + * @brief Disable DMA Mode for reception + * @rmtoll CR3 DMAR LL_USART_DisableDMAReq_RX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDMAReq_RX(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAR); +} + +/** + * @brief Check if DMA Mode is enabled for reception + * @rmtoll CR3 DMAR LL_USART_IsEnabledDMAReq_RX + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_RX(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_DMAR) == (USART_CR3_DMAR)); +} + +/** + * @brief Enable DMA Mode for transmission + * @rmtoll CR3 DMAT LL_USART_EnableDMAReq_TX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableDMAReq_TX(USART_TypeDef *USARTx) +{ + ATOMIC_SET_BIT(USARTx->CR3, USART_CR3_DMAT); +} + +/** + * @brief Disable DMA Mode for transmission + * @rmtoll CR3 DMAT LL_USART_DisableDMAReq_TX + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableDMAReq_TX(USART_TypeDef *USARTx) +{ + ATOMIC_CLEAR_BIT(USARTx->CR3, USART_CR3_DMAT); +} + +/** + * @brief Check if DMA Mode is enabled for transmission + * @rmtoll CR3 DMAT LL_USART_IsEnabledDMAReq_TX + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledDMAReq_TX(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_DMAT) == (USART_CR3_DMAT)); +} + +/** + * @brief Get the data register address used for DMA transfer + * @rmtoll DR DR LL_USART_DMA_GetRegAddr + * @note Address of Data Register is valid for both Transmit and Receive transfers. + * @param USARTx USART Instance + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx) +{ + /* return address of DR register */ + return ((uint32_t) &(USARTx->DR)); +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Data_Management Data_Management + * @{ + */ + +/** + * @brief Read Receiver Data register (Receive Data value, 8 bits) + * @rmtoll DR DR LL_USART_ReceiveData8 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx) +{ + return (uint8_t)(READ_BIT(USARTx->DR, USART_DR_DR)); +} + +/** + * @brief Read Receiver Data register (Receive Data value, 9 bits) + * @rmtoll DR DR LL_USART_ReceiveData9 + * @param USARTx USART Instance + * @retval Value between Min_Data=0x00 and Max_Data=0x1FF + */ +__STATIC_INLINE uint16_t LL_USART_ReceiveData9(USART_TypeDef *USARTx) +{ + return (uint16_t)(READ_BIT(USARTx->DR, USART_DR_DR)); +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 8 bits) + * @rmtoll DR DR LL_USART_TransmitData8 + * @param USARTx USART Instance + * @param Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value) +{ + USARTx->DR = Value; +} + +/** + * @brief Write in Transmitter Data Register (Transmit Data value, 9 bits) + * @rmtoll DR DR LL_USART_TransmitData9 + * @param USARTx USART Instance + * @param Value between Min_Data=0x00 and Max_Data=0x1FF + * @retval None + */ +__STATIC_INLINE void LL_USART_TransmitData9(USART_TypeDef *USARTx, uint16_t Value) +{ + USARTx->DR = Value & 0x1FFU; +} + +/** + * @} + */ + +/** @defgroup USART_LL_EF_Execution Execution + * @{ + */ + +/** + * @brief Request Break sending + * @rmtoll CR1 SBK LL_USART_RequestBreakSending + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestBreakSending(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_SBK); +} + +/** + * @brief Put USART in Mute mode + * @rmtoll CR1 RWU LL_USART_RequestEnterMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_RWU); +} + +/** + * @brief Put USART in Active mode + * @rmtoll CR1 RWU LL_USART_RequestExitMuteMode + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_RequestExitMuteMode(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_RWU); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup USART_LL_EF_Init Initialization and de-initialization functions + * @{ + */ +ErrorStatus LL_USART_DeInit(USART_TypeDef *USARTx); +ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct); +void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct); +ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct); +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* USART1 || USART2 || USART3 || USART6 || UART4 || UART5 || UART7 || UART8 || UART9 || UART10 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_USART_H */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h new file mode 100644 index 0000000..2b254a1 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h @@ -0,0 +1,307 @@ +/** + ****************************************************************************** + * @file stm32f4xx_ll_utils.h + * @author MCD Application Team + * @brief Header file of UTILS LL module. + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The LL UTILS driver contains a set of generic APIs that can be + used by user: + (+) Device electronic signature + (+) Timing functions + (+) PLL configuration functions + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_LL_UTILS_H +#define __STM32F4xx_LL_UTILS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + +/** @addtogroup STM32F4xx_LL_Driver + * @{ + */ + +/** @defgroup UTILS_LL UTILS + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup UTILS_LL_Private_Constants UTILS Private Constants + * @{ + */ + +/* Max delay can be used in LL_mDelay */ +#define LL_MAX_DELAY 0xFFFFFFFFU + +/** + * @brief Unique device ID register base address + */ +#define UID_BASE_ADDRESS UID_BASE + +/** + * @brief Flash size data register base address + */ +#define FLASHSIZE_BASE_ADDRESS FLASHSIZE_BASE + +/** + * @brief Package data register base address + */ +#define PACKAGE_BASE_ADDRESS PACKAGE_BASE + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup UTILS_LL_Private_Macros UTILS Private Macros + * @{ + */ +/** + * @} + */ +/* Exported types ------------------------------------------------------------*/ +/** @defgroup UTILS_LL_ES_INIT UTILS Exported structures + * @{ + */ +/** + * @brief UTILS PLL structure definition + */ +typedef struct +{ + uint32_t PLLM; /*!< Division factor for PLL VCO input clock. + This parameter can be a value of @ref RCC_LL_EC_PLLM_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ + + uint32_t PLLN; /*!< Multiplication factor for PLL VCO output clock. + This parameter must be a number between Min_Data = @ref RCC_PLLN_MIN_VALUE + and Max_Data = @ref RCC_PLLN_MIN_VALUE + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ + + uint32_t PLLP; /*!< Division for the main system clock. + This parameter can be a value of @ref RCC_LL_EC_PLLP_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_PLL_ConfigDomain_SYS(). */ +} LL_UTILS_PLLInitTypeDef; + +/** + * @brief UTILS System, AHB and APB buses clock configuration structure definition + */ +typedef struct +{ + uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK). + This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAHBPrescaler(). */ + + uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_LL_EC_APB1_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAPB1Prescaler(). */ + + uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK). + This parameter can be a value of @ref RCC_LL_EC_APB2_DIV + + This feature can be modified afterwards using unitary function + @ref LL_RCC_SetAPB2Prescaler(). */ + +} LL_UTILS_ClkInitTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants + * @{ + */ + +/** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation + * @{ + */ +#define LL_UTILS_HSEBYPASS_OFF 0x00000000U /*!< HSE Bypass is not enabled */ +#define LL_UTILS_HSEBYPASS_ON 0x00000001U /*!< HSE Bypass is enabled */ +/** + * @} + */ + +/** @defgroup UTILS_EC_PACKAGETYPE PACKAGE TYPE + * @{ + */ +#define LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64 0x00000000U /*!< WLCSP36 or UFQFPN48 or LQFP64 package type */ +#define LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48 0x00000100U /*!< WLCSP168 or FBGA169 or LQFP100 or LQFP64 or UFQFPN48 package type */ +#define LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176 0x00000200U /*!< WLCSP64 or WLCSP81 or LQFP176 or UFBGA176 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100 0x00000300U /*!< LQFP144 or UFBGA144 or UFBGA144 or UFBGA100 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216 0x00000400U /*!< LQFP100 or LQFP208 or TFBGA216 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216 0x00000500U /*!< LQFP208 or TFBGA216 package type */ +#define LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144 0x00000700U /*!< TQFP64 or UFBGA144 or LQFP144 package type */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions + * @{ + */ + +/** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE + * @{ + */ + +/** + * @brief Get Word0 of the unique device identifier (UID based on 96 bits) + * @retval UID[31:0] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word0(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS))); +} + +/** + * @brief Get Word1 of the unique device identifier (UID based on 96 bits) + * @retval UID[63:32] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word1(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 4U)))); +} + +/** + * @brief Get Word2 of the unique device identifier (UID based on 96 bits) + * @retval UID[95:64] + */ +__STATIC_INLINE uint32_t LL_GetUID_Word2(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 8U)))); +} + +/** + * @brief Get Flash memory size + * @note This bitfield indicates the size of the device Flash memory expressed in + * Kbytes. As an example, 0x040 corresponds to 64 Kbytes. + * @retval FLASH_SIZE[15:0]: Flash memory size + */ +__STATIC_INLINE uint32_t LL_GetFlashSize(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFF); +} + +/** + * @brief Get Package type + * @retval Returned value can be one of the following values: + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144 (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_GetPackageType(void) +{ + return (uint32_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x0700U); +} + +/** + * @} + */ + +/** @defgroup UTILS_LL_EF_DELAY DELAY + * @{ + */ + +/** + * @brief This function configures the Cortex-M SysTick source of the time base. + * @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro) + * @note When a RTOS is used, it is recommended to avoid changing the SysTick + * configuration by calling this function, for a delay use rather osDelay RTOS service. + * @param Ticks Number of ticks + * @retval None + */ +__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks) +{ + /* Configure the SysTick to have interrupt in 1ms time base */ + SysTick->LOAD = (uint32_t)((HCLKFrequency / Ticks) - 1UL); /* set reload register */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable the Systick Timer */ +} + +void LL_Init1msTick(uint32_t HCLKFrequency); +void LL_mDelay(uint32_t Delay); + +/** + * @} + */ + +/** @defgroup UTILS_EF_SYSTEM SYSTEM + * @{ + */ + +void LL_SetSystemCoreClock(uint32_t HCLKFrequency); +ErrorStatus LL_SetFlashLatency(uint32_t HCLK_Frequency); +ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, + LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); +ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass, + LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_LL_UTILS_H */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt new file mode 100644 index 0000000..3edc4d1 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/LICENSE.txt @@ -0,0 +1,6 @@ +This software component is provided to you as part of a software package and +applicable license terms are in the Package_license file. If you received this +software component outside of a package or without applicable license terms, +the terms of the BSD-3-Clause license shall apply. +You may obtain a copy of the BSD-3-Clause at: +https://opensource.org/licenses/BSD-3-Clause diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c new file mode 100644 index 0000000..9ba2ba7 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c @@ -0,0 +1,615 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal.c + * @author MCD Application Team + * @brief HAL module driver. + * This is the common part of the HAL initialization + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The common HAL driver contains a set of generic and common APIs that can be + used by the PPP peripheral drivers and the user to start using the HAL. + [..] + The HAL contains two APIs' categories: + (+) Common HAL APIs + (+) Services HAL APIs + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup HAL HAL + * @brief HAL module driver. + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup HAL_Private_Constants + * @{ + */ +/** + * @brief STM32F4xx HAL Driver version number V1.8.1 + */ +#define __STM32F4xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */ +#define __STM32F4xx_HAL_VERSION_SUB1 (0x08U) /*!< [23:16] sub1 version */ +#define __STM32F4xx_HAL_VERSION_SUB2 (0x01U) /*!< [15:8] sub2 version */ +#define __STM32F4xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F4xx_HAL_VERSION ((__STM32F4xx_HAL_VERSION_MAIN << 24U)\ + |(__STM32F4xx_HAL_VERSION_SUB1 << 16U)\ + |(__STM32F4xx_HAL_VERSION_SUB2 << 8U )\ + |(__STM32F4xx_HAL_VERSION_RC)) + +#define IDCODE_DEVID_MASK 0x00000FFFU + +/* ------------ RCC registers bit address in the alias region ----------- */ +#define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE) +/* --- MEMRMP Register ---*/ +/* Alias word address of UFB_MODE bit */ +#define MEMRMP_OFFSET SYSCFG_OFFSET +#define UFB_MODE_BIT_NUMBER SYSCFG_MEMRMP_UFB_MODE_Pos +#define UFB_MODE_BB (uint32_t)(PERIPH_BB_BASE + (MEMRMP_OFFSET * 32U) + (UFB_MODE_BIT_NUMBER * 4U)) + +/* --- CMPCR Register ---*/ +/* Alias word address of CMP_PD bit */ +#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20U) +#define CMP_PD_BIT_NUMBER SYSCFG_CMPCR_CMP_PD_Pos +#define CMPCR_CMP_PD_BB (uint32_t)(PERIPH_BB_BASE + (CMPCR_OFFSET * 32U) + (CMP_PD_BIT_NUMBER * 4U)) + +/* --- MCHDLYCR Register ---*/ +/* Alias word address of BSCKSEL bit */ +#define MCHDLYCR_OFFSET (SYSCFG_OFFSET + 0x30U) +#define BSCKSEL_BIT_NUMBER SYSCFG_MCHDLYCR_BSCKSEL_Pos +#define MCHDLYCR_BSCKSEL_BB (uint32_t)(PERIPH_BB_BASE + (MCHDLYCR_OFFSET * 32U) + (BSCKSEL_BIT_NUMBER * 4U)) +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup HAL_Private_Variables + * @{ + */ +__IO uint32_t uwTick; +uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */ +HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */ +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup HAL_Exported_Functions HAL Exported Functions + * @{ + */ + +/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initializes the Flash interface the NVIC allocation and initial clock + configuration. It initializes the systick also when timeout is needed + and the backup domain when enabled. + (+) De-Initializes common part of the HAL. + (+) Configure the time base source to have 1ms time base with a dedicated + Tick interrupt priority. + (++) SysTick timer is used by default as source of time base, but user + can eventually implement his proper time base source (a general purpose + timer for example or other time source), keeping in mind that Time base + duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and + handled in milliseconds basis. + (++) Time base configuration function (HAL_InitTick ()) is called automatically + at the beginning of the program after reset by HAL_Init() or at any time + when clock is configured, by HAL_RCC_ClockConfig(). + (++) Source of time base is configured to generate interrupts at regular + time intervals. Care must be taken if HAL_Delay() is called from a + peripheral ISR process, the Tick interrupt line must have higher priority + (numerically lower) than the peripheral interrupt. Otherwise the caller + ISR process will be blocked. + (++) functions affecting time base configurations are declared as __weak + to make override possible in case of other implementations in user file. +@endverbatim + * @{ + */ + +/** + * @brief This function is used to initialize the HAL Library; it must be the first + * instruction to be executed in the main program (before to call any other + * HAL function), it performs the following: + * Configure the Flash prefetch, instruction and Data caches. + * Configures the SysTick to generate an interrupt each 1 millisecond, + * which is clocked by the HSI (at this stage, the clock is not yet + * configured and thus the system is running from the internal HSI at 16 MHz). + * Set NVIC Group Priority to 4. + * Calls the HAL_MspInit() callback function defined in user file + * "stm32f4xx_hal_msp.c" to do the global low level hardware initialization + * + * @note SysTick is used as time base for the HAL_Delay() function, the application + * need to ensure that the SysTick time base is always set to 1 millisecond + * to have correct HAL operation. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_Init(void) +{ + /* Configure Flash prefetch, Instruction cache, Data cache */ +#if (INSTRUCTION_CACHE_ENABLE != 0U) + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); +#endif /* INSTRUCTION_CACHE_ENABLE */ + +#if (DATA_CACHE_ENABLE != 0U) + __HAL_FLASH_DATA_CACHE_ENABLE(); +#endif /* DATA_CACHE_ENABLE */ + +#if (PREFETCH_ENABLE != 0U) + __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + + /* Init the low level hardware */ + HAL_MspInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief This function de-Initializes common part of the HAL and stops the systick. + * This function is optional. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DeInit(void) +{ + /* Reset of all peripherals */ + __HAL_RCC_APB1_FORCE_RESET(); + __HAL_RCC_APB1_RELEASE_RESET(); + + __HAL_RCC_APB2_FORCE_RESET(); + __HAL_RCC_APB2_RELEASE_RESET(); + + __HAL_RCC_AHB1_FORCE_RESET(); + __HAL_RCC_AHB1_RELEASE_RESET(); + + __HAL_RCC_AHB2_FORCE_RESET(); + __HAL_RCC_AHB2_RELEASE_RESET(); + + __HAL_RCC_AHB3_FORCE_RESET(); + __HAL_RCC_AHB3_RELEASE_RESET(); + + /* De-Init the low level hardware */ + HAL_MspDeInit(); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initialize the MSP. + * @retval None + */ +__weak void HAL_MspInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes the MSP. + * @retval None + */ +__weak void HAL_MspDeInit(void) +{ + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief This function configures the source of the time base. + * The time source is configured to have 1ms time base with a dedicated + * Tick interrupt priority. + * @note This function is called automatically at the beginning of program after + * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig(). + * @note In the default implementation, SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals. + * Care must be taken if HAL_Delay() is called from a peripheral ISR process, + * The SysTick interrupt must have higher priority (numerically lower) + * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. + * The function is declared as __weak to be overwritten in case of other + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + /* Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + { + return HAL_ERROR; + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + uwTickPrio = TickPriority; + } + else + { + return HAL_ERROR; + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions + * @brief HAL Control functions + * +@verbatim + =============================================================================== + ##### HAL Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Provide a tick value in millisecond + (+) Provide a blocking delay in millisecond + (+) Suspend the time base source interrupt + (+) Resume the time base source interrupt + (+) Get the HAL API driver version + (+) Get the device identifier + (+) Get the device revision identifier + (+) Enable/Disable Debug module during SLEEP mode + (+) Enable/Disable Debug module during STOP mode + (+) Enable/Disable Debug module during STANDBY mode + +@endverbatim + * @{ + */ + +/** + * @brief This function is called to increment a global variable "uwTick" + * used as application time base. + * @note In the default implementation, this variable is incremented each 1ms + * in SysTick ISR. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_IncTick(void) +{ + uwTick += uwTickFreq; +} + +/** + * @brief Provides a tick value in millisecond. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval tick value + */ +__weak uint32_t HAL_GetTick(void) +{ + return uwTick; +} + +/** + * @brief This function returns a tick priority. + * @retval tick priority + */ +uint32_t HAL_GetTickPrio(void) +{ + return uwTickPrio; +} + +/** + * @brief Set new tick Freq. + * @retval Status + */ +HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) +{ + HAL_StatusTypeDef status = HAL_OK; + HAL_TickFreqTypeDef prevTickFreq; + + assert_param(IS_TICKFREQ(Freq)); + + if (uwTickFreq != Freq) + { + /* Back up uwTickFreq frequency */ + prevTickFreq = uwTickFreq; + + /* Update uwTickFreq global variable used by HAL_InitTick() */ + uwTickFreq = Freq; + + /* Apply the new tick Freq */ + status = HAL_InitTick(uwTickPrio); + + if (status != HAL_OK) + { + /* Restore previous tick frequency */ + uwTickFreq = prevTickFreq; + } + } + + return status; +} + +/** + * @brief Return tick frequency. + * @retval tick period in Hz + */ +HAL_TickFreqTypeDef HAL_GetTickFreq(void) +{ + return uwTickFreq; +} + +/** + * @brief This function provides minimum delay (in milliseconds) based + * on variable incremented. + * @note In the default implementation , SysTick timer is the source of time base. + * It is used to generate interrupts at regular time intervals where uwTick + * is incremented. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @param Delay specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(uint32_t Delay) +{ + uint32_t tickstart = HAL_GetTick(); + uint32_t wait = Delay; + + /* Add a freq to guarantee minimum wait */ + if (wait < HAL_MAX_DELAY) + { + wait += (uint32_t)(uwTickFreq); + } + + while((HAL_GetTick() - tickstart) < wait) + { + } +} + +/** + * @brief Suspend Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_SuspendTick() + * is called, the SysTick interrupt will be disabled and so Tick increment + * is suspended. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_SuspendTick(void) +{ + /* Disable SysTick Interrupt */ + SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; +} + +/** + * @brief Resume Tick increment. + * @note In the default implementation , SysTick timer is the source of time base. It is + * used to generate interrupts at regular time intervals. Once HAL_ResumeTick() + * is called, the SysTick interrupt will be enabled and so Tick increment + * is resumed. + * @note This function is declared as __weak to be overwritten in case of other + * implementations in user file. + * @retval None + */ +__weak void HAL_ResumeTick(void) +{ + /* Enable SysTick Interrupt */ + SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; +} + +/** + * @brief Returns the HAL revision + * @retval version : 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t HAL_GetHalVersion(void) +{ + return __STM32F4xx_HAL_VERSION; +} + +/** + * @brief Returns the device revision identifier. + * @retval Device revision identifier + */ +uint32_t HAL_GetREVID(void) +{ + return((DBGMCU->IDCODE) >> 16U); +} + +/** + * @brief Returns the device identifier. + * @retval Device identifier + */ +uint32_t HAL_GetDEVID(void) +{ + return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); +} + +/** + * @brief Enable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGSleepMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Disable the Debug Module during SLEEP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGSleepMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); +} + +/** + * @brief Enable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStopMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Disable the Debug Module during STOP mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStopMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +} + +/** + * @brief Enable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_EnableDBGStandbyMode(void) +{ + SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Disable the Debug Module during STANDBY mode + * @retval None + */ +void HAL_DBGMCU_DisableDBGStandbyMode(void) +{ + CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); +} + +/** + * @brief Enables the I/O Compensation Cell. + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V. + * @retval None + */ +void HAL_EnableCompensationCell(void) +{ + *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)ENABLE; +} + +/** + * @brief Power-down the I/O Compensation Cell. + * @note The I/O compensation cell can be used only when the device supply + * voltage ranges from 2.4 to 3.6 V. + * @retval None + */ +void HAL_DisableCompensationCell(void) +{ + *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns first word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw0(void) +{ + return (READ_REG(*((uint32_t *)UID_BASE))); +} + +/** + * @brief Returns second word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw1(void) +{ + return (READ_REG(*((uint32_t *)(UID_BASE + 4U)))); +} + +/** + * @brief Returns third word of the unique device identifier (UID based on 96 bits) + * @retval Device identifier + */ +uint32_t HAL_GetUIDw2(void) +{ + return (READ_REG(*((uint32_t *)(UID_BASE + 8U)))); +} + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Enables the Internal FLASH Bank Swapping. + * + * @note This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. + * + * @note Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000) + * and Flash Bank1 mapped at 0x08100000 (and aliased at 0x00100000) + * + * @retval None + */ +void HAL_EnableMemorySwappingBank(void) +{ + *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Internal FLASH Bank Swapping. + * + * @note This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. + * + * @note The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x00000000) + * and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000) + * + * @retval None + */ +void HAL_DisableMemorySwappingBank(void) +{ + *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)DISABLE; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c new file mode 100644 index 0000000..98515c5 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c @@ -0,0 +1,502 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_cortex.c + * @author MCD Application Team + * @brief CORTEX HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the CORTEX: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + + [..] + *** How to configure Interrupts using CORTEX HAL driver *** + =========================================================== + [..] + This section provides functions allowing to configure the NVIC interrupts (IRQ). + The Cortex-M4 exceptions are managed by CMSIS functions. + + (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() + function according to the following table. + (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority(). + (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ(). + (#) please refer to programming manual for details in how to configure priority. + + -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible. + The pending IRQ priority will be managed only by the sub priority. + + -@- IRQ priority order (sorted by highest to lowest priority): + (+@) Lowest preemption priority + (+@) Lowest sub priority + (+@) Lowest hardware priority (IRQ number) + + [..] + *** How to configure Systick using CORTEX HAL driver *** + ======================================================== + [..] + Setup SysTick Timer for time base. + + (+) The HAL_SYSTICK_Config() function calls the SysTick_Config() function which + is a CMSIS function that: + (++) Configures the SysTick Reload register with value passed as function parameter. + (++) Configures the SysTick IRQ priority to the lowest value 0x0F. + (++) Resets the SysTick Counter register. + (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). + (++) Enables the SysTick Interrupt. + (++) Starts the SysTick Counter. + + (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro + __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the + HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined + inside the stm32f4xx_hal_cortex.h file. + + (+) You can change the SysTick IRQ priority by calling the + HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function + call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function. + + (+) To adjust the SysTick time base, use the following formula: + + Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) + (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function + (++) Reload Value should not exceed 0xFFFFFF + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup CORTEX CORTEX + * @brief CORTEX HAL module driver + * @{ + */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions + * @{ + */ + + +/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] + This section provides the CORTEX HAL driver functions allowing to configure Interrupts + Systick functionalities + +@endverbatim + * @{ + */ + + +/** + * @brief Sets the priority grouping field (preemption priority and subpriority) + * using the required unlock sequence. + * @param PriorityGroup The priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority + * 0 bits for subpriority + * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. + * The pending IRQ priority will be managed only by the subpriority. + * @retval None + */ +void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + + /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ + NVIC_SetPriorityGrouping(PriorityGroup); +} + +/** + * @brief Sets the priority of an interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @param PreemptPriority The preemption priority for the IRQn channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority + * @param SubPriority the subpriority level for the IRQ channel. + * This parameter can be a value between 0 and 15 + * A lower priority value indicates a higher priority. + * @retval None + */ +void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t prioritygroup = 0x00U; + + /* Check the parameters */ + assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); + assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); + + prioritygroup = NVIC_GetPriorityGrouping(); + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); +} + +/** + * @brief Enables a device specific interrupt in the NVIC interrupt controller. + * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() + * function should be called before. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Disables a device specific interrupt in the NVIC interrupt controller. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_DisableIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Disable interrupt */ + NVIC_DisableIRQ(IRQn); +} + +/** + * @brief Initiates a system reset request to reset the MCU. + * @retval None + */ +void HAL_NVIC_SystemReset(void) +{ + /* System Reset */ + NVIC_SystemReset(); +} + +/** + * @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. + * Counter is in free running mode to generate periodic interrupts. + * @param TicksNumb Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) +{ + return SysTick_Config(TicksNumb); +} +/** + * @} + */ + +/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions + * @brief Cortex control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the CORTEX + (NVIC, SYSTICK, MPU) functionalities. + + +@endverbatim + * @{ + */ + +#if (__MPU_PRESENT == 1U) +/** + * @brief Disables the MPU + * @retval None + */ +void HAL_MPU_Disable(void) +{ + /* Make sure outstanding transfers are done */ + __DMB(); + + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + + /* Disable the MPU and clear the control register*/ + MPU->CTRL = 0U; +} + +/** + * @brief Enable the MPU. + * @param MPU_Control Specifies the control mode of the MPU during hard fault, + * NMI, FAULTMASK and privileged access to the default memory + * This parameter can be one of the following values: + * @arg MPU_HFNMI_PRIVDEF_NONE + * @arg MPU_HARDFAULT_NMI + * @arg MPU_PRIVILEGED_DEFAULT + * @arg MPU_HFNMI_PRIVDEF + * @retval None + */ +void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; + + /* Ensure MPU setting take effects */ + __DSB(); + __ISB(); +} + +/** + * @brief Initializes and configures the Region and the memory to be protected. + * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains + * the initialization and configuration information. + * @retval None + */ +void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) +{ + /* Check the parameters */ + assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); + assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); + + /* Set the Region number */ + MPU->RNR = MPU_Init->Number; + + if ((MPU_Init->Enable) != RESET) + { + /* Check the parameters */ + assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec)); + assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission)); + assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField)); + assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable)); + assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); + assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); + assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); + assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); + + MPU->RBAR = MPU_Init->BaseAddress; + MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | + ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | + ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | + ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | + ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | + ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | + ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | + ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | + ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos); + } + else + { + MPU->RBAR = 0x00U; + MPU->RASR = 0x00U; + } +} +#endif /* __MPU_PRESENT */ + +/** + * @brief Gets the priority grouping field from the NVIC Interrupt Controller. + * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) + */ +uint32_t HAL_NVIC_GetPriorityGrouping(void) +{ + /* Get the PRIGROUP[10:8] field value */ + return NVIC_GetPriorityGrouping(); +} + +/** + * @brief Gets the priority of an interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @param PriorityGroup the priority grouping bits length. + * This parameter can be one of the following values: + * @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority + * 4 bits for subpriority + * @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority + * 3 bits for subpriority + * @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority + * 2 bits for subpriority + * @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority + * 1 bits for subpriority + * @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority + * 0 bits for subpriority + * @param pPreemptPriority Pointer on the Preemptive priority value (starting from 0). + * @param pSubPriority Pointer on the Subpriority value (starting from 0). + * @retval None + */ +void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) +{ + /* Check the parameters */ + assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); + /* Get priority for Cortex-M system or device specific interrupts */ + NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority); +} + +/** + * @brief Sets Pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Set interrupt pending */ + NVIC_SetPendingIRQ(IRQn); +} + +/** + * @brief Gets Pending Interrupt (reads the pending register in the NVIC + * and returns the pending bit for the specified interrupt). + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Return 1 if pending else 0 */ + return NVIC_GetPendingIRQ(IRQn); +} + +/** + * @brief Clears the pending bit of an external interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval None + */ +void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Clear pending interrupt */ + NVIC_ClearPendingIRQ(IRQn); +} + +/** + * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit). + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h)) + * @retval status: - 0 Interrupt status is not pending. + * - 1 Interrupt status is pending. + */ +uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) +{ + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Return 1 if active else 0 */ + return NVIC_GetActive(IRQn); +} + +/** + * @brief Configures the SysTick clock source. + * @param 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 HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) +{ + /* Check the parameters */ + assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource)); + if (CLKSource == SYSTICK_CLKSOURCE_HCLK) + { + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } + else + { + SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; + } +} + +/** + * @brief This function handles SYSTICK interrupt request. + * @retval None + */ +void HAL_SYSTICK_IRQHandler(void) +{ + HAL_SYSTICK_Callback(); +} + +/** + * @brief SYSTICK callback. + * @retval None + */ +__weak void HAL_SYSTICK_Callback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_SYSTICK_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_CORTEX_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c new file mode 100644 index 0000000..3dbb477 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c @@ -0,0 +1,1305 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma.c + * @author MCD Application Team + * @brief DMA HAL module driver. + * + * This file provides firmware functions to manage the following + * functionalities of the Direct Memory Access (DMA) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral State and errors functions + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable and configure the peripheral to be connected to the DMA Stream + (except for internal SRAM/FLASH memories: no initialization is + necessary) please refer to Reference manual for connection between peripherals + and DMA requests. + + (#) For a given Stream, program the required configuration through the following parameters: + Transfer Direction, Source and Destination data formats, + Circular, Normal or peripheral flow control mode, Stream Priority level, + Source and Destination Increment mode, FIFO mode and its Threshold (if needed), + Burst mode for Source and/or Destination (if needed) using HAL_DMA_Init() function. + + -@- Prior to HAL_DMA_Init() the clock must be enabled for DMA through the following macros: + __HAL_RCC_DMA1_CLK_ENABLE() or __HAL_RCC_DMA2_CLK_ENABLE(). + + *** Polling mode IO operation *** + ================================= + [..] + (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source + address and destination address and the Length of data to be transferred. + (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this + case a fixed Timeout can be configured by User depending from his application. + (+) Use HAL_DMA_Abort() function to abort the current transfer. + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority() + (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ() + (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of + Source address and destination address and the Length of data to be transferred. In this + case the DMA interrupt is configured + (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine + (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can + add his own function by customization of function pointer XferCpltCallback and + XferErrorCallback (i.e a member of DMA handle structure). + [..] + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + detection. + + (#) Use HAL_DMA_Abort_IT() function to abort the current transfer + + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + + -@- The FIFO is used mainly to reduce bus usage and to allow data packing/unpacking: it is + possible to set different Data Sizes for the Peripheral and the Memory (ie. you can set + Half-Word data size for the peripheral to access its data register and set Word data size + for the Memory to gain in access time. Each two half words will be packed and written in + a single access to a Word in the Memory). + + -@- When FIFO is disabled, it is not allowed to configure different Data Sizes for Source + and Destination. In this case the Peripheral Data Size will be applied to both Source + and Destination. + + *** DMA HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in DMA HAL driver. + + (+) __HAL_DMA_ENABLE: Enable the specified DMA Stream. + (+) __HAL_DMA_DISABLE: Disable the specified DMA Stream. + (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Stream interrupt has occurred or not. + + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup DMA DMA + * @brief DMA HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +typedef struct +{ + __IO uint32_t ISR; /*!< DMA interrupt status register */ + __IO uint32_t Reserved0; + __IO uint32_t IFCR; /*!< DMA interrupt flag clear register */ +} DMA_Base_Registers; + +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @addtogroup DMA_Private_Constants + * @{ + */ + #define HAL_TIMEOUT_DMA_ABORT 5U /* 5 ms */ +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @addtogroup DMA_Private_Functions + * @{ + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @addtogroup DMA_Exported_Functions + * @{ + */ + +/** @addtogroup DMA_Exported_Functions_Group1 + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize the DMA Stream source + and destination addresses, incrementation and data sizes, transfer direction, + circular/normal mode selection, memory-to-memory mode selection and Stream priority value. + [..] + The HAL_DMA_Init() function follows the DMA configuration procedures as described in + reference manual. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the DMA according to the specified + * parameters in the DMA_InitTypeDef and create the associated handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) +{ + uint32_t tmp = 0U; + uint32_t tickstart = HAL_GetTick(); + DMA_Base_Registers *regs; + + /* Check the DMA peripheral state */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_DMA_STREAM_ALL_INSTANCE(hdma->Instance)); + assert_param(IS_DMA_CHANNEL(hdma->Init.Channel)); + assert_param(IS_DMA_DIRECTION(hdma->Init.Direction)); + assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc)); + assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc)); + assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment)); + assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment)); + assert_param(IS_DMA_MODE(hdma->Init.Mode)); + assert_param(IS_DMA_PRIORITY(hdma->Init.Priority)); + assert_param(IS_DMA_FIFO_MODE_STATE(hdma->Init.FIFOMode)); + /* Check the memory burst, peripheral burst and FIFO threshold parameters only + when FIFO mode is enabled */ + if(hdma->Init.FIFOMode != DMA_FIFOMODE_DISABLE) + { + assert_param(IS_DMA_FIFO_THRESHOLD(hdma->Init.FIFOThreshold)); + assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst)); + assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst)); + } + + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Allocate lock resource */ + __HAL_UNLOCK(hdma); + + /* Disable the peripheral */ + __HAL_DMA_DISABLE(hdma); + + /* Check if the DMA Stream is effectively disabled */ + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + return HAL_TIMEOUT; + } + } + + /* Get the CR register value */ + tmp = hdma->Instance->CR; + + /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */ + tmp &= ((uint32_t)~(DMA_SxCR_CHSEL | DMA_SxCR_MBURST | DMA_SxCR_PBURST | \ + DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \ + DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \ + DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM)); + + /* Prepare the DMA Stream configuration */ + tmp |= hdma->Init.Channel | hdma->Init.Direction | + hdma->Init.PeriphInc | hdma->Init.MemInc | + hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | + hdma->Init.Mode | hdma->Init.Priority; + + /* the Memory burst and peripheral burst are not used when the FIFO is disabled */ + if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE) + { + /* Get memory burst and peripheral burst */ + tmp |= hdma->Init.MemBurst | hdma->Init.PeriphBurst; + } + + /* Write to DMA Stream CR register */ + hdma->Instance->CR = tmp; + + /* Get the FCR register value */ + tmp = hdma->Instance->FCR; + + /* Clear Direct mode and FIFO threshold bits */ + tmp &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH); + + /* Prepare the DMA Stream FIFO configuration */ + tmp |= hdma->Init.FIFOMode; + + /* The FIFO threshold is not used when the FIFO mode is disabled */ + if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE) + { + /* Get the FIFO threshold */ + tmp |= hdma->Init.FIFOThreshold; + + /* Check compatibility between FIFO threshold level and size of the memory burst */ + /* for INCR4, INCR8, INCR16 bursts */ + if (hdma->Init.MemBurst != DMA_MBURST_SINGLE) + { + if (DMA_CheckFifoParam(hdma) != HAL_OK) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_PARAM; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + return HAL_ERROR; + } + } + } + + /* Write to DMA Stream FCR */ + hdma->Instance->FCR = tmp; + + /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate + DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */ + regs = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma); + + /* Clear all interrupt flags */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Initialize the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the DMA peripheral + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) +{ + DMA_Base_Registers *regs; + + /* Check the DMA peripheral state */ + if(hdma == NULL) + { + return HAL_ERROR; + } + + /* Check the DMA peripheral state */ + if(hdma->State == HAL_DMA_STATE_BUSY) + { + /* Return error status */ + return HAL_BUSY; + } + + /* Check the parameters */ + assert_param(IS_DMA_STREAM_ALL_INSTANCE(hdma->Instance)); + + /* Disable the selected DMA Streamx */ + __HAL_DMA_DISABLE(hdma); + + /* Reset DMA Streamx control register */ + hdma->Instance->CR = 0U; + + /* Reset DMA Streamx number of data to transfer register */ + hdma->Instance->NDTR = 0U; + + /* Reset DMA Streamx peripheral address register */ + hdma->Instance->PAR = 0U; + + /* Reset DMA Streamx memory 0 address register */ + hdma->Instance->M0AR = 0U; + + /* Reset DMA Streamx memory 1 address register */ + hdma->Instance->M1AR = 0U; + + /* Reset DMA Streamx FIFO control register */ + hdma->Instance->FCR = 0x00000021U; + + /* Get DMA steam Base Address */ + regs = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma); + + /* Clean all callbacks */ + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferM1CpltCallback = NULL; + hdma->XferM1HalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Reset the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Reset the DMA state */ + hdma->State = HAL_DMA_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return HAL_OK; +} + +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group2 + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and Start DMA transfer + (+) Configure the source, destination address and data length and + Start DMA transfer with interrupt + (+) Abort DMA transfer + (+) Poll for transfer complete + (+) Handle DMA interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Starts the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + return status; +} + +/** + * @brief Start the DMA Transfer with interrupt enabled. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Configure the source, destination address and the data length */ + DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Enable Common interrupts*/ + hdma->Instance->CR |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME; + + if(hdma->XferHalfCpltCallback != NULL) + { + hdma->Instance->CR |= DMA_IT_HT; + } + + /* Enable the Peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + + return status; +} + +/** + * @brief Aborts the DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * + * @note After disabling a DMA Stream, a check for wait until the DMA Stream is + * effectively disabled is added. If a Stream is disabled + * while a data transfer is ongoing, the current data will be transferred + * and the Stream will be effectively disabled only after the transfer of + * this single data is finished. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + uint32_t tickstart = HAL_GetTick(); + + if(hdma->State != HAL_DMA_STATE_BUSY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + else + { + /* Disable all the transfer interrupts */ + hdma->Instance->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME); + hdma->Instance->FCR &= ~(DMA_IT_FE); + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + + /* Check if the DMA Stream is effectively disabled */ + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_TIMEOUT; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Change the DMA state*/ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + return HAL_OK; +} + +/** + * @brief Aborts the DMA Transfer in Interrupt mode. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) +{ + if(hdma->State != HAL_DMA_STATE_BUSY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + return HAL_ERROR; + } + else + { + /* Set Abort State */ + hdma->State = HAL_DMA_STATE_ABORT; + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + } + + return HAL_OK; +} + +/** + * @brief Polling for transfer complete. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CompleteLevel Specifies the DMA level complete. + * @note The polling mode is kept in this version for legacy. it is recommended to use the IT model instead. + * This model could be used for debug purpose. + * @note The HAL_DMA_PollForTransfer API cannot be used in circular and double buffering mode (automatic circular mode). + * @param Timeout Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t mask_cpltlevel; + uint32_t tickstart = HAL_GetTick(); + uint32_t tmpisr; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs; + + if(HAL_DMA_STATE_BUSY != hdma->State) + { + /* No transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + __HAL_UNLOCK(hdma); + return HAL_ERROR; + } + + /* Polling mode not supported in circular mode and double buffering mode */ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) != RESET) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Get the level transfer complete flag */ + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Transfer Complete flag */ + mask_cpltlevel = DMA_FLAG_TCIF0_4 << hdma->StreamIndex; + } + else + { + /* Half Transfer Complete flag */ + mask_cpltlevel = DMA_FLAG_HTIF0_4 << hdma->StreamIndex; + } + + regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + tmpisr = regs->ISR; + + while(((tmpisr & mask_cpltlevel) == RESET) && ((hdma->ErrorCode & HAL_DMA_ERROR_TE) == RESET)) + { + /* Check for the Timeout (Not applicable in circular mode)*/ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) + { + /* Update error code */ + hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_TIMEOUT; + } + } + + /* Get the ISR register value */ + tmpisr = regs->ISR; + + if((tmpisr & (DMA_FLAG_TEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_TE; + + /* Clear the transfer error flag */ + regs->IFCR = DMA_FLAG_TEIF0_4 << hdma->StreamIndex; + } + + if((tmpisr & (DMA_FLAG_FEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_FE; + + /* Clear the FIFO error flag */ + regs->IFCR = DMA_FLAG_FEIF0_4 << hdma->StreamIndex; + } + + if((tmpisr & (DMA_FLAG_DMEIF0_4 << hdma->StreamIndex)) != RESET) + { + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_DME; + + /* Clear the Direct Mode error flag */ + regs->IFCR = DMA_FLAG_DMEIF0_4 << hdma->StreamIndex; + } + } + + if(hdma->ErrorCode != HAL_DMA_ERROR_NONE) + { + if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != RESET) + { + HAL_DMA_Abort(hdma); + + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4 | DMA_FLAG_TCIF0_4) << hdma->StreamIndex; + + /* Change the DMA state */ + hdma->State= HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return HAL_ERROR; + } + } + + /* Get the level transfer complete flag */ + if(CompleteLevel == HAL_DMA_FULL_TRANSFER) + { + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4 | DMA_FLAG_TCIF0_4) << hdma->StreamIndex; + + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + else + { + /* Clear the half transfer and transfer complete flags */ + regs->IFCR = (DMA_FLAG_HTIF0_4) << hdma->StreamIndex; + } + + return status; +} + +/** + * @brief Handles DMA interrupt request. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) +{ + uint32_t tmpisr; + __IO uint32_t count = 0U; + uint32_t timeout = SystemCoreClock / 9600U; + + /* calculate DMA base and stream number */ + DMA_Base_Registers *regs = (DMA_Base_Registers *)hdma->StreamBaseAddress; + + tmpisr = regs->ISR; + + /* Transfer Error Interrupt management ***************************************/ + if ((tmpisr & (DMA_FLAG_TEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != RESET) + { + /* Disable the transfer error interrupt */ + hdma->Instance->CR &= ~(DMA_IT_TE); + + /* Clear the transfer error flag */ + regs->IFCR = DMA_FLAG_TEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_TE; + } + } + /* FIFO Error Interrupt management ******************************************/ + if ((tmpisr & (DMA_FLAG_FEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != RESET) + { + /* Clear the FIFO error flag */ + regs->IFCR = DMA_FLAG_FEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_FE; + } + } + /* Direct Mode Error Interrupt management ***********************************/ + if ((tmpisr & (DMA_FLAG_DMEIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != RESET) + { + /* Clear the direct mode error flag */ + regs->IFCR = DMA_FLAG_DMEIF0_4 << hdma->StreamIndex; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_DME; + } + } + /* Half Transfer Complete Interrupt management ******************************/ + if ((tmpisr & (DMA_FLAG_HTIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != RESET) + { + /* Clear the half transfer complete flag */ + regs->IFCR = DMA_FLAG_HTIF0_4 << hdma->StreamIndex; + + /* Multi_Buffering mode enabled */ + if(((hdma->Instance->CR) & (uint32_t)(DMA_SxCR_DBM)) != RESET) + { + /* Current memory buffer used is Memory 0 */ + if((hdma->Instance->CR & DMA_SxCR_CT) == RESET) + { + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + /* Current memory buffer used is Memory 1 */ + else + { + if(hdma->XferM1HalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferM1HalfCpltCallback(hdma); + } + } + } + else + { + /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */ + if((hdma->Instance->CR & DMA_SxCR_CIRC) == RESET) + { + /* Disable the half transfer interrupt */ + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + if(hdma->XferHalfCpltCallback != NULL) + { + /* Half transfer callback */ + hdma->XferHalfCpltCallback(hdma); + } + } + } + } + /* Transfer Complete Interrupt management ***********************************/ + if ((tmpisr & (DMA_FLAG_TCIF0_4 << hdma->StreamIndex)) != RESET) + { + if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != RESET) + { + /* Clear the transfer complete flag */ + regs->IFCR = DMA_FLAG_TCIF0_4 << hdma->StreamIndex; + + if(HAL_DMA_STATE_ABORT == hdma->State) + { + /* Disable all the transfer interrupts */ + hdma->Instance->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME); + hdma->Instance->FCR &= ~(DMA_IT_FE); + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR &= ~(DMA_IT_HT); + } + + /* Clear all interrupt flags at correct offset within the register */ + regs->IFCR = 0x3FU << hdma->StreamIndex; + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + if(hdma->XferAbortCallback != NULL) + { + hdma->XferAbortCallback(hdma); + } + return; + } + + if(((hdma->Instance->CR) & (uint32_t)(DMA_SxCR_DBM)) != RESET) + { + /* Current memory buffer used is Memory 0 */ + if((hdma->Instance->CR & DMA_SxCR_CT) == RESET) + { + if(hdma->XferM1CpltCallback != NULL) + { + /* Transfer complete Callback for memory1 */ + hdma->XferM1CpltCallback(hdma); + } + } + /* Current memory buffer used is Memory 1 */ + else + { + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete Callback for memory0 */ + hdma->XferCpltCallback(hdma); + } + } + } + /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */ + else + { + if((hdma->Instance->CR & DMA_SxCR_CIRC) == RESET) + { + /* Disable the transfer complete interrupt */ + hdma->Instance->CR &= ~(DMA_IT_TC); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + + if(hdma->XferCpltCallback != NULL) + { + /* Transfer complete callback */ + hdma->XferCpltCallback(hdma); + } + } + } + } + + /* manage error case */ + if(hdma->ErrorCode != HAL_DMA_ERROR_NONE) + { + if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != RESET) + { + hdma->State = HAL_DMA_STATE_ABORT; + + /* Disable the stream */ + __HAL_DMA_DISABLE(hdma); + + do + { + if (++count > timeout) + { + break; + } + } + while((hdma->Instance->CR & DMA_SxCR_EN) != RESET); + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + } + + if(hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } +} + +/** + * @brief Register callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifier + * a DMA_HandleTypeDef structure as parameter. + * @param pCallback pointer to private callback function which has pointer to + * a DMA_HandleTypeDef structure as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma)) +{ + + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_M1CPLT_CB_ID: + hdma->XferM1CpltCallback = pCallback; + break; + + case HAL_DMA_XFER_M1HALFCPLT_CB_ID: + hdma->XferM1HalfCpltCallback = pCallback; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = pCallback; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = pCallback; + break; + + default: + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @brief UnRegister callbacks + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param CallbackID User Callback identifier + * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + switch (CallbackID) + { + case HAL_DMA_XFER_CPLT_CB_ID: + hdma->XferCpltCallback = NULL; + break; + + case HAL_DMA_XFER_HALFCPLT_CB_ID: + hdma->XferHalfCpltCallback = NULL; + break; + + case HAL_DMA_XFER_M1CPLT_CB_ID: + hdma->XferM1CpltCallback = NULL; + break; + + case HAL_DMA_XFER_M1HALFCPLT_CB_ID: + hdma->XferM1HalfCpltCallback = NULL; + break; + + case HAL_DMA_XFER_ERROR_CB_ID: + hdma->XferErrorCallback = NULL; + break; + + case HAL_DMA_XFER_ABORT_CB_ID: + hdma->XferAbortCallback = NULL; + break; + + case HAL_DMA_XFER_ALL_CB_ID: + hdma->XferCpltCallback = NULL; + hdma->XferHalfCpltCallback = NULL; + hdma->XferM1CpltCallback = NULL; + hdma->XferM1HalfCpltCallback = NULL; + hdma->XferErrorCallback = NULL; + hdma->XferAbortCallback = NULL; + break; + + default: + status = HAL_ERROR; + break; + } + } + else + { + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hdma); + + return status; +} + +/** + * @} + */ + +/** @addtogroup DMA_Exported_Functions_Group3 + * +@verbatim + =============================================================================== + ##### State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the DMA state + (+) Get error code + +@endverbatim + * @{ + */ + +/** + * @brief Returns the DMA state. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL state + */ +HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) +{ + return hdma->State; +} + +/** + * @brief Return the DMA error code + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval DMA Error Code + */ +uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) +{ + return hdma->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMA_Private_Functions + * @{ + */ + +/** + * @brief Sets the DMA Transfer parameter. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Clear DBM bit */ + hdma->Instance->CR &= (uint32_t)(~DMA_SxCR_DBM); + + /* Configure DMA Stream data length */ + hdma->Instance->NDTR = DataLength; + + /* Memory to Peripheral */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Stream destination address */ + hdma->Instance->PAR = DstAddress; + + /* Configure DMA Stream source address */ + hdma->Instance->M0AR = SrcAddress; + } + /* Peripheral to Memory */ + else + { + /* Configure DMA Stream source address */ + hdma->Instance->PAR = SrcAddress; + + /* Configure DMA Stream destination address */ + hdma->Instance->M0AR = DstAddress; + } +} + +/** + * @brief Returns the DMA Stream base address depending on stream number + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval Stream base address + */ +static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma) +{ + uint32_t stream_number = (((uint32_t)hdma->Instance & 0xFFU) - 16U) / 24U; + + /* lookup table for necessary bitshift of flags within status registers */ + static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U}; + hdma->StreamIndex = flagBitshiftOffset[stream_number]; + + if (stream_number > 3U) + { + /* return pointer to HISR and HIFCR */ + hdma->StreamBaseAddress = (((uint32_t)hdma->Instance & (uint32_t)(~0x3FFU)) + 4U); + } + else + { + /* return pointer to LISR and LIFCR */ + hdma->StreamBaseAddress = ((uint32_t)hdma->Instance & (uint32_t)(~0x3FFU)); + } + + return hdma->StreamBaseAddress; +} + +/** + * @brief Check compatibility between FIFO threshold level and size of the memory burst + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval HAL status + */ +static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmp = hdma->Init.FIFOThreshold; + + /* Memory Data size equal to Byte */ + if(hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE) + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_HALFFULL: + if (hdma->Init.MemBurst == DMA_MBURST_INC16) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_FULL: + break; + default: + break; + } + } + + /* Memory Data size equal to Half-Word */ + else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + status = HAL_ERROR; + break; + case DMA_FIFO_THRESHOLD_HALFFULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + case DMA_FIFO_THRESHOLD_FULL: + if (hdma->Init.MemBurst == DMA_MBURST_INC16) + { + status = HAL_ERROR; + } + break; + default: + break; + } + } + + /* Memory Data size equal to Word */ + else + { + switch (tmp) + { + case DMA_FIFO_THRESHOLD_1QUARTERFULL: + case DMA_FIFO_THRESHOLD_HALFFULL: + case DMA_FIFO_THRESHOLD_3QUARTERSFULL: + status = HAL_ERROR; + break; + case DMA_FIFO_THRESHOLD_FULL: + if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1) + { + status = HAL_ERROR; + } + break; + default: + break; + } + } + + return status; +} + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c new file mode 100644 index 0000000..7167e77 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c @@ -0,0 +1,313 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_dma_ex.c + * @author MCD Application Team + * @brief DMA Extension HAL module driver + * This file provides firmware functions to manage the following + * functionalities of the DMA Extension peripheral: + * + Extended features functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The DMA Extension HAL driver can be used as follows: + (#) Start a multi buffer transfer using the HAL_DMA_MultiBufferStart() function + for polling mode or HAL_DMA_MultiBufferStart_IT() for interrupt mode. + + -@- In Memory-to-Memory transfer mode, Multi (Double) Buffer mode is not allowed. + -@- When Multi (Double) Buffer mode is enabled the, transfer is circular by default. + -@- In Multi (Double) buffer mode, it is possible to update the base address for + the AHB memory port on the fly (DMA_SxM0AR or DMA_SxM1AR) when the stream is enabled. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup DMAEx DMAEx + * @brief DMA Extended HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private Constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @addtogroup DMAEx_Private_Functions + * @{ + */ +static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ + +/** @addtogroup DMAEx_Exported_Functions + * @{ + */ + + +/** @addtogroup DMAEx_Exported_Functions_Group1 + * +@verbatim + =============================================================================== + ##### Extended features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the source, destination address and data length and + Start MultiBuffer DMA transfer + (+) Configure the source, destination address and data length and + Start MultiBuffer DMA transfer with interrupt + (+) Change on the fly the memory0 or memory1 address. + +@endverbatim + * @{ + */ + + +/** + * @brief Starts the multi_buffer DMA Transfer. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param SecondMemAddress The second memory Buffer address in case of multi buffer Transfer + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Memory-to-memory transfer not supported in double buffering mode */ + if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + status = HAL_ERROR; + } + else + { + /* Process Locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Enable the double buffer mode */ + hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM; + + /* Configure DMA Stream destination address */ + hdma->Instance->M1AR = SecondMemAddress; + + /* Configure the source, destination address and the data length */ + DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Enable the peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Return error status */ + status = HAL_BUSY; + } + } + return status; +} + +/** + * @brief Starts the multi_buffer DMA Transfer with interrupt enabled. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param SecondMemAddress The second memory Buffer address in case of multi buffer Transfer + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_DMA_BUFFER_SIZE(DataLength)); + + /* Memory-to-memory transfer not supported in double buffering mode */ + if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY) + { + hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; + return HAL_ERROR; + } + + /* Check callback functions */ + if ((NULL == hdma->XferCpltCallback) || (NULL == hdma->XferM1CpltCallback) || (NULL == hdma->XferErrorCallback)) + { + hdma->ErrorCode = HAL_DMA_ERROR_PARAM; + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hdma); + + if(HAL_DMA_STATE_READY == hdma->State) + { + /* Change DMA peripheral state */ + hdma->State = HAL_DMA_STATE_BUSY; + + /* Initialize the error code */ + hdma->ErrorCode = HAL_DMA_ERROR_NONE; + + /* Enable the Double buffer mode */ + hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM; + + /* Configure DMA Stream destination address */ + hdma->Instance->M1AR = SecondMemAddress; + + /* Configure the source, destination address and the data length */ + DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength); + + /* Clear all flags */ + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_DME_FLAG_INDEX(hdma)); + __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_FE_FLAG_INDEX(hdma)); + + /* Enable Common interrupts*/ + hdma->Instance->CR |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME; + hdma->Instance->FCR |= DMA_IT_FE; + + if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL)) + { + hdma->Instance->CR |= DMA_IT_HT; + } + + /* Enable the peripheral */ + __HAL_DMA_ENABLE(hdma); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdma); + + /* Return error status */ + status = HAL_BUSY; + } + return status; +} + +/** + * @brief Change the memory0 or memory1 address on the fly. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param Address The new address + * @param memory the memory to be changed, This parameter can be one of + * the following values: + * MEMORY0 / + * MEMORY1 + * @note The MEMORY0 address can be changed only when the current transfer use + * MEMORY1 and the MEMORY1 address can be changed only when the current + * transfer use MEMORY0. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory) +{ + if(memory == MEMORY0) + { + /* change the memory0 address */ + hdma->Instance->M0AR = Address; + } + else + { + /* change the memory1 address */ + hdma->Instance->M1AR = Address; + } + + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup DMAEx_Private_Functions + * @{ + */ + +/** + * @brief Set the DMA Transfer parameter. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @param SrcAddress The source memory Buffer address + * @param DstAddress The destination memory Buffer address + * @param DataLength The length of data to be transferred from source to destination + * @retval HAL status + */ +static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) +{ + /* Configure DMA Stream data length */ + hdma->Instance->NDTR = DataLength; + + /* Peripheral to Memory */ + if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) + { + /* Configure DMA Stream destination address */ + hdma->Instance->PAR = DstAddress; + + /* Configure DMA Stream source address */ + hdma->Instance->M0AR = SrcAddress; + } + /* Memory to Peripheral */ + else + { + /* Configure DMA Stream source address */ + hdma->Instance->PAR = SrcAddress; + + /* Configure DMA Stream destination address */ + hdma->Instance->M0AR = DstAddress; + } +} + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c new file mode 100644 index 0000000..04b5215 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c @@ -0,0 +1,547 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_exti.c + * @author MCD Application Team + * @brief EXTI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Extended Interrupts and events controller (EXTI) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2018 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### EXTI Peripheral features ##### + ============================================================================== + [..] + (+) Each Exti line can be configured within this driver. + + (+) Exti line can be configured in 3 different modes + (++) Interrupt + (++) Event + (++) Both of them + + (+) Configurable Exti lines can be configured with 3 different triggers + (++) Rising + (++) Falling + (++) Both of them + + (+) When set in interrupt mode, configurable Exti lines have two different + interrupts pending registers which allow to distinguish which transition + occurs: + (++) Rising edge pending interrupt + (++) Falling + + (+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can + be selected through multiplexer. + + ##### How to use this driver ##### + ============================================================================== + [..] + + (#) Configure the EXTI line using HAL_EXTI_SetConfigLine(). + (++) Choose the interrupt line number by setting "Line" member from + EXTI_ConfigTypeDef structure. + (++) Configure the interrupt and/or event mode using "Mode" member from + EXTI_ConfigTypeDef structure. + (++) For configurable lines, configure rising and/or falling trigger + "Trigger" member from EXTI_ConfigTypeDef structure. + (++) For Exti lines linked to gpio, choose gpio port using "GPIOSel" + member from GPIO_InitTypeDef structure. + + (#) Get current Exti configuration of a dedicated line using + HAL_EXTI_GetConfigLine(). + (++) Provide exiting handle as parameter. + (++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter. + + (#) Clear Exti configuration of a dedicated line using HAL_EXTI_GetConfigLine(). + (++) Provide exiting handle as parameter. + + (#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback(). + (++) Provide exiting handle as first parameter. + (++) Provide which callback will be registered using one value from + EXTI_CallbackIDTypeDef. + (++) Provide callback function pointer. + + (#) Get interrupt pending bit using HAL_EXTI_GetPending(). + + (#) Clear interrupt pending bit using HAL_EXTI_GetPending(). + + (#) Generate software interrupt using HAL_EXTI_GenerateSWI(). + + @endverbatim + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @addtogroup EXTI + * @{ + */ +/** MISRA C:2012 deviation rule has been granted for following rule: + * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out + * of bounds [0,3] in following API : + * HAL_EXTI_SetConfigLine + * HAL_EXTI_GetConfigLine + * HAL_EXTI_ClearConfigLine + */ + +#ifdef HAL_EXTI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @defgroup EXTI_Private_Constants EXTI Private Constants + * @{ + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup EXTI_Exported_Functions + * @{ + */ + +/** @addtogroup EXTI_Exported_Functions_Group1 + * @brief Configuration functions + * +@verbatim + =============================================================================== + ##### Configuration functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Set configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on EXTI configuration to be set. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check parameters */ + assert_param(IS_EXTI_LINE(pExtiConfig->Line)); + assert_param(IS_EXTI_MODE(pExtiConfig->Mode)); + + /* Assign line number to handle */ + hexti->Line = pExtiConfig->Line; + + /* Compute line mask */ + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* Configure triggers for configurable lines */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger)); + + /* Configure rising trigger */ + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u) + { + EXTI->RTSR |= maskline; + } + else + { + EXTI->RTSR &= ~maskline; + } + + /* Configure falling trigger */ + /* Mask or set line */ + if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u) + { + EXTI->FTSR |= maskline; + } + else + { + EXTI->FTSR &= ~maskline; + } + + + /* Configure gpio port selection in case of gpio exti line */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel)); + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + /* Configure interrupt mode : read current mode */ + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u) + { + EXTI->IMR |= maskline; + } + else + { + EXTI->IMR &= ~maskline; + } + + /* Configure event mode : read current mode */ + /* Mask or set line */ + if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u) + { + EXTI->EMR |= maskline; + } + else + { + EXTI->EMR &= ~maskline; + } + + return HAL_OK; +} + +/** + * @brief Get configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @param pExtiConfig Pointer on structure to store Exti configuration. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if ((hexti == NULL) || (pExtiConfig == NULL)) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* Store handle line number to configuration structure */ + pExtiConfig->Line = hexti->Line; + + /* Compute line mask */ + linepos = (pExtiConfig->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Get core mode : interrupt */ + + /* Check if selected line is enable */ + if ((EXTI->IMR & maskline) != 0x00u) + { + pExtiConfig->Mode = EXTI_MODE_INTERRUPT; + } + else + { + pExtiConfig->Mode = EXTI_MODE_NONE; + } + + /* Get event mode */ + /* Check if selected line is enable */ + if ((EXTI->EMR & maskline) != 0x00u) + { + pExtiConfig->Mode |= EXTI_MODE_EVENT; + } + + /* Get default Trigger and GPIOSel configuration */ + pExtiConfig->Trigger = EXTI_TRIGGER_NONE; + pExtiConfig->GPIOSel = 0x00u; + + /* 2] Get trigger for configurable lines : rising */ + if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) + { + /* Check if configuration of selected line is enable */ + if ((EXTI->RTSR & maskline) != 0x00u) + { + pExtiConfig->Trigger = EXTI_TRIGGER_RISING; + } + + /* Get falling configuration */ + /* Check if configuration of selected line is enable */ + if ((EXTI->FTSR & maskline) != 0x00u) + { + pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING; + } + + /* Get Gpio port selection for gpio lines */ + if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = (SYSCFG->EXTICR[linepos >> 2u] << 16u ); + pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 28u); + } + } + + return HAL_OK; +} + +/** + * @brief Clear whole configuration of a dedicated Exti line. + * @param hexti Exti handle. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + + /* Check the parameter */ + assert_param(IS_EXTI_LINE(hexti->Line)); + + /* compute line mask */ + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* 1] Clear interrupt mode */ + EXTI->IMR = (EXTI->IMR & ~maskline); + + /* 2] Clear event mode */ + EXTI->EMR = (EXTI->EMR & ~maskline); + + /* 3] Clear triggers in case of configurable lines */ + if ((hexti->Line & EXTI_CONFIG) != 0x00u) + { + EXTI->RTSR = (EXTI->RTSR & ~maskline); + EXTI->FTSR = (EXTI->FTSR & ~maskline); + + /* Get Gpio port selection for gpio lines */ + if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO) + { + assert_param(IS_EXTI_GPIO_PIN(linepos)); + + regval = SYSCFG->EXTICR[linepos >> 2u]; + regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))); + SYSCFG->EXTICR[linepos >> 2u] = regval; + } + } + + return HAL_OK; +} + +/** + * @brief Register callback for a dedicated Exti line. + * @param hexti Exti handle. + * @param CallbackID User callback identifier. + * This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values. + * @param pPendingCbfn function pointer to be stored as callback. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)) +{ + HAL_StatusTypeDef status = HAL_OK; + + switch (CallbackID) + { + case HAL_EXTI_COMMON_CB_ID: + hexti->PendingCallback = pPendingCbfn; + break; + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Store line number as handle private field. + * @param hexti Exti handle. + * @param ExtiLine Exti line number. + * This parameter can be from 0 to @ref EXTI_LINE_NB. + * @retval HAL Status. + */ +HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine) +{ + /* Check the parameters */ + assert_param(IS_EXTI_LINE(ExtiLine)); + + /* Check null pointer */ + if (hexti == NULL) + { + return HAL_ERROR; + } + else + { + /* Store line number as handle private field */ + hexti->Line = ExtiLine; + + return HAL_OK; + } +} + +/** + * @} + */ + +/** @addtogroup EXTI_Exported_Functions_Group2 + * @brief EXTI IO functions. + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Handle EXTI interrupt request. + * @param hexti Exti handle. + * @retval none. + */ +void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti) +{ + uint32_t regval; + uint32_t maskline; + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Get pending bit */ + regval = (EXTI->PR & maskline); + if (regval != 0x00u) + { + /* Clear pending bit */ + EXTI->PR = maskline; + + /* Call callback */ + if (hexti->PendingCallback != NULL) + { + hexti->PendingCallback(); + } + } +} + +/** + * @brief Get interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be checked. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval 1 if interrupt is pending else 0. + */ +uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + uint32_t regval; + uint32_t linepos; + uint32_t maskline; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* Compute line mask */ + linepos = (hexti->Line & EXTI_PIN_MASK); + maskline = (1uL << linepos); + + /* return 1 if bit is set else 0 */ + regval = ((EXTI->PR & maskline) >> linepos); + return regval; +} + +/** + * @brief Clear interrupt pending bit of a dedicated line. + * @param hexti Exti handle. + * @param Edge Specify which pending edge as to be clear. + * This parameter can be one of the following values: + * @arg @ref EXTI_TRIGGER_RISING_FALLING + * This parameter is kept for compatibility with other series. + * @retval None. + */ +void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) +{ + uint32_t maskline; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + assert_param(IS_EXTI_PENDING_EDGE(Edge)); + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Clear Pending bit */ + EXTI->PR = maskline; +} + +/** + * @brief Generate a software interrupt for a dedicated line. + * @param hexti Exti handle. + * @retval None. + */ +void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti) +{ + uint32_t maskline; + + /* Check parameters */ + assert_param(IS_EXTI_LINE(hexti->Line)); + assert_param(IS_EXTI_CONFIG_LINE(hexti->Line)); + + /* Compute line mask */ + maskline = (1uL << (hexti->Line & EXTI_PIN_MASK)); + + /* Generate Software interrupt */ + EXTI->SWIER = maskline; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_EXTI_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c new file mode 100644 index 0000000..2830da0 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c @@ -0,0 +1,775 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash.c + * @author MCD Application Team + * @brief FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the internal FLASH memory: + * + Program operations functions + * + Memory Control functions + * + Peripheral Errors functions + * + @verbatim + ============================================================================== + ##### FLASH peripheral features ##### + ============================================================================== + + [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses + to the Flash memory. It implements the erase and program Flash memory operations + and the read and write protection mechanisms. + + [..] The Flash memory interface accelerates code execution with a system of instruction + prefetch and cache lines. + + [..] The FLASH main features are: + (+) Flash memory read operations + (+) Flash memory program/erase operations + (+) Read / write protections + (+) Prefetch on I-Code + (+) 64 cache lines of 128 bits on I-Code + (+) 8 cache lines of 128 bits on D-Code + + + ##### How to use this driver ##### + ============================================================================== + [..] + This driver provides functions and macros to configure and program the FLASH + memory of all STM32F4xx devices. + + (#) FLASH Memory IO Programming functions: + (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and + HAL_FLASH_Lock() functions + (++) Program functions: byte, half word, word and double word + (++) There Two modes of programming : + (+++) Polling mode using HAL_FLASH_Program() function + (+++) Interrupt mode using HAL_FLASH_Program_IT() function + + (#) Interrupts and flags management functions : + (++) Handle FLASH interrupts by calling HAL_FLASH_IRQHandler() + (++) Wait for last FLASH operation according to its status + (++) Get error flag status by calling HAL_SetErrorCode() + + [..] + In addition to these functions, this driver includes a set of macros allowing + to handle the following operations: + (+) Set the latency + (+) Enable/Disable the prefetch buffer + (+) Enable/Disable the Instruction cache and the Data cache + (+) Reset the Instruction cache and the Data cache + (+) Enable/Disable the FLASH interrupts + (+) Monitor the FLASH flags status + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASH FLASH + * @brief FLASH HAL module driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup FLASH_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup FLASH_Private_Variables + * @{ + */ +/* Variable used for Erase sectors under interruption */ +FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup FLASH_Private_Functions + * @{ + */ +/* Program operations */ +static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data); +static void FLASH_Program_Word(uint32_t Address, uint32_t Data); +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data); +static void FLASH_Program_Byte(uint32_t Address, uint8_t Data); +static void FLASH_SetErrorCode(void); + +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASH_Exported_Functions FLASH Exported Functions + * @{ + */ + +/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions + * @brief Programming operation functions + * +@verbatim + =============================================================================== + ##### Programming operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the FLASH + program operations. + +@endverbatim + * @{ + */ + +/** + * @brief Program byte, halfword, word or double word at a specified address + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed + * + * @retval HAL_StatusTypeDef HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if(status == HAL_OK) + { + if(TypeProgram == FLASH_TYPEPROGRAM_BYTE) + { + /*Program byte (8-bit) at a specified address.*/ + FLASH_Program_Byte(Address, (uint8_t) Data); + } + else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(Address, (uint16_t) Data); + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /*Program word (32-bit) at a specified address.*/ + FLASH_Program_Word(Address, (uint32_t) Data); + } + else + { + /*Program double word (64-bit) at a specified address.*/ + FLASH_Program_DoubleWord(Address, Data); + } + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the program operation is completed, disable the PG Bit */ + FLASH->CR &= (~FLASH_CR_PG); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Program byte, halfword, word or double word at a specified address with interrupt enabled. + * @param TypeProgram Indicate the way to program at a specified address. + * This parameter can be a value of @ref FLASH_Type_Program + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); + + /* Enable End of FLASH Operation interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP); + + /* Enable Error source interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR); + + pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM; + pFlash.Address = Address; + + if(TypeProgram == FLASH_TYPEPROGRAM_BYTE) + { + /*Program byte (8-bit) at a specified address.*/ + FLASH_Program_Byte(Address, (uint8_t) Data); + } + else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) + { + /*Program halfword (16-bit) at a specified address.*/ + FLASH_Program_HalfWord(Address, (uint16_t) Data); + } + else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) + { + /*Program word (32-bit) at a specified address.*/ + FLASH_Program_Word(Address, (uint32_t) Data); + } + else + { + /*Program double word (64-bit) at a specified address.*/ + FLASH_Program_DoubleWord(Address, Data); + } + + return status; +} + +/** + * @brief This function handles FLASH interrupt request. + * @retval None + */ +void HAL_FLASH_IRQHandler(void) +{ + uint32_t addresstmp = 0U; + + /* Check FLASH operation error flags */ +#if defined(FLASH_SR_RDERR) + if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) +#else + if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET) +#endif /* FLASH_SR_RDERR */ + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) + { + /*return the faulty sector*/ + addresstmp = pFlash.Sector; + pFlash.Sector = 0xFFFFFFFFU; + } + else if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /*return the faulty bank*/ + addresstmp = pFlash.Bank; + } + else + { + /*return the faulty address*/ + addresstmp = pFlash.Address; + } + + /*Save the Error code*/ + FLASH_SetErrorCode(); + + /* FLASH error interrupt user callback */ + HAL_FLASH_OperationErrorCallback(addresstmp); + + /*Stop the procedure ongoing*/ + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + + /* Check FLASH End of Operation flag */ + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + + if(pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) + { + /*Nb of sector to erased can be decreased*/ + pFlash.NbSectorsToErase--; + + /* Check if there are still sectors to erase*/ + if(pFlash.NbSectorsToErase != 0U) + { + addresstmp = pFlash.Sector; + /*Indicate user which sector has been erased*/ + HAL_FLASH_EndOfOperationCallback(addresstmp); + + /*Increment sector number*/ + pFlash.Sector++; + addresstmp = pFlash.Sector; + FLASH_Erase_Sector(addresstmp, pFlash.VoltageForErase); + } + else + { + /*No more sectors to Erase, user callback can be called.*/ + /*Reset Sector and stop Erase sectors procedure*/ + pFlash.Sector = addresstmp = 0xFFFFFFFFU; + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches() ; + + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(addresstmp); + } + } + else + { + if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) + { + /* MassErase ended. Return the selected bank */ + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches() ; + + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(pFlash.Bank); + } + else + { + /*Program ended. Return the selected address*/ + /* FLASH EOP interrupt user callback */ + HAL_FLASH_EndOfOperationCallback(pFlash.Address); + } + pFlash.ProcedureOnGoing = FLASH_PROC_NONE; + } + } + + if(pFlash.ProcedureOnGoing == FLASH_PROC_NONE) + { + /* Operation is completed, disable the PG, SER, SNB and MER Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_SER | FLASH_CR_SNB | FLASH_MER_BIT)); + + /* Disable End of FLASH Operation interrupt */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP); + + /* Disable Error source interrupt */ + __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR); + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + } +} + +/** + * @brief FLASH end of operation interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * Mass Erase: Bank number which has been requested to erase + * Sectors Erase: Sector which has been erased + * (if 0xFFFFFFFFU, it means that all the selected sectors have been erased) + * Program: Address which was selected for data program + * @retval None + */ +__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_EndOfOperationCallback could be implemented in the user file + */ +} + +/** + * @brief FLASH operation error interrupt callback + * @param ReturnValue The value saved in this parameter depends on the ongoing procedure + * Mass Erase: Bank number which has been requested to erase + * Sectors Erase: Sector number which returned an error + * Program: Address which was selected for data program + * @retval None + */ +__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(ReturnValue); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_FLASH_OperationErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions + * @brief management functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the FLASH + memory operations. + +@endverbatim + * @{ + */ + +/** + * @brief Unlock the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Unlock(void) +{ + HAL_StatusTypeDef status = HAL_OK; + + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + /* Authorize the FLASH Registers access */ + WRITE_REG(FLASH->KEYR, FLASH_KEY1); + WRITE_REG(FLASH->KEYR, FLASH_KEY2); + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } + } + + return status; +} + +/** + * @brief Locks the FLASH control register access + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_Lock(void) +{ + /* Set the LOCK Bit to lock the FLASH Registers access */ + FLASH->CR |= FLASH_CR_LOCK; + + return HAL_OK; +} + +/** + * @brief Unlock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) +{ + if((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET) + { + /* Authorizes the Option Byte register programming */ + FLASH->OPTKEYR = FLASH_OPT_KEY1; + FLASH->OPTKEYR = FLASH_OPT_KEY2; + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} + +/** + * @brief Lock the FLASH Option Control Registers access. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) +{ + /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */ + FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK; + + return HAL_OK; +} + +/** + * @brief Launch the option byte loading. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) +{ + /* Set the OPTSTRT bit in OPTCR register */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; + + /* Wait for last operation to be completed */ + return(FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE)); +} + +/** + * @} + */ + +/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State and Errors functions + * @brief Peripheral Errors functions + * +@verbatim + =============================================================================== + ##### Peripheral Errors functions ##### + =============================================================================== + [..] + This subsection permits to get in run-time Errors of the FLASH peripheral. + +@endverbatim + * @{ + */ + +/** + * @brief Get the specific FLASH error flag. + * @retval FLASH_ErrorCode: The returned value can be a combination of: + * @arg HAL_FLASH_ERROR_RD: FLASH Read Protection error flag (PCROP) + * @arg HAL_FLASH_ERROR_PGS: FLASH Programming Sequence error flag + * @arg HAL_FLASH_ERROR_PGP: FLASH Programming Parallelism error flag + * @arg HAL_FLASH_ERROR_PGA: FLASH Programming Alignment error flag + * @arg HAL_FLASH_ERROR_WRP: FLASH Write protected error flag + * @arg HAL_FLASH_ERROR_OPERATION: FLASH operation Error flag + */ +uint32_t HAL_FLASH_GetError(void) +{ + return pFlash.ErrorCode; +} + +/** + * @} + */ + +/** + * @brief Wait for a FLASH operation to complete. + * @param Timeout maximum flash operationtimeout + * @retval HAL Status + */ +HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) +{ + uint32_t tickstart = 0U; + + /* Clear Error Code */ + pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; + + /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset. + Even if the FLASH operation fails, the BUSY flag will be reset and an error + flag will be set */ + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET) + { + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) + { + return HAL_TIMEOUT; + } + } + } + + /* Check FLASH End of Operation flag */ + if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET) + { + /* Clear FLASH End of Operation pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); + } +#if defined(FLASH_SR_RDERR) + if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) +#else + if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ + FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET) +#endif /* FLASH_SR_RDERR */ + { + /*Save the error code*/ + FLASH_SetErrorCode(); + return HAL_ERROR; + } + + /* If there is no error flag set */ + return HAL_OK; + +} + +/** + * @brief Program a double word (64-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.7V to 3.6V and Vpp in the range 7V to 9V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; + FLASH->CR |= FLASH_CR_PG; + + /* Program first word */ + *(__IO uint32_t*)Address = (uint32_t)Data; + + /* Barrier to ensure programming is performed in 2 steps, in right order + (independently of compiler optimization behavior) */ + __ISB(); + + /* Program second word */ + *(__IO uint32_t*)(Address+4) = (uint32_t)(Data >> 32); +} + + +/** + * @brief Program word (32-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.7V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_Word(uint32_t Address, uint32_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint32_t*)Address = Data; +} + +/** + * @brief Program a half-word (16-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 2.1V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_HALF_WORD; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint16_t*)Address = Data; +} + +/** + * @brief Program byte (8-bit) at a specified address. + * @note This function must be used when the device voltage range is from + * 1.8V to 3.6V. + * + * @note If an erase and a program operations are requested simultaneously, + * the erase operation is performed before the program one. + * + * @param Address specifies the address to be programmed. + * @param Data specifies the data to be programmed. + * @retval None + */ +static void FLASH_Program_Byte(uint32_t Address, uint8_t Data) +{ + /* Check the parameters */ + assert_param(IS_FLASH_ADDRESS(Address)); + + /* If the previous operation is completed, proceed to program the new data */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_PSIZE_BYTE; + FLASH->CR |= FLASH_CR_PG; + + *(__IO uint8_t*)Address = Data; +} + +/** + * @brief Set the specific FLASH error flag. + * @retval None + */ +static void FLASH_SetErrorCode(void) +{ + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP; + + /* Clear FLASH write protection error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGA; + + /* Clear FLASH Programming alignment error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGAERR); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGP; + + /* Clear FLASH Programming parallelism error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGPERR); + } + + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_PGS; + + /* Clear FLASH Programming sequence error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR); + } +#if defined(FLASH_SR_RDERR) + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_RD; + + /* Clear FLASH Proprietary readout protection error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR); + } +#endif /* FLASH_SR_RDERR */ + if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR) != RESET) + { + pFlash.ErrorCode |= HAL_FLASH_ERROR_OPERATION; + + /* Clear FLASH Operation error pending bit */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR); + } +} + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c new file mode 100644 index 0000000..d99eace --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c @@ -0,0 +1,1347 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ex.c + * @author MCD Application Team + * @brief Extended FLASH HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the FLASH extension peripheral: + * + Extended programming operations functions + * + @verbatim + ============================================================================== + ##### Flash Extension features ##### + ============================================================================== + + [..] Comparing to other previous devices, the FLASH interface for STM32F427xx/437xx and + STM32F429xx/439xx devices contains the following additional features + + (+) Capacity up to 2 Mbyte with dual bank architecture supporting read-while-write + capability (RWW) + (+) Dual bank memory organization + (+) PCROP protection for all banks + + ##### How to use this driver ##### + ============================================================================== + [..] This driver provides functions to configure and program the FLASH memory + of all STM32F427xx/437xx, STM32F429xx/439xx, STM32F469xx/479xx and STM32F446xx + devices. It includes + (#) FLASH Memory Erase functions: + (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and + HAL_FLASH_Lock() functions + (++) Erase function: Erase sector, erase all sectors + (++) There are two modes of erase : + (+++) Polling Mode using HAL_FLASHEx_Erase() + (+++) Interrupt Mode using HAL_FLASHEx_Erase_IT() + + (#) Option Bytes Programming functions: Use HAL_FLASHEx_OBProgram() to : + (++) Set/Reset the write protection + (++) Set the Read protection Level + (++) Set the BOR level + (++) Program the user Option Bytes + (#) Advanced Option Bytes Programming functions: Use HAL_FLASHEx_AdvOBProgram() to : + (++) Extended space (bank 2) erase function + (++) Full FLASH space (2 Mo) erase (bank 1 and bank 2) + (++) Dual Boot activation + (++) Write protection configuration for bank 2 + (++) PCROP protection configuration and control for both banks + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASHEx FLASHEx + * @brief FLASH HAL Extension module driver + * @{ + */ + +#ifdef HAL_FLASH_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Constants + * @{ + */ +#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Variables + * @{ + */ +extern FLASH_ProcessTypeDef pFlash; +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup FLASHEx_Private_Functions + * @{ + */ +/* Option bytes control */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t Level); +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t Iwdg, uint8_t Stop, uint8_t Stdby); +static HAL_StatusTypeDef FLASH_OB_BOR_LevelConfig(uint8_t Level); +static uint8_t FLASH_OB_GetUser(void); +static uint16_t FLASH_OB_GetWRP(void); +static uint8_t FLASH_OB_GetRDP(void); +static uint8_t FLASH_OB_GetBOR(void); + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) ||\ + defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t Sector); +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t Sector); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks); +static HAL_StatusTypeDef FLASH_OB_BootConfig(uint8_t BootConfig); +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +extern HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions + * @{ + */ + +/** @defgroup FLASHEx_Exported_Functions_Group1 Extended IO operation functions + * @brief Extended IO operation functions + * +@verbatim + =============================================================================== + ##### Extended programming operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the Extension FLASH + programming operations. + +@endverbatim + * @{ + */ +/** + * @brief Perform a mass erase or erase the specified FLASH memory sectors + * @param[in] pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @param[out] SectorError pointer to variable that + * contains the configuration information on faulty sector in case of error + * (0xFFFFFFFFU means that all the sectors have been correctly erased) + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError) +{ + HAL_StatusTypeDef status = HAL_ERROR; + uint32_t index = 0U; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Initialization of SectorError variable*/ + *SectorError = 0xFFFFFFFFU; + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + FLASH_MassErase((uint8_t) pEraseInit->VoltageRange, pEraseInit->Banks); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* if the erase operation is completed, disable the MER Bit */ + FLASH->CR &= (~FLASH_MER_BIT); + } + else + { + /* Check the parameters */ + assert_param(IS_FLASH_NBSECTORS(pEraseInit->NbSectors + pEraseInit->Sector)); + + /* Erase by sector by sector to be done*/ + for (index = pEraseInit->Sector; index < (pEraseInit->NbSectors + pEraseInit->Sector); index++) + { + FLASH_Erase_Sector(index, (uint8_t) pEraseInit->VoltageRange); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + /* If the erase operation is completed, disable the SER and SNB Bits */ + CLEAR_BIT(FLASH->CR, (FLASH_CR_SER | FLASH_CR_SNB)); + + if (status != HAL_OK) + { + /* In case of error, stop erase procedure and return the faulty sector*/ + *SectorError = index; + break; + } + } + } + /* Flush the caches to be sure of the data consistency */ + FLASH_FlushCaches(); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Perform a mass erase or erase the specified FLASH memory sectors with interrupt enabled + * @param pEraseInit pointer to an FLASH_EraseInitTypeDef structure that + * contains the configuration information for the erasing. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase)); + + /* Enable End of FLASH Operation interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP); + + /* Enable Error source interrupt */ + __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR); + + /* Clear pending flags (if any) */ + __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \ + FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); + + if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) + { + /*Mass erase to be done*/ + pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE; + pFlash.Bank = pEraseInit->Banks; + FLASH_MassErase((uint8_t) pEraseInit->VoltageRange, pEraseInit->Banks); + } + else + { + /* Erase by sector to be done*/ + + /* Check the parameters */ + assert_param(IS_FLASH_NBSECTORS(pEraseInit->NbSectors + pEraseInit->Sector)); + + pFlash.ProcedureOnGoing = FLASH_PROC_SECTERASE; + pFlash.NbSectorsToErase = pEraseInit->NbSectors; + pFlash.Sector = pEraseInit->Sector; + pFlash.VoltageForErase = (uint8_t)pEraseInit->VoltageRange; + + /*Erase 1st sector and wait for IT*/ + FLASH_Erase_Sector(pEraseInit->Sector, pEraseInit->VoltageRange); + } + + return status; +} + +/** + * @brief Program option bytes + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_OPTIONBYTE(pOBInit->OptionType)); + + /*Write protection configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) + { + assert_param(IS_WRPSTATE(pOBInit->WRPState)); + if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) + { + /*Enable of Write protection on the selected Sector*/ + status = FLASH_OB_EnableWRP(pOBInit->WRPSector, pOBInit->Banks); + } + else + { + /*Disable of Write protection on the selected Sector*/ + status = FLASH_OB_DisableWRP(pOBInit->WRPSector, pOBInit->Banks); + } + } + + /*Read protection configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) + { + status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel); + } + + /*USER configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) + { + status = FLASH_OB_UserConfig(pOBInit->USERConfig & OB_IWDG_SW, + pOBInit->USERConfig & OB_STOP_NO_RST, + pOBInit->USERConfig & OB_STDBY_NO_RST); + } + + /*BOR Level configuration*/ + if ((pOBInit->OptionType & OPTIONBYTE_BOR) == OPTIONBYTE_BOR) + { + status = FLASH_OB_BOR_LevelConfig(pOBInit->BORLevel); + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + +/** + * @brief Get the Option byte configuration + * @param pOBInit pointer to an FLASH_OBInitStruct structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) +{ + pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_BOR; + + /*Get WRP*/ + pOBInit->WRPSector = (uint32_t)FLASH_OB_GetWRP(); + + /*Get RDP Level*/ + pOBInit->RDPLevel = (uint32_t)FLASH_OB_GetRDP(); + + /*Get USER*/ + pOBInit->USERConfig = (uint8_t)FLASH_OB_GetUser(); + + /*Get BOR Level*/ + pOBInit->BORLevel = (uint32_t)FLASH_OB_GetBOR(); +} + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) ||\ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Program option bytes + * @param pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that + * contains the configuration information for the programming. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_AdvOBProgram(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit) +{ + HAL_StatusTypeDef status = HAL_ERROR; + + /* Check the parameters */ + assert_param(IS_OBEX(pAdvOBInit->OptionType)); + + /*Program PCROP option byte*/ + if (((pAdvOBInit->OptionType) & OPTIONBYTE_PCROP) == OPTIONBYTE_PCROP) + { + /* Check the parameters */ + assert_param(IS_PCROPSTATE(pAdvOBInit->PCROPState)); + if ((pAdvOBInit->PCROPState) == OB_PCROP_STATE_ENABLE) + { + /*Enable of Write protection on the selected Sector*/ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + status = FLASH_OB_EnablePCROP(pAdvOBInit->Sectors); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + status = FLASH_OB_EnablePCROP(pAdvOBInit->SectorsBank1, pAdvOBInit->SectorsBank2, pAdvOBInit->Banks); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + } + else + { + /*Disable of Write protection on the selected Sector*/ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + status = FLASH_OB_DisablePCROP(pAdvOBInit->Sectors); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + status = FLASH_OB_DisablePCROP(pAdvOBInit->SectorsBank1, pAdvOBInit->SectorsBank2, pAdvOBInit->Banks); +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + } + } + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + /*Program BOOT config option byte*/ + if (((pAdvOBInit->OptionType) & OPTIONBYTE_BOOTCONFIG) == OPTIONBYTE_BOOTCONFIG) + { + status = FLASH_OB_BootConfig(pAdvOBInit->BootConfig); + } +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + + return status; +} + +/** + * @brief Get the OBEX byte configuration + * @param pAdvOBInit pointer to an FLASH_AdvOBProgramInitTypeDef structure that + * contains the configuration information for the programming. + * + * @retval None + */ +void HAL_FLASHEx_AdvOBGetConfig(FLASH_AdvOBProgramInitTypeDef *pAdvOBInit) +{ +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) + /*Get Sector*/ + pAdvOBInit->Sectors = (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); +#else /* STM32F427xx || STM32F437xx || STM32F429xx|| STM32F439xx || STM32F469xx || STM32F479xx */ + /*Get Sector for Bank1*/ + pAdvOBInit->SectorsBank1 = (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); + + /*Get Sector for Bank2*/ + pAdvOBInit->SectorsBank2 = (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); + + /*Get Boot config OB*/ + pAdvOBInit->BootConfig = *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS; +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ +} + +/** + * @brief Select the Protection Mode + * + * @note After PCROP activated Option Byte modification NOT POSSIBLE! excepted + * Global Read Out Protection modification (from level1 to level0) + * @note Once SPRMOD bit is active unprotection of a protected sector is not possible + * @note Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F401xx/STM32F411xx/STM32F446xx/ + * STM32F469xx/STM32F479xx/STM32F412xx/STM32F413xx devices. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OB_SelectPCROP(void) +{ + uint8_t optiontmp = 0xFF; + + /* Mask SPRMOD bit */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE3_ADDRESS) & (uint8_t)0x7F); + + /* Update Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE3_ADDRESS = (uint8_t)(OB_PCROP_SELECTED | optiontmp); + + return HAL_OK; +} + +/** + * @brief Deselect the Protection Mode + * + * @note After PCROP activated Option Byte modification NOT POSSIBLE! excepted + * Global Read Out Protection modification (from level1 to level0) + * @note Once SPRMOD bit is active unprotection of a protected sector is not possible + * @note Read a protected sector will set RDERR Flag and write a protected sector will set WRPERR Flag + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F401xx/STM32F411xx/STM32F446xx/ + * STM32F469xx/STM32F479xx/STM32F412xx/STM32F413xx devices. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_OB_DeSelectPCROP(void) +{ + uint8_t optiontmp = 0xFF; + + /* Mask SPRMOD bit */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE3_ADDRESS) & (uint8_t)0x7F); + + /* Update Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE3_ADDRESS = (uint8_t)(OB_PCROP_DESELECTED | optiontmp); + + return HAL_OK; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F401xC || STM32F401xE || STM32F410xx ||\ + STM32F411xE || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Returns the FLASH Write Protection Option Bytes value for Bank 2 + * @note This function can be used only for STM32F42xxx/STM32F43xxx/STM32F469xx/STM32F479xx devices. + * @retval The FLASH Write Protection Option Bytes value + */ +uint16_t HAL_FLASHEx_OB_GetBank2WRP(void) +{ + /* Return the FLASH write protection Register value */ + return (*(__IO uint16_t *)(OPTCR1_BYTE2_ADDRESS)); +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +/** + * @} + */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Full erase of FLASH memory sectors + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @param Banks Banks to be erased + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * @arg FLASH_BANK_2: Bank2 to be erased + * @arg FLASH_BANK_BOTH: Bank1 and Bank2 to be erased + * + * @retval HAL Status + */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks) +{ + /* Check the parameters */ + assert_param(IS_VOLTAGERANGE(VoltageRange)); + assert_param(IS_FLASH_BANK(Banks)); + + /* if the previous operation is completed, proceed to erase all sectors */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + + if (Banks == FLASH_BANK_BOTH) + { + /* bank1 & bank2 will be erased*/ + FLASH->CR |= FLASH_MER_BIT; + } + else if (Banks == FLASH_BANK_1) + { + /*Only bank1 will be erased*/ + FLASH->CR |= FLASH_CR_MER1; + } + else + { + /*Only bank2 will be erased*/ + FLASH->CR |= FLASH_CR_MER2; + } + FLASH->CR |= FLASH_CR_STRT | ((uint32_t)VoltageRange << 8U); +} + +/** + * @brief Erase the specified FLASH memory sector + * @param Sector FLASH sector to erase + * The value of this parameter depend on device used within the same series + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval None + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0U; + + /* Check the parameters */ + assert_param(IS_FLASH_SECTOR(Sector)); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if (VoltageRange == FLASH_VOLTAGE_RANGE_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + + /* Need to add offset of 4 when sector higher than FLASH_SECTOR_11 */ + if (Sector > FLASH_SECTOR_11) + { + Sector += 4U; + } + /* If the previous operation is completed, proceed to erase the sector */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= tmp_psize; + CLEAR_BIT(FLASH->CR, FLASH_CR_SNB); + FLASH->CR |= FLASH_CR_SER | (Sector << FLASH_CR_SNB_Pos); + FLASH->CR |= FLASH_CR_STRT; +} + +/** + * @brief Enable the write protection of the desired bank1 or bank 2 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * This parameter can be one of the following values: + * @arg WRPSector: A value between OB_WRP_SECTOR_0 and OB_WRP_SECTOR_23 + * @arg OB_WRP_SECTOR_All + * @note BANK2 starts from OB_WRP_SECTOR_12 + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL FLASH State + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if (((WRPSector == OB_WRP_SECTOR_All) && ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH))) || + (WRPSector < OB_WRP_SECTOR_12)) + { + if (WRPSector == OB_WRP_SECTOR_All) + { + /*Write protection on all sector of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + else + { + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~WRPSector); + } + } + else + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + + /*Write protection on all sector of BANK2*/ + if ((WRPSector == OB_WRP_SECTOR_All) && (Banks == FLASH_BANK_BOTH)) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~(WRPSector >> 12)); + } + } + + } + return status; +} + +/** + * @brief Disable the write protection of the desired bank1 or bank 2 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * This parameter can be one of the following values: + * @arg WRPSector: A value between OB_WRP_SECTOR_0 and OB_WRP_SECTOR_23 + * @arg OB_WRP_Sector_All + * @note BANK2 starts from OB_WRP_SECTOR_12 + * + * @param Banks Disable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * @arg FLASH_BANK_2: Bank2 to be erased + * @arg FLASH_BANK_BOTH: Bank1 and Bank2 to be erased + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if (((WRPSector == OB_WRP_SECTOR_All) && ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH))) || + (WRPSector < OB_WRP_SECTOR_12)) + { + if (WRPSector == OB_WRP_SECTOR_All) + { + /*Write protection on all sector of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + else + { + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)WRPSector; + } + } + else + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + + /*Write protection on all sector of BANK2*/ + if ((WRPSector == OB_WRP_SECTOR_All) && (Banks == FLASH_BANK_BOTH)) + { + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)(WRPSector >> 12); + } + } + + } + + return status; +} + +/** + * @brief Configure the Dual Bank Boot. + * + * @note This function can be used only for STM32F42xxx/43xxx devices. + * + * @param BootConfig specifies the Dual Bank Boot Option byte. + * This parameter can be one of the following values: + * @arg OB_Dual_BootEnabled: Dual Bank Boot Enable + * @arg OB_Dual_BootDisabled: Dual Bank Boot Disabled + * @retval None + */ +static HAL_StatusTypeDef FLASH_OB_BootConfig(uint8_t BootConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_BOOT(BootConfig)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /* Set Dual Bank Boot */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BFB2); + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= BootConfig; + } + + return status; +} + +/** + * @brief Enable the read/write protection (PCROP) of the desired + * sectors of Bank 1 and/or Bank 2. + * @note This function can be used only for STM32F42xxx/43xxx devices. + * @param SectorBank1 Specifies the sector(s) to be read/write protected or unprotected for bank1. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_0 and OB_PCROP_SECTOR_11 + * @arg OB_PCROP_SECTOR__All + * @param SectorBank2 Specifies the sector(s) to be read/write protected or unprotected for bank2. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_12 and OB_PCROP_SECTOR_23 + * @arg OB_PCROP_SECTOR__All + * @param Banks Enable PCROP protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH)) + { + assert_param(IS_OB_PCROP(SectorBank1)); + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)SectorBank1; + } + else + { + assert_param(IS_OB_PCROP(SectorBank2)); + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)SectorBank2; + } + + /*Write protection on all sector of BANK2*/ + if (Banks == FLASH_BANK_BOTH) + { + assert_param(IS_OB_PCROP(SectorBank2)); + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS |= (uint16_t)SectorBank2; + } + } + + } + + return status; +} + + +/** + * @brief Disable the read/write protection (PCROP) of the desired + * sectors of Bank 1 and/or Bank 2. + * @note This function can be used only for STM32F42xxx/43xxx devices. + * @param SectorBank1 specifies the sector(s) to be read/write protected or unprotected for bank1. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_0 and OB_PCROP_SECTOR_11 + * @arg OB_PCROP_SECTOR__All + * @param SectorBank2 Specifies the sector(s) to be read/write protected or unprotected for bank2. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_SECTOR_12 and OB_PCROP_SECTOR_23 + * @arg OB_PCROP_SECTOR__All + * @param Banks Disable PCROP protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * @arg FLASH_BANK_2: WRP on all sectors of bank2 + * @arg FLASH_BANK_BOTH: WRP on all sectors of bank1 & bank2 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t SectorBank1, uint32_t SectorBank2, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + if ((Banks == FLASH_BANK_1) || (Banks == FLASH_BANK_BOTH)) + { + assert_param(IS_OB_PCROP(SectorBank1)); + /*Write protection done on sectors of BANK1*/ + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~SectorBank1); + } + else + { + /*Write protection done on sectors of BANK2*/ + assert_param(IS_OB_PCROP(SectorBank2)); + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~SectorBank2); + } + + /*Write protection on all sector of BANK2*/ + if (Banks == FLASH_BANK_BOTH) + { + assert_param(IS_OB_PCROP(SectorBank2)); + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /*Write protection done on sectors of BANK2*/ + *(__IO uint16_t *)OPTCR1_BYTE2_ADDRESS &= (~SectorBank2); + } + } + + } + + return status; + +} + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) ||\ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\ + defined(STM32F423xx) +/** + * @brief Mass erase of FLASH memory + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @param Banks Banks to be erased + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: Bank1 to be erased + * + * @retval None + */ +static void FLASH_MassErase(uint8_t VoltageRange, uint32_t Banks) +{ + /* Check the parameters */ + assert_param(IS_VOLTAGERANGE(VoltageRange)); + assert_param(IS_FLASH_BANK(Banks)); + + /* If the previous operation is completed, proceed to erase all sectors */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= FLASH_CR_MER; + FLASH->CR |= FLASH_CR_STRT | ((uint32_t)VoltageRange << 8U); +} + +/** + * @brief Erase the specified FLASH memory sector + * @param Sector FLASH sector to erase + * The value of this parameter depend on device used within the same series + * @param VoltageRange The device voltage range which defines the erase parallelism. + * This parameter can be one of the following values: + * @arg FLASH_VOLTAGE_RANGE_1: when the device voltage range is 1.8V to 2.1V, + * the operation will be done by byte (8-bit) + * @arg FLASH_VOLTAGE_RANGE_2: when the device voltage range is 2.1V to 2.7V, + * the operation will be done by half word (16-bit) + * @arg FLASH_VOLTAGE_RANGE_3: when the device voltage range is 2.7V to 3.6V, + * the operation will be done by word (32-bit) + * @arg FLASH_VOLTAGE_RANGE_4: when the device voltage range is 2.7V to 3.6V + External Vpp, + * the operation will be done by double word (64-bit) + * + * @retval None + */ +void FLASH_Erase_Sector(uint32_t Sector, uint8_t VoltageRange) +{ + uint32_t tmp_psize = 0U; + + /* Check the parameters */ + assert_param(IS_FLASH_SECTOR(Sector)); + assert_param(IS_VOLTAGERANGE(VoltageRange)); + + if (VoltageRange == FLASH_VOLTAGE_RANGE_1) + { + tmp_psize = FLASH_PSIZE_BYTE; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_2) + { + tmp_psize = FLASH_PSIZE_HALF_WORD; + } + else if (VoltageRange == FLASH_VOLTAGE_RANGE_3) + { + tmp_psize = FLASH_PSIZE_WORD; + } + else + { + tmp_psize = FLASH_PSIZE_DOUBLE_WORD; + } + + /* If the previous operation is completed, proceed to erase the sector */ + CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); + FLASH->CR |= tmp_psize; + CLEAR_BIT(FLASH->CR, FLASH_CR_SNB); + FLASH->CR |= FLASH_CR_SER | (Sector << FLASH_CR_SNB_Pos); + FLASH->CR |= FLASH_CR_STRT; +} + +/** + * @brief Enable the write protection of the desired bank 1 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * The value of this parameter depend on device used within the same series + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~WRPSector); + } + + return status; +} + +/** + * @brief Disable the write protection of the desired bank 1 sectors + * + * @note When the memory read protection level is selected (RDP level = 1), + * it is not possible to program or erase the flash sector i if CortexM4 + * debug features are connected or boot code is executed in RAM, even if nWRPi = 1 + * @note Active value of nWRPi bits is inverted when PCROP mode is active (SPRMOD =1). + * + * @param WRPSector specifies the sector(s) to be write protected. + * The value of this parameter depend on device used within the same series + * + * @param Banks Enable write protection on all the sectors for the specific bank + * This parameter can be one of the following values: + * @arg FLASH_BANK_1: WRP on all sectors of bank1 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WRPSector, uint32_t Banks) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_WRP_SECTOR(WRPSector)); + assert_param(IS_FLASH_BANK(Banks)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)WRPSector; + } + + return status; +} +#endif /* STM32F40xxx || STM32F41xxx || STM32F401xx || STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Enable the read/write protection (PCROP) of the desired sectors. + * @note This function can be used only for STM32F401xx devices. + * @param Sector specifies the sector(s) to be read/write protected or unprotected. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_Sector0 and OB_PCROP_Sector5 + * @arg OB_PCROP_Sector_All + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_EnablePCROP(uint32_t Sector) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_PCROP(Sector)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS |= (uint16_t)Sector; + } + + return status; +} + + +/** + * @brief Disable the read/write protection (PCROP) of the desired sectors. + * @note This function can be used only for STM32F401xx devices. + * @param Sector specifies the sector(s) to be read/write protected or unprotected. + * This parameter can be one of the following values: + * @arg OB_PCROP: A value between OB_PCROP_Sector0 and OB_PCROP_Sector5 + * @arg OB_PCROP_Sector_All + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_DisablePCROP(uint32_t Sector) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_PCROP(Sector)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint16_t *)OPTCR_BYTE2_ADDRESS &= (~Sector); + } + + return status; + +} +#endif /* STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx + STM32F413xx || STM32F423xx */ + +/** + * @brief Set the read protection level. + * @param Level specifies the read protection level. + * This parameter can be one of the following values: + * @arg OB_RDP_LEVEL_0: No protection + * @arg OB_RDP_LEVEL_1: Read protection of the memory + * @arg OB_RDP_LEVEL_2: Full chip protection + * + * @note WARNING: When enabling OB_RDP level 2 it's no more possible to go back to level 1 or 0 + * + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t Level) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_RDP_LEVEL(Level)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + *(__IO uint8_t *)OPTCR_BYTE1_ADDRESS = Level; + } + + return status; +} + +/** + * @brief Program the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. + * @param 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 Stop Reset event when entering STOP mode. + * This parameter can be one of the following values: + * @arg OB_STOP_NO_RST: No reset generated when entering in STOP + * @arg OB_STOP_RST: Reset generated when entering in STOP + * @param Stdby Reset event when entering Standby mode. + * This parameter can be one of the following values: + * @arg OB_STDBY_NO_RST: No reset generated when entering in STANDBY + * @arg OB_STDBY_RST: Reset generated when entering in STANDBY + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t Iwdg, uint8_t Stop, uint8_t Stdby) +{ + uint8_t optiontmp = 0xFF; + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_OB_IWDG_SOURCE(Iwdg)); + assert_param(IS_OB_STOP_SOURCE(Stop)); + assert_param(IS_OB_STDBY_SOURCE(Stdby)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /* Mask OPTLOCK, OPTSTRT, BOR_LEV and BFB2 bits */ + optiontmp = (uint8_t)((*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS) & (uint8_t)0x1F); + + /* Update User Option Byte */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS = Iwdg | (uint8_t)(Stdby | (uint8_t)(Stop | ((uint8_t)optiontmp))); + } + + return status; +} + +/** + * @brief Set the BOR Level. + * @param Level specifies the Option Bytes BOR Reset Level. + * This parameter can be one of the following values: + * @arg OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * @arg OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * @arg OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * @arg OB_BOR_OFF: Supply voltage ranges from 1.62 to 2.1 V + * @retval HAL Status + */ +static HAL_StatusTypeDef FLASH_OB_BOR_LevelConfig(uint8_t Level) +{ + /* Check the parameters */ + assert_param(IS_OB_BOR_LEVEL(Level)); + + /* Set the BOR Level */ + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS &= (~FLASH_OPTCR_BOR_LEV); + *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= Level; + + return HAL_OK; + +} + +/** + * @brief Return the FLASH User Option Byte value. + * @retval uint8_t FLASH User Option Bytes values: IWDG_SW(Bit0), RST_STOP(Bit1) + * and RST_STDBY(Bit2). + */ +static uint8_t FLASH_OB_GetUser(void) +{ + /* Return the User Option Byte */ + return ((uint8_t)(FLASH->OPTCR & 0xE0)); +} + +/** + * @brief Return the FLASH Write Protection Option Bytes value. + * @retval uint16_t FLASH Write Protection Option Bytes value + */ +static uint16_t FLASH_OB_GetWRP(void) +{ + /* Return the FLASH write protection Register value */ + return (*(__IO uint16_t *)(OPTCR_BYTE2_ADDRESS)); +} + +/** + * @brief Returns the FLASH Read Protection level. + * @retval FLASH ReadOut Protection Status: + * This parameter can be one of the following values: + * @arg OB_RDP_LEVEL_0: No protection + * @arg OB_RDP_LEVEL_1: Read protection of the memory + * @arg OB_RDP_LEVEL_2: Full chip protection + */ +static uint8_t FLASH_OB_GetRDP(void) +{ + uint8_t readstatus = OB_RDP_LEVEL_0; + + if (*(__IO uint8_t *)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_2) + { + readstatus = OB_RDP_LEVEL_2; + } + else if (*(__IO uint8_t *)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_0) + { + readstatus = OB_RDP_LEVEL_0; + } + else + { + readstatus = OB_RDP_LEVEL_1; + } + + return readstatus; +} + +/** + * @brief Returns the FLASH BOR level. + * @retval uint8_t The FLASH BOR level: + * - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V + * - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V + * - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V + * - OB_BOR_OFF : Supply voltage ranges from 1.62 to 2.1 V + */ +static uint8_t FLASH_OB_GetBOR(void) +{ + /* Return the FLASH BOR level */ + return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0C); +} + +/** + * @brief Flush the instruction and data caches + * @retval None + */ +void FLASH_FlushCaches(void) +{ + /* Flush instruction cache */ + if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != RESET) + { + /* Disable instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_DISABLE(); + /* Reset instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_RESET(); + /* Enable instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); + } + + /* Flush data cache */ + if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != RESET) + { + /* Disable data cache */ + __HAL_FLASH_DATA_CACHE_DISABLE(); + /* Reset data cache */ + __HAL_FLASH_DATA_CACHE_RESET(); + /* Enable data cache */ + __HAL_FLASH_DATA_CACHE_ENABLE(); + } +} + +/** + * @} + */ + +#endif /* HAL_FLASH_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c new file mode 100644 index 0000000..952595b --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c @@ -0,0 +1,172 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_flash_ramfunc.c + * @author MCD Application Team + * @brief FLASH RAMFUNC module driver. + * This file provides a FLASH firmware functions which should be + * executed from internal SRAM + * + Stop/Start the flash interface while System Run + * + Enable/Disable the flash sleep while System Run + @verbatim + ============================================================================== + ##### APIs executed from Internal RAM ##### + ============================================================================== + [..] + *** ARM Compiler *** + -------------------- + [..] RAM functions are defined using the toolchain options. + Functions that are be executed in RAM should reside in a separate + source module. Using the 'Options for File' dialog you can simply change + the 'Code / Const' area of a module to a memory space in physical RAM. + Available memory areas are declared in the 'Target' tab of the + Options for Target' dialog. + + *** ICCARM Compiler *** + ----------------------- + [..] RAM functions are defined using a specific toolchain keyword "__ramfunc". + + *** GNU Compiler *** + -------------------- + [..] RAM functions are defined using a specific toolchain attribute + "__attribute__((section(".RamFunc")))". + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup FLASH_RAMFUNC FLASH RAMFUNC + * @brief FLASH functions executed from RAM + * @{ + */ +#ifdef HAL_FLASH_MODULE_ENABLED +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ + defined(STM32F412Rx) || defined(STM32F412Cx) + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup FLASH_RAMFUNC_Exported_Functions FLASH RAMFUNC Exported Functions + * @{ + */ + +/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group1 Peripheral features functions executed from internal RAM + * @brief Peripheral Extended features functions + * +@verbatim + + =============================================================================== + ##### ramfunc functions ##### + =============================================================================== + [..] + This subsection provides a set of functions that should be executed from RAM + transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Stop the flash interface while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Stop the flash interface while System Run */ + SET_BIT(PWR->CR, PWR_CR_FISSR); + + return HAL_OK; +} + +/** + * @brief Start the flash interface while System Run + * @note This mode is only available for STM32F411xx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Start the flash interface while System Run */ + CLEAR_BIT(PWR->CR, PWR_CR_FISSR); + + return HAL_OK; +} + +/** + * @brief Enable the flash sleep while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode could n't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Enable the flash sleep while System Run */ + SET_BIT(PWR->CR, PWR_CR_FMSSR); + + return HAL_OK; +} + +/** + * @brief Disable the flash sleep while System Run + * @note This mode is only available for STM32F41xxx/STM32F446xx devices. + * @note This mode couldn't be set while executing with the flash itself. + * It should be done with specific routine executed from RAM. + * @retval HAL status + */ +__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void) +{ + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Disable the flash sleep while System Run */ + CLEAR_BIT(PWR->CR, PWR_CR_FMSSR); + + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ +#endif /* HAL_FLASH_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c new file mode 100644 index 0000000..b3ce9bb --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c @@ -0,0 +1,533 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_gpio.c + * @author MCD Application Team + * @brief GPIO HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the General Purpose Input/Output (GPIO) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### GPIO Peripheral features ##### + ============================================================================== + [..] + Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each + port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software + in several modes: + (+) Input mode + (+) Analog mode + (+) Output mode + (+) Alternate function mode + (+) External interrupt/event lines + + [..] + During and just after reset, the alternate functions and external interrupt + lines are not active and the I/O ports are configured in input floating mode. + + [..] + All GPIO pins have weak internal pull-up and pull-down resistors, which can be + activated or not. + + [..] + In Output or Alternate mode, each IO can be configured on open-drain or push-pull + type and the IO speed can be selected depending on the VDD value. + + [..] + All ports have external interrupt/event capability. To use external interrupt + lines, the port must be configured in input mode. All available GPIO pins are + connected to the 16 external interrupt/event lines from EXTI0 to EXTI15. + + [..] + The external interrupt/event controller consists of up to 23 edge detectors + (16 lines are connected to GPIO) for generating event/interrupt requests (each + input line can be independently configured to select the type (interrupt or event) + and the corresponding trigger event (rising or falling or both). Each line can + also be masked independently. + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE(). + + (#) Configure the GPIO pin(s) using HAL_GPIO_Init(). + (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure + (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef + structure. + (++) In case of Output or alternate function mode selection: the speed is + configured through "Speed" member from GPIO_InitTypeDef structure. + (++) In alternate mode is selection, the alternate function connected to the IO + is configured through "Alternate" member from GPIO_InitTypeDef structure. + (++) Analog mode is required when a pin is to be used as ADC channel + or DAC output. + (++) In case of external interrupt/event selection the "Mode" member from + GPIO_InitTypeDef structure select the type (interrupt or event) and + the corresponding trigger event (rising or falling or both). + + (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority + mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using + HAL_NVIC_EnableIRQ(). + + (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin(). + + (#) To set/reset the level of a pin configured in output mode use + HAL_GPIO_WritePin()/HAL_GPIO_TogglePin(). + + (#) To lock pin configuration until next reset use HAL_GPIO_LockPin(). + + + (#) During and just after reset, the alternate functions are not + active and the GPIO pins are configured in input floating mode (except JTAG + pins). + + (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose + (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has + priority over the GPIO function. + + (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as + general purpose PH0 and PH1, respectively, when the HSE oscillator is off. + The HSE has priority over the GPIO function. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup GPIO GPIO + * @brief GPIO HAL module driver + * @{ + */ + +#ifdef HAL_GPIO_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup GPIO_Private_Constants GPIO Private Constants + * @{ + */ + +#define GPIO_NUMBER 16U +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GPIO_Exported_Functions GPIO Exported Functions + * @{ + */ + +/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to initialize and de-initialize the GPIOs + to be ready for use. + +@endverbatim + * @{ + */ + + +/** + * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains + * the configuration information for the specified GPIO peripheral. + * @retval None + */ +void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) +{ + uint32_t position; + uint32_t ioposition = 0x00U; + uint32_t iocurrent = 0x00U; + uint32_t temp = 0x00U; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); + assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); + + /* Configure the port pins */ + for(position = 0U; position < GPIO_NUMBER; position++) + { + /* Get the IO position */ + ioposition = 0x01U << position; + /* Get the current IO position */ + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + + if(iocurrent == ioposition) + { + /*--------------------- GPIO Mode Configuration ------------------------*/ + /* In case of Output or Alternate function mode selection */ + if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \ + (GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + { + /* Check the Speed parameter */ + assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); + /* Configure the IO Speed */ + temp = GPIOx->OSPEEDR; + temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); + temp |= (GPIO_Init->Speed << (position * 2U)); + GPIOx->OSPEEDR = temp; + + /* Configure the IO Output Type */ + temp = GPIOx->OTYPER; + temp &= ~(GPIO_OTYPER_OT_0 << position) ; + temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); + GPIOx->OTYPER = temp; + } + + if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) + { + /* Check the parameters */ + assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); + + /* Activate the Pull-up or Pull down resistor for the current IO */ + temp = GPIOx->PUPDR; + temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); + temp |= ((GPIO_Init->Pull) << (position * 2U)); + GPIOx->PUPDR = temp; + } + + /* In case of Alternate function mode selection */ + if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) + { + /* Check the Alternate function parameter */ + assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); + /* Configure Alternate function mapped with the current IO */ + temp = GPIOx->AFR[position >> 3U]; + temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; + temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U)); + GPIOx->AFR[position >> 3U] = temp; + } + + /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ + temp = GPIOx->MODER; + temp &= ~(GPIO_MODER_MODER0 << (position * 2U)); + temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U)); + GPIOx->MODER = temp; + + /*--------------------- EXTI Mode Configuration ------------------------*/ + /* Configure the External Interrupt or event for the current IO */ + if((GPIO_Init->Mode & EXTI_MODE) != 0x00U) + { + /* Enable SYSCFG Clock */ + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + temp = SYSCFG->EXTICR[position >> 2U]; + temp &= ~(0x0FU << (4U * (position & 0x03U))); + temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); + SYSCFG->EXTICR[position >> 2U] = temp; + + /* Clear Rising Falling edge configuration */ + temp = EXTI->RTSR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U) + { + temp |= iocurrent; + } + EXTI->RTSR = temp; + + temp = EXTI->FTSR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U) + { + temp |= iocurrent; + } + EXTI->FTSR = temp; + + temp = EXTI->EMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_EVT) != 0x00U) + { + temp |= iocurrent; + } + EXTI->EMR = temp; + + /* Clear EXTI line configuration */ + temp = EXTI->IMR; + temp &= ~((uint32_t)iocurrent); + if((GPIO_Init->Mode & EXTI_IT) != 0x00U) + { + temp |= iocurrent; + } + EXTI->IMR = temp; + } + } + } +} + +/** + * @brief De-initializes the GPIOx peripheral registers to their default reset values. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @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). + * @retval None + */ +void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) +{ + uint32_t position; + uint32_t ioposition = 0x00U; + uint32_t iocurrent = 0x00U; + uint32_t tmp = 0x00U; + + /* Check the parameters */ + assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); + + /* Configure the port pins */ + for(position = 0U; position < GPIO_NUMBER; position++) + { + /* Get the IO position */ + ioposition = 0x01U << position; + /* Get the current IO position */ + iocurrent = (GPIO_Pin) & ioposition; + + if(iocurrent == ioposition) + { + /*------------------------- EXTI Mode Configuration --------------------*/ + tmp = SYSCFG->EXTICR[position >> 2U]; + tmp &= (0x0FU << (4U * (position & 0x03U))); + if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)))) + { + /* Clear EXTI line configuration */ + EXTI->IMR &= ~((uint32_t)iocurrent); + EXTI->EMR &= ~((uint32_t)iocurrent); + + /* Clear Rising Falling edge configuration */ + EXTI->FTSR &= ~((uint32_t)iocurrent); + EXTI->RTSR &= ~((uint32_t)iocurrent); + + /* Configure the External Interrupt or event for the current IO */ + tmp = 0x0FU << (4U * (position & 0x03U)); + SYSCFG->EXTICR[position >> 2U] &= ~tmp; + } + + /*------------------------- GPIO Mode Configuration --------------------*/ + /* Configure IO Direction in Input Floating Mode */ + GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2U)); + + /* Configure the default Alternate Function in current IO */ + GPIOx->AFR[position >> 3U] &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; + + /* Deactivate the Pull-up and Pull-down resistor for the current IO */ + GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); + + /* Configure the default value IO Output Type */ + GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ; + + /* Configure the default value for IO Speed */ + GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); + } + } +} + +/** + * @} + */ + +/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions + * @brief GPIO Read and Write + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + +@endverbatim + * @{ + */ + +/** + * @brief Reads the specified input port pin. + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @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. + */ +GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIO_PinState bitstatus; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) + { + bitstatus = GPIO_PIN_SET; + } + else + { + bitstatus = GPIO_PIN_RESET; + } + return bitstatus; +} + +/** + * @brief Sets or clears the selected data port bit. + * + * @note This function uses GPIOx_BSRR register to allow atomic read/modify + * accesses. In this way, there is no risk of an IRQ occurring between + * the read and the modify access. + * + * @param GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @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 PinState specifies the value to be written to the selected bit. + * This parameter can be one of the GPIO_PinState enum values: + * @arg GPIO_PIN_RESET: to clear the port pin + * @arg GPIO_PIN_SET: to set the port pin + * @retval None + */ +void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) +{ + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + assert_param(IS_GPIO_PIN_ACTION(PinState)); + + if(PinState != GPIO_PIN_RESET) + { + GPIOx->BSRR = GPIO_Pin; + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; + } +} + +/** + * @brief Toggles the specified GPIO pins. + * @param GPIOx Where x can be (A..K) to select the GPIO peripheral for STM32F429X device or + * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. + * @param GPIO_Pin Specifies the pins to be toggled. + * @retval None + */ +void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t odr; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* get current Output Data Register value */ + odr = GPIOx->ODR; + + /* Set selected pins that were at low level, and reset ones that were high */ + GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); +} + +/** + * @brief Locks GPIO Pins configuration registers. + * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, + * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH. + * @note The configuration of the locked GPIO pins can no longer be modified + * until the next reset. + * @param GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F4 family + * @param GPIO_Pin specifies the port bit to be locked. + * This parameter can be any combination of GPIO_PIN_x where x can be (0..15). + * @retval None + */ +HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + __IO uint32_t tmp = GPIO_LCKR_LCKK; + + /* Check the parameters */ + assert_param(IS_GPIO_PIN(GPIO_Pin)); + + /* Apply lock key write sequence */ + tmp |= GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ + GPIOx->LCKR = GPIO_Pin; + /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ + GPIOx->LCKR = tmp; + /* Read LCKR register. This read is mandatory to complete key lock sequence */ + tmp = GPIOx->LCKR; + + /* Read again in order to confirm lock is active */ + if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET) + { + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief This function handles EXTI interrupt request. + * @param GPIO_Pin Specifies the pins connected EXTI line + * @retval None + */ +void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) +{ + /* EXTI line interrupt detected */ + if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) + { + __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); + HAL_GPIO_EXTI_Callback(GPIO_Pin); + } +} + +/** + * @brief EXTI line detection callbacks. + * @param GPIO_Pin Specifies the pins connected EXTI line + * @retval None + */ +__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(GPIO_Pin); + /* NOTE: This function Should not be modified, when the callback is needed, + the HAL_GPIO_EXTI_Callback could be implemented in the user file + */ +} + +/** + * @} + */ + + +/** + * @} + */ + +#endif /* HAL_GPIO_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c new file mode 100644 index 0000000..b4bb483 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c @@ -0,0 +1,571 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr.c + * @author MCD Application Team + * @brief PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Power Controller (PWR) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PWR PWR + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup PWR_Private_Constants + * @{ + */ + +/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask + * @{ + */ +#define PVD_MODE_IT 0x00010000U +#define PVD_MODE_EVT 0x00020000U +#define PVD_RISING_EDGE 0x00000001U +#define PVD_FALLING_EDGE 0x00000002U +/** + * @} + */ + +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup PWR_Exported_Functions PWR Exported Functions + * @{ + */ + +/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + After reset, the backup domain (RTC registers, RTC backup data + registers and backup SRAM) is protected against possible unwanted + write accesses. + To enable access to the RTC Domain and RTC registers, proceed as follows: + (+) Enable the Power Controller (PWR) APB1 interface clock using the + __HAL_RCC_PWR_CLK_ENABLE() macro. + (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function. + +@endverbatim + * @{ + */ + +/** + * @brief Deinitializes the HAL PWR peripheral registers to their default reset values. + * @retval None + */ +void HAL_PWR_DeInit(void) +{ + __HAL_RCC_PWR_FORCE_RESET(); + __HAL_RCC_PWR_RELEASE_RESET(); +} + +/** + * @brief Enables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @note The following sequence is required to bypass the delay between + * DBP bit programming and the effective enabling of the backup domain. + * Please check the Errata Sheet for more details under "Possible delay + * in backup domain protection disabling/enabling after programming the + * DBP bit" section. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + __IO uint32_t dummyread; + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE; + dummyread = PWR->CR; + UNUSED(dummyread); +} + +/** + * @brief Disables access to the backup domain (RTC registers, RTC + * backup data registers and backup SRAM). + * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @note The following sequence is required to bypass the delay between + * DBP bit programming and the effective disabling of the backup domain. + * Please check the Errata Sheet for more details under "Possible delay + * in backup domain protection disabling/enabling after programming the + * DBP bit" section. + * @retval None + */ +void HAL_PWR_DisableBkUpAccess(void) +{ + __IO uint32_t dummyread; + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)DISABLE; + dummyread = PWR->CR; + UNUSED(dummyread); +} + +/** + * @} + */ + +/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions + * @brief Low Power modes configuration functions + * +@verbatim + + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + + *** PVD configuration *** + ========================= + [..] + (+) The PVD is used to monitor the VDD power supply by comparing it to a + threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR). + (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower + than the PVD threshold. This event is internally connected to the EXTI + line16 and can generate an interrupt if enabled. This is done through + __HAL_PWR_PVD_EXTI_ENABLE_IT() macro. + (+) The PVD is stopped in Standby mode. + + *** Wake-up pin configuration *** + ================================ + [..] + (+) Wake-up pin is used to wake up the system from Standby mode. This pin is + forced in input pull-down configuration and is active on rising edges. + (+) There is one Wake-up pin: Wake-up Pin 1 on PA.00. + (++) For STM32F446xx there are two Wake-Up pins: Pin1 on PA.00 and Pin2 on PC.13 + (++) For STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx there are three Wake-Up pins: Pin1 on PA.00, Pin2 on PC.00 and Pin3 on PC.01 + + *** Low Power modes configuration *** + ===================================== + [..] + The devices feature 3 low-power modes: + (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running. + (+) Stop mode: all clocks are stopped, regulator running, regulator + in low power mode + (+) Standby mode: 1.2V domain powered off. + + *** Sleep mode *** + ================== + [..] + (+) Entry: + The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI) + functions with + (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + + -@@- The Regulator parameter is not used for the STM32F4 family + and is kept as parameter just to maintain compatibility with the + lower power families (STM32L). + (+) Exit: + Any peripheral interrupt acknowledged by the nested vectored interrupt + controller (NVIC) can wake up the device from Sleep mode. + + *** Stop mode *** + ================= + [..] + In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI, + and the HSE RC oscillators are disabled. Internal SRAM and register contents + are preserved. + The voltage regulator can be configured either in normal or low-power mode. + To minimize the consumption In Stop mode, FLASH can be powered off before + entering the Stop mode using the HAL_PWREx_EnableFlashPowerDown() function. + It can be switched on again by software after exiting the Stop mode using + the HAL_PWREx_DisableFlashPowerDown() function. + + (+) Entry: + The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON) + function with: + (++) Main regulator ON. + (++) Low Power regulator ON. + (+) Exit: + Any EXTI Line (Internal or External) configured in Interrupt/Event mode. + + *** Standby mode *** + ==================== + [..] + (+) + The Standby mode allows to achieve the lowest power consumption. It is based + on the Cortex-M4 deep sleep mode, with the voltage regulator disabled. + The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and + the HSE oscillator are also switched off. SRAM and register contents are lost + except for the RTC registers, RTC backup registers, backup SRAM and Standby + circuitry. + + The voltage regulator is OFF. + + (++) Entry: + (+++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function. + (++) Exit: + (+++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wake-up, + tamper event, time-stamp event, external reset in NRST pin, IWDG reset. + + *** Auto-wake-up (AWU) from low-power mode *** + ============================================= + [..] + + (+) The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC + Wake-up event, a tamper event or a time-stamp event, without depending on + an external interrupt (Auto-wake-up mode). + + (+) RTC auto-wake-up (AWU) from the Stop and Standby modes + + (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to + configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function. + + (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it + is necessary to configure the RTC to detect the tamper or time stamp event using the + HAL_RTCEx_SetTimeStamp_IT() or HAL_RTCEx_SetTamper_IT() functions. + + (++) To wake up from the Stop mode with an RTC Wake-up event, it is necessary to + configure the RTC to generate the RTC Wake-up event using the HAL_RTCEx_SetWakeUpTimer_IT() function. + +@endverbatim + * @{ + */ + +/** + * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD). + * @param sConfigPVD pointer to an PWR_PVDTypeDef structure that contains the configuration + * information for the PVD. + * @note Refer to the electrical characteristics of your device datasheet for + * more details about the voltage threshold corresponding to each + * detection level. + * @retval None + */ +void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) +{ + /* Check the parameters */ + assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel)); + assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode)); + + /* Set PLS[7:5] bits according to PVDLevel value */ + MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel); + + /* Clear any previous config. Keep it clear if no event or IT mode is selected */ + __HAL_PWR_PVD_EXTI_DISABLE_EVENT(); + __HAL_PWR_PVD_EXTI_DISABLE_IT(); + __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE(); + __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); + + /* Configure interrupt mode */ + if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) + { + __HAL_PWR_PVD_EXTI_ENABLE_IT(); + } + + /* Configure event mode */ + if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) + { + __HAL_PWR_PVD_EXTI_ENABLE_EVENT(); + } + + /* Configure the edge */ + if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE(); + } + + if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) + { + __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); + } +} + +/** + * @brief Enables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_EnablePVD(void) +{ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Power Voltage Detector(PVD). + * @retval None + */ +void HAL_PWR_DisablePVD(void) +{ + *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)DISABLE; +} + +/** + * @brief Enables the Wake-up PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to enable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @retval None + */ +void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + + /* Enable the wake up pin */ + SET_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Disables the Wake-up PINx functionality. + * @param WakeUpPinx Specifies the Power Wake-Up pin to disable. + * This parameter can be one of the following values: + * @arg PWR_WAKEUP_PIN1 + * @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices + * @retval None + */ +void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) +{ + /* Check the parameter */ + assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx)); + + /* Disable the wake up pin */ + CLEAR_BIT(PWR->CSR, WakeUpPinx); +} + +/** + * @brief Enters Sleep mode. + * + * @note In Sleep mode, all I/O pins keep the same state as in Run mode. + * + * @note In Sleep mode, the systick is stopped to avoid exit from this mode with + * systick interrupt when used as time base for Timeout + * + * @param Regulator Specifies the regulator state in SLEEP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: SLEEP mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: SLEEP mode with low power regulator ON + * @note This parameter is not used for the STM32F4 family and is kept as parameter + * just to maintain compatibility with the lower power families. + * @param SLEEPEntry Specifies if SLEEP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction + * @retval None + */ +void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) +{ + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry)); + + /* Clear SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select SLEEP mode entry -------------------------------------------------*/ + if(SLEEPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + __WFE(); + __WFE(); + } +} + +/** + * @brief Enters Stop mode. + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * @note When exiting Stop mode by issuing an interrupt or a wake-up event, + * the HSI RC oscillator is selected as system clock. + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * @param Regulator Specifies the regulator state in Stop mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON + * @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON + * @param 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 HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Select the regulator state in Stop mode: Set PDDS and LPDS bits according to PWR_Regulator value */ + MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS), Regulator); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* Select Stop mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_STOPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __SEV(); + __WFE(); + __WFE(); + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); +} + +/** + * @brief Enters Standby mode. + * @note In Standby mode, all I/O pins are high impedance except for: + * - Reset pad (still available) + * - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC + * Alarm out, or RTC clock calibration out. + * - RTC_AF2 pin (PI8) if configured for tamper or time-stamp. + * - WKUP pin 1 (PA0) if enabled. + * @retval None + */ +void HAL_PWR_EnterSTANDBYMode(void) +{ + /* Select Standby mode */ + SET_BIT(PWR->CR, PWR_CR_PDDS); + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); + + /* This option is used to ensure that store operations are completed */ +#if defined ( __CC_ARM) + __force_stores(); +#endif + /* Request Wait For Interrupt */ + __WFI(); +} + +/** + * @brief This function handles the PWR PVD interrupt request. + * @note This API should be called under the PVD_IRQHandler(). + * @retval None + */ +void HAL_PWR_PVD_IRQHandler(void) +{ + /* Check PWR Exti flag */ + if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) + { + /* PWR PVD interrupt user callback */ + HAL_PWR_PVDCallback(); + + /* Clear PWR Exti pending bit */ + __HAL_PWR_PVD_EXTI_CLEAR_FLAG(); + } +} + +/** + * @brief PWR PVD interrupt callback + * @retval None + */ +__weak void HAL_PWR_PVDCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_PWR_PVDCallback could be implemented in the user file + */ +} + +/** + * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode. + * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * Setting this bit is useful when the processor is expected to run only on + * interruptions handling. + * @retval None + */ +void HAL_PWR_EnableSleepOnExit(void) +{ + /* Set SLEEPONEXIT bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode. + * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor + * re-enters SLEEP mode when an interruption handling is over. + * @retval None + */ +void HAL_PWR_DisableSleepOnExit(void) +{ + /* Clear SLEEPONEXIT bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk)); +} + +/** + * @brief Enables CORTEX M4 SEVONPEND bit. + * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_EnableSEVOnPend(void) +{ + /* Set SEVONPEND bit of Cortex System Control Register */ + SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @brief Disables CORTEX M4 SEVONPEND bit. + * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes + * WFE to wake up when an interrupt moves from inactive to pended. + * @retval None + */ +void HAL_PWR_DisableSEVOnPend(void) +{ + /* Clear SEVONPEND bit of Cortex System Control Register */ + CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk)); +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c new file mode 100644 index 0000000..77f9c35 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c @@ -0,0 +1,600 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_pwr_ex.c + * @author MCD Application Team + * @brief Extended PWR HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of PWR extension peripheral: + * + Peripheral Extended features functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup PWREx PWREx + * @brief PWR HAL module driver + * @{ + */ + +#ifdef HAL_PWR_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup PWREx_Private_Constants + * @{ + */ +#define PWR_OVERDRIVE_TIMEOUT_VALUE 1000U +#define PWR_UDERDRIVE_TIMEOUT_VALUE 1000U +#define PWR_BKPREG_TIMEOUT_VALUE 1000U +#define PWR_VOSRDY_TIMEOUT_VALUE 1000U +/** + * @} + */ + + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @defgroup PWREx_Exported_Functions PWREx Exported Functions + * @{ + */ + +/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended features functions + * @brief Peripheral Extended features functions + * +@verbatim + + =============================================================================== + ##### Peripheral extended features functions ##### + =============================================================================== + + *** Main and Backup Regulators configuration *** + ================================================ + [..] + (+) The backup domain includes 4 Kbytes of backup SRAM accessible only from + the CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is + retained even in Standby or VBAT mode when the low power backup regulator + is enabled. It can be considered as an internal EEPROM when VBAT is + always present. You can use the HAL_PWREx_EnableBkUpReg() function to + enable the low power backup regulator. + + (+) When the backup domain is supplied by VDD (analog switch connected to VDD) + the backup SRAM is powered from VDD which replaces the VBAT power supply to + save battery life. + + (+) The backup SRAM is not mass erased by a tamper event. It is read + protected to prevent confidential data, such as cryptographic private + key, from being accessed. The backup SRAM can be erased only through + the Flash interface when a protection level change from level 1 to + level 0 is requested. + -@- Refer to the description of Read protection (RDP) in the Flash + programming manual. + + (+) The main internal regulator can be configured to have a tradeoff between + performance and power consumption when the device does not operate at + the maximum frequency. This is done through __HAL_PWR_MAINREGULATORMODE_CONFIG() + macro which configure VOS bit in PWR_CR register + + Refer to the product datasheets for more details. + + *** FLASH Power Down configuration **** + ======================================= + [..] + (+) By setting the FPDS bit in the PWR_CR register by using the + HAL_PWREx_EnableFlashPowerDown() function, the Flash memory also enters power + down mode when the device enters Stop mode. When the Flash memory + is in power down mode, an additional startup delay is incurred when + waking up from Stop mode. + + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, the scale can be modified only when the PLL + is OFF and the HSI or HSE clock source is selected as system clock. + The new value programmed is active only when the PLL is ON. + When the PLL is OFF, the voltage scale 3 is automatically selected. + Refer to the datasheets for more details. + + *** Over-Drive and Under-Drive configuration **** + ================================================= + [..] + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Run mode: the main regulator has + 2 operating modes available: + (++) Normal mode: The CPU and core logic operate at maximum frequency at a given + voltage scaling (scale 1, scale 2 or scale 3) + (++) Over-drive mode: This mode allows the CPU and the core logic to operate at a + higher frequency than the normal mode for a given voltage scaling (scale 1, + scale 2 or scale 3). This mode is enabled through HAL_PWREx_EnableOverDrive() function and + disabled by HAL_PWREx_DisableOverDrive() function, to enter or exit from Over-drive mode please follow + the sequence described in Reference manual. + + (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Stop mode: the main regulator or low power regulator + supplies a low power voltage to the 1.2V domain, thus preserving the content of registers + and internal SRAM. 2 operating modes are available: + (++) Normal mode: the 1.2V domain is preserved in nominal leakage mode. This mode is only + available when the main regulator or the low power regulator is used in Scale 3 or + low voltage mode. + (++) Under-drive mode: the 1.2V domain is preserved in reduced leakage mode. This mode is only + available when the main regulator or the low power regulator is in low voltage mode. + +@endverbatim + * @{ + */ + +/** + * @brief Enables the Backup Regulator. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void) +{ + uint32_t tickstart = 0U; + + *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)ENABLE; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till Backup regulator ready flag is set */ + while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) == RESET) + { + if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Disables the Backup Regulator. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void) +{ + uint32_t tickstart = 0U; + + *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)DISABLE; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till Backup regulator ready flag is set */ + while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) != RESET) + { + if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Enables the Flash Power Down in Stop mode. + * @retval None + */ +void HAL_PWREx_EnableFlashPowerDown(void) +{ + *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Flash Power Down in Stop mode. + * @retval None + */ +void HAL_PWREx_DisableFlashPowerDown(void) +{ + *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)DISABLE; +} + +/** + * @brief Return Voltage Scaling Range. + * @retval The configured scale for the regulator voltage(VOS bit field). + * The returned value can be one of the following: + * - @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode + * - @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode + * - @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode + */ +uint32_t HAL_PWREx_GetVoltageRange(void) +{ + return (PWR->CR & PWR_CR_VOS); +} + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) +/** + * @brief Configures the main internal regulator output voltage. + * @param VoltageScaling specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption. + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode, + * the maximum value of fHCLK = 168 MHz. + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode, + * the maximum value of fHCLK = 144 MHz. + * @note When moving from Range 1 to Range 2, the system frequency must be decreased to + * a value below 144 MHz before calling HAL_PWREx_ConfigVoltageScaling() API. + * When moving from Range 2 to Range 1, the system frequency can be increased to + * a value up to 168 MHz after calling HAL_PWREx_ConfigVoltageScaling() API. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) +{ + uint32_t tickstart = 0U; + + assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling)); + + /* Enable PWR RCC Clock Peripheral */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Set Range */ + __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET)) + { + if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \ + defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || \ + defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \ + defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Configures the main internal regulator output voltage. + * @param VoltageScaling specifies the regulator output voltage to achieve + * a tradeoff between performance and power consumption. + * This parameter can be one of the following values: + * @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode, + * the maximum value of fHCLK is 168 MHz. It can be extended to + * 180 MHz by activating the over-drive mode. + * @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode, + * the maximum value of fHCLK is 144 MHz. It can be extended to, + * 168 MHz by activating the over-drive mode. + * @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output range 3 mode, + * the maximum value of fHCLK is 120 MHz. + * @note To update the system clock frequency(SYSCLK): + * - Set the HSI or HSE as system clock frequency using the HAL_RCC_ClockConfig(). + * - Call the HAL_RCC_OscConfig() to configure the PLL. + * - Call HAL_PWREx_ConfigVoltageScaling() API to adjust the voltage scale. + * - Set the new system clock frequency using the HAL_RCC_ClockConfig(). + * @note The scale can be modified only when the HSI or HSE clock source is selected + * as system clock source, otherwise the API returns HAL_ERROR. + * @note When the PLL is OFF, the voltage scale 3 is automatically selected and the VOS bits + * value in the PWR_CR1 register are not taken in account. + * @note This API forces the PLL state ON to allow the possibility to configure the voltage scale 1 or 2. + * @note The new voltage scale is active only when the PLL is ON. + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) +{ + uint32_t tickstart = 0U; + + assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling)); + + /* Enable PWR RCC Clock Peripheral */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + /* Disable the main PLL */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + /* Wait till PLL is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set Range */ + __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling); + + /* Enable the main PLL */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET)) + { + if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + return HAL_ERROR; + } + + return HAL_OK; +} +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\ + defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Enables Main Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_EnableMainRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables Main Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xxdevices. + * @retval None + */ +void HAL_PWREx_DisableMainRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)DISABLE; +} + +/** + * @brief Enables Low Power Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_EnableLowRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables Low Power Regulator low voltage mode. + * @note This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/ + * STM32F413xx/STM32F423xx devices. + * @retval None + */ +void HAL_PWREx_DisableLowRegulatorLowVoltage(void) +{ + *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)DISABLE; +} + +#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx || + STM32F413xx || STM32F423xx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Activates the Over-Drive mode. + * @note This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * This mode allows the CPU and the core logic to operate at a higher frequency + * than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3). + * @note It is recommended to enter or exit Over-drive mode when the application is not running + * critical tasks and when the system clock source is either HSI or HSE. + * During the Over-drive switch activation, no peripheral clocks should be enabled. + * The peripheral clocks must be enabled once the Over-drive mode is activated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void) +{ + uint32_t tickstart = 0U; + + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable the Over-drive to extend the clock frequency to 180 Mhz */ + __HAL_PWR_OVERDRIVE_ENABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Enable the Over-drive switch */ + __HAL_PWR_OVERDRIVESWITCHING_ENABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + { + if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + return HAL_OK; +} + +/** + * @brief Deactivates the Over-Drive mode. + * @note This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * This mode allows the CPU and the core logic to operate at a higher frequency + * than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3). + * @note It is recommended to enter or exit Over-drive mode when the application is not running + * critical tasks and when the system clock source is either HSI or HSE. + * During the Over-drive switch activation, no peripheral clocks should be enabled. + * The peripheral clocks must be enabled once the Over-drive mode is activated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void) +{ + uint32_t tickstart = 0U; + + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Disable the Over-drive switch */ + __HAL_PWR_OVERDRIVESWITCHING_DISABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Disable the Over-drive */ + __HAL_PWR_OVERDRIVE_DISABLE(); + + /* Get tick */ + tickstart = HAL_GetTick(); + + while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY)) + { + if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Enters in Under-Drive STOP mode. + * + * @note This mode is only available for STM32F42xxx/STM32F43xxx/STM32F446xx/STM32F469xx/STM32F479xx devices. + * + * @note This mode can be selected only when the Under-Drive is already active + * + * @note This mode is enabled only with STOP low power mode. + * In this mode, the 1.2V domain is preserved in reduced leakage mode. This + * mode is only available when the main regulator or the low power regulator + * is in low voltage mode + * + * @note If the Under-drive mode was enabled, it is automatically disabled after + * exiting Stop mode. + * When the voltage regulator operates in Under-drive mode, an additional + * startup delay is induced when waking up from Stop mode. + * + * @note In Stop mode, all I/O pins keep the same state as in Run mode. + * + * @note When exiting Stop mode by issuing an interrupt or a wake-up event, + * the HSI RC oscillator is selected as system clock. + * + * @note When the voltage regulator operates in low power mode, an additional + * startup delay is incurred when waking up from Stop mode. + * By keeping the internal regulator ON during Stop mode, the consumption + * is higher although the startup time is reduced. + * + * @param Regulator specifies the regulator state in STOP mode. + * This parameter can be one of the following values: + * @arg PWR_MAINREGULATOR_UNDERDRIVE_ON: Main Regulator in under-drive mode + * and Flash memory in power-down when the device is in Stop under-drive mode + * @arg PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON: Low Power Regulator in under-drive mode + * and Flash memory in power-down when the device is in Stop under-drive mode + * @param STOPEntry specifies if STOP mode in entered with WFI or WFE instruction. + * This parameter can be one of the following values: + * @arg PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction + * @arg PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction + * @retval None + */ +HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry) +{ + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_PWR_REGULATOR_UNDERDRIVE(Regulator)); + assert_param(IS_PWR_STOP_ENTRY(STOPEntry)); + + /* Enable Power ctrl clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + /* Enable the Under-drive Mode ---------------------------------------------*/ + /* Clear Under-drive flag */ + __HAL_PWR_CLEAR_ODRUDR_FLAG(); + + /* Enable the Under-drive */ + __HAL_PWR_UNDERDRIVE_ENABLE(); + + /* Select the regulator state in STOP mode ---------------------------------*/ + tmpreg1 = PWR->CR; + /* Clear PDDS, LPDS, MRLUDS and LPLUDS bits */ + tmpreg1 &= (uint32_t)~(PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_MRUDS); + + /* Set LPDS, MRLUDS and LPLUDS bits according to PWR_Regulator value */ + tmpreg1 |= Regulator; + + /* Store the new value */ + PWR->CR = tmpreg1; + + /* Set SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* Select STOP mode entry --------------------------------------------------*/ + if(STOPEntry == PWR_SLEEPENTRY_WFI) + { + /* Request Wait For Interrupt */ + __WFI(); + } + else + { + /* Request Wait For Event */ + __WFE(); + } + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + return HAL_OK; +} + +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_PWR_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c new file mode 100644 index 0000000..f187348 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c @@ -0,0 +1,1122 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc.c + * @author MCD Application Team + * @brief RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Reset and Clock Control (RCC) peripheral: + * + Initialization and de-initialization functions + * + Peripheral Control functions + * + @verbatim + ============================================================================== + ##### RCC specific features ##### + ============================================================================== + [..] + After reset the device is running from Internal High Speed oscillator + (HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache + and I-Cache are disabled, and all peripherals are off except internal + SRAM, Flash and JTAG. + (+) There is no prescaler on High speed (AHB) and Low speed (APB) busses; + all peripherals mapped on these busses are running at HSI speed. + (+) The clock for all peripherals is switched off, except the SRAM and FLASH. + (+) All GPIOs are in input floating state, except the JTAG pins which + are assigned to be used for debug purpose. + + [..] + Once the device started from reset, the user application has to: + (+) Configure the clock source to be used to drive the System clock + (if the application needs higher frequency/performance) + (+) Configure the System clock frequency and Flash settings + (+) Configure the AHB and APB busses prescalers + (+) Enable the clock for the peripheral(s) to be used + (+) Configure the clock source(s) for peripherals which clocks are not + derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) + + ##### RCC Limitations ##### + ============================================================================== + [..] + A delay between an RCC peripheral clock enable and the effective peripheral + enabling should be taken into account in order to manage the peripheral read/write + from/to registers. + (+) This delay depends on the peripheral mapping. + (+) If peripheral is mapped on AHB: the delay is 2 AHB clock cycle + after the clock enable bit is set on the hardware register + (+) If peripheral is mapped on APB: the delay is 2 APB clock cycle + after the clock enable bit is set on the hardware register + + [..] + Implemented Workaround: + (+) For AHB & APB peripherals, a dummy read to the peripheral register has been + inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro. + + @endverbatim + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup RCC RCC + * @brief RCC HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup RCC_Private_Constants + * @{ + */ + +/* Private macro -------------------------------------------------------------*/ +#define __MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() +#define MCO1_GPIO_PORT GPIOA +#define MCO1_PIN GPIO_PIN_8 + +#define __MCO2_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() +#define MCO2_GPIO_PORT GPIOC +#define MCO2_PIN GPIO_PIN_9 +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup RCC_Private_Variables RCC Private Variables + * @{ + */ +/** + * @} + */ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup RCC_Exported_Functions RCC Exported Functions + * @{ + */ + +/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and de-initialization functions ##### + =============================================================================== + [..] + This section provides functions allowing to configure the internal/external oscillators + (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System busses clocks (SYSCLK, AHB, APB1 + and APB2). + + [..] Internal/external clock and PLL configuration + (#) HSI (high-speed internal), 16 MHz factory-trimmed RC used directly or through + the PLL as System clock source. + + (#) LSI (low-speed internal), 32 KHz low consumption RC used as IWDG and/or RTC + clock source. + + (#) HSE (high-speed external), 4 to 26 MHz crystal oscillator used directly or + through the PLL as System clock source. Can be used also as RTC clock source. + + (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source. + + (#) PLL (clocked by HSI or HSE), featuring two different output clocks: + (++) The first output is used to generate the high speed system clock (up to 168 MHz) + (++) The second output is used to generate the clock for the USB OTG FS (48 MHz), + the random analog generator (<=48 MHz) and the SDIO (<= 48 MHz). + + (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE() + and if a HSE clock failure occurs(HSE used directly or through PLL as System + clock source), the System clocks automatically switched to HSI and an interrupt + is generated if enabled. The interrupt is linked to the Cortex-M4 NMI + (Non-Maskable Interrupt) exception vector. + + (#) MCO1 (microcontroller clock output), used to output HSI, LSE, HSE or PLL + clock (through a configurable prescaler) on PA8 pin. + + (#) MCO2 (microcontroller clock output), used to output HSE, PLL, SYSCLK or PLLI2S + clock (through a configurable prescaler) on PC9 pin. + + [..] System, AHB and APB busses clocks configuration + (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI, + HSE and PLL. + The AHB clock (HCLK) is derived from System clock through configurable + prescaler and used to clock the CPU, memory and peripherals mapped + on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived + from AHB clock through configurable prescalers and used to clock + the peripherals mapped on these busses. You can use + "HAL_RCC_GetSysClockFreq()" function to retrieve the frequencies of these clocks. + + (#) For the STM32F405xx/07xx and STM32F415xx/17xx devices, the maximum + frequency of the SYSCLK and HCLK is 168 MHz, PCLK2 84 MHz and PCLK1 42 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F42xxx, STM32F43xxx, STM32F446xx, STM32F469xx and STM32F479xx devices, + the maximum frequency of the SYSCLK and HCLK is 180 MHz, PCLK2 90 MHz and PCLK1 45 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F401xx, the maximum frequency of the SYSCLK and HCLK is 84 MHz, + PCLK2 84 MHz and PCLK1 42 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + + (#) For the STM32F41xxx, the maximum frequency of the SYSCLK and HCLK is 100 MHz, + PCLK2 100 MHz and PCLK1 50 MHz. + Depending on the device voltage range, the maximum frequency should + be adapted accordingly (refer to the product datasheets for more details). + +@endverbatim + * @{ + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE and PLL OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS, MCO1 and MCO2 OFF + * - All interrupts disabled + * @note This function doesn't modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + return HAL_OK; +} + +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this API. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this API. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart, pll_config; + + /* Check Null pointer */ + if(RCC_OscInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + + /* Check the HSE State */ + if((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till HSE is bypassed or disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) + { + /* When HSI is used as system clock it will not disabled */ + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value. */ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Restore clock configuration if changed */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM)); + assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); + assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the main PLL clock source, multiplication and division factors. */ + WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ + RCC_OscInitStruct->PLL.PLLM | \ + (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ + (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ + (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + { + return HAL_ERROR; + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->PLLCFGR; +#if defined (RCC_PLLCFGR_PLLR) + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) +#else + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) +#endif + { + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief Initializes the CPU, AHB and APB busses clocks according to the specified + * parameters in the RCC_ClkInitStruct. + * @param RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC peripheral. + * @param FLatency FLASH Latency, this parameter depend on device selected + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated by HAL_RCC_GetHCLKFreq() function called within this function + * + * @note The HSI is used (enabled by hardware) as system clock source after + * startup from Reset, wake-up from STOP and STANDBY mode, or in case + * of failure of the HSE used directly or indirectly as system clock + * (if the Clock Security System CSS is enabled). + * + * @note A switch from one clock source to another occurs only if the target + * clock source is ready (clock stable after startup delay or PLL locked). + * If a clock source which is not yet ready is selected, the switch will + * occur when the clock source will be ready. + * + * @note Depending on the device voltage range, the software has to set correctly + * HPRE[3:0] bits to ensure that HCLK not exceed the maximum allowed frequency + * (for more details refer to section above "Initialization/de-initialization functions") + * @retval None + */ +HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) +{ + uint32_t tickstart; + + /* Check Null pointer */ + if(RCC_ClkInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType)); + assert_param(IS_FLASH_LATENCY(FLatency)); + + /* To correctly read data from FLASH memory, the number of wait states (LATENCY) + must be correctly programmed according to the frequency of the CPU clock + (HCLK) and the supply voltage of the device. */ + + /* Increasing the number of wait states because of higher CPU frequency */ + if(FLatency > __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + { + /* Set the highest APBx dividers in order to ensure that we do not go through + a non-spec phase whatever we decrease or increase HCLK. */ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); + } + + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); + } + + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + { + /* Check the HSE ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + return HAL_ERROR; + } + } + /* PLL is selected as System Clock Source */ + else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || + (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLRCLK)) + { + /* Check the PLL ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + return HAL_ERROR; + } + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + return HAL_ERROR; + } + } + + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Decreasing the number of wait states because of lower CPU frequency */ + if(FLatency < __HAL_FLASH_GET_LATENCY()) + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + + /* Check that the new number of wait states is taken into account to access the Flash + memory by reading the FLASH_ACR register */ + if(__HAL_FLASH_GET_LATENCY() != FLatency) + { + return HAL_ERROR; + } + } + + /*-------------------------- PCLK1 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos]; + + /* Configure the source of time base considering new system clocks settings */ + HAL_InitTick (uwTickPrio); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions + * @brief RCC clocks control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + +@endverbatim + * @{ + */ + +/** + * @brief Selects the clock source to output on MCO1 pin(PA8) or on MCO2 pin(PC9). + * @note PA8/PC9 should be configured in alternate function mode. + * @param RCC_MCOx specifies the output direction for the clock source. + * This parameter can be one of the following values: + * @arg RCC_MCO1: Clock source to output on MCO1 pin(PA8). + * @arg RCC_MCO2: Clock source to output on MCO2 pin(PC9). + * @param RCC_MCOSource specifies the clock source to output. + * This parameter can be one of the following values: + * @arg RCC_MCO1SOURCE_HSI: HSI clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_LSE: LSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_HSE: HSE clock selected as MCO1 source + * @arg RCC_MCO1SOURCE_PLLCLK: main PLL clock selected as MCO1 source + * @arg RCC_MCO2SOURCE_SYSCLK: System clock (SYSCLK) selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLI2SCLK: PLLI2S clock selected as MCO2 source, available for all STM32F4 devices except STM32F410xx + * @arg RCC_MCO2SOURCE_I2SCLK: I2SCLK clock selected as MCO2 source, available only for STM32F410Rx devices + * @arg RCC_MCO2SOURCE_HSE: HSE clock selected as MCO2 source + * @arg RCC_MCO2SOURCE_PLLCLK: main PLL clock selected as MCO2 source + * @param RCC_MCODiv specifies the MCOx prescaler. + * This parameter can be one of the following values: + * @arg RCC_MCODIV_1: no division applied to MCOx clock + * @arg RCC_MCODIV_2: division by 2 applied to MCOx clock + * @arg RCC_MCODIV_3: division by 3 applied to MCOx clock + * @arg RCC_MCODIV_4: division by 4 applied to MCOx clock + * @arg RCC_MCODIV_5: division by 5 applied to MCOx clock + * @note For STM32F410Rx devices to output I2SCLK clock on MCO2 you should have + * at last one of the SPI clocks enabled (SPI1, SPI2 or SPI5). + * @retval None + */ +void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) +{ + GPIO_InitTypeDef GPIO_InitStruct; + /* Check the parameters */ + assert_param(IS_RCC_MCO(RCC_MCOx)); + assert_param(IS_RCC_MCODIV(RCC_MCODiv)); + /* RCC_MCO1 */ + if(RCC_MCOx == RCC_MCO1) + { + assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource)); + + /* MCO1 Clock Enable */ + __MCO1_CLK_ENABLE(); + + /* Configure the MCO1 pin in alternate function mode */ + GPIO_InitStruct.Pin = MCO1_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF0_MCO; + HAL_GPIO_Init(MCO1_GPIO_PORT, &GPIO_InitStruct); + + /* Mask MCO1 and MCO1PRE[2:0] bits then Select MCO1 clock source and prescaler */ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO1 | RCC_CFGR_MCO1PRE), (RCC_MCOSource | RCC_MCODiv)); + + /* This RCC MCO1 enable feature is available only on STM32F410xx devices */ +#if defined(RCC_CFGR_MCO1EN) + __HAL_RCC_MCO1_ENABLE(); +#endif /* RCC_CFGR_MCO1EN */ + } +#if defined(RCC_CFGR_MCO2) + else + { + assert_param(IS_RCC_MCO2SOURCE(RCC_MCOSource)); + + /* MCO2 Clock Enable */ + __MCO2_CLK_ENABLE(); + + /* Configure the MCO2 pin in alternate function mode */ + GPIO_InitStruct.Pin = MCO2_PIN; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Alternate = GPIO_AF0_MCO; + HAL_GPIO_Init(MCO2_GPIO_PORT, &GPIO_InitStruct); + + /* Mask MCO2 and MCO2PRE[2:0] bits then Select MCO2 clock source and prescaler */ + MODIFY_REG(RCC->CFGR, (RCC_CFGR_MCO2 | RCC_CFGR_MCO2PRE), (RCC_MCOSource | (RCC_MCODiv << 3U))); + + /* This RCC MCO2 enable feature is available only on STM32F410Rx devices */ +#if defined(RCC_CFGR_MCO2EN) + __HAL_RCC_MCO2_ENABLE(); +#endif /* RCC_CFGR_MCO2EN */ + } +#endif /* RCC_CFGR_MCO2 */ +} + +/** + * @brief Enables the Clock Security System. + * @note If a failure is detected on the HSE oscillator clock, this oscillator + * is automatically disabled and an interrupt is generated to inform the + * software about the failure (Clock Security System Interrupt, CSSI), + * allowing the MCU to perform rescue operations. The CSSI is linked to + * the Cortex-M4 NMI (Non-Maskable Interrupt) exception vector. + * @retval None + */ +void HAL_RCC_EnableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)ENABLE; +} + +/** + * @brief Disables the Clock Security System. + * @retval None + */ +void HAL_RCC_DisableCSS(void) +{ + *(__IO uint32_t *) RCC_CR_CSSON_BB = (uint32_t)DISABLE; +} + +/** + * @brief Returns the SYSCLK frequency + * + * @note The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) + * @note If SYSCLK source is PLL, function returns values based on HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * @note (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baudrate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * + * @retval SYSCLK frequency + */ +__weak uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t pllm = 0U, pllvco = 0U, pllp = 0U; + uint32_t sysclockfreq = 0U; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + { + sysclockfreq = HSI_VALUE; + break; + } + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_CFGR_SWS_PLL: /* PLL used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) *2U); + + sysclockfreq = pllvco/pllp; + break; + } + default: + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} + +/** + * @brief Returns the HCLK frequency + * @note Each time HCLK changes, this function must be called to update the + * right HCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + return SystemCoreClock; +} + +/** + * @brief Returns the PCLK1 frequency + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]); +} + +/** + * @brief Returns the PCLK2 frequency + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]); +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * will be configured. + * @retval None + */ +__weak void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + + /* Get the HSE configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } + + /* Get the HSI configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); + + /* Get the LSE configuration -----------------------------------------------*/ + if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + /* Get the PLL configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLM = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); + RCC_OscInitStruct->PLL.PLLN = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + RCC_OscInitStruct->PLL.PLLP = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) + RCC_PLLCFGR_PLLP_0) << 1U) >> RCC_PLLCFGR_PLLP_Pos); + RCC_OscInitStruct->PLL.PLLQ = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos); +} + +/** + * @brief Configures the RCC_ClkInitStruct according to the internal + * RCC configuration registers. + * @param RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that + * will be configured. + * @param pFLatency Pointer on the Flash Latency. + * @retval None + */ +void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) +{ + /* Set all possible values for the Clock type parameter --------------------*/ + RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + + /* Get the SYSCLK configuration --------------------------------------------*/ + RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + + /* Get the HCLK configuration ----------------------------------------------*/ + RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + + /* Get the APB1 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + + /* Get the APB2 configuration ----------------------------------------------*/ + RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3U); + + /* Get the Flash Wait State (Latency) configuration ------------------------*/ + *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); +} + +/** + * @brief This function handles the RCC CSS interrupt request. + * @note This API should be called under the NMI_Handler(). + * @retval None + */ +void HAL_RCC_NMI_IRQHandler(void) +{ + /* Check RCC CSSF flag */ + if(__HAL_RCC_GET_IT(RCC_IT_CSS)) + { + /* RCC Clock Security System interrupt user callback */ + HAL_RCC_CSSCallback(); + + /* Clear RCC CSS pending bit */ + __HAL_RCC_CLEAR_IT(RCC_IT_CSS); + } +} + +/** + * @brief RCC Clock Security System interrupt callback + * @retval None + */ +__weak void HAL_RCC_CSSCallback(void) +{ + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_RCC_CSSCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c new file mode 100644 index 0000000..5076628 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c @@ -0,0 +1,3784 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_rcc_ex.c + * @author MCD Application Team + * @brief Extension RCC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities RCC extension peripheral: + * + Extended Peripheral Control functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2017 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file in + * the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup RCCEx RCCEx + * @brief RCCEx HAL module driver + * @{ + */ + +#ifdef HAL_RCC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup RCCEx_Private_Constants + * @{ + */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions + * @{ + */ + +/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Extended Peripheral Control functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the RCC Clocks + frequencies. + [..] + (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to + select the RTC clock source; in this case the Backup domain will be reset in + order to modify the RTC Clock source, as consequence RTC registers (including + the backup registers) and RCC_BDCR register are set to their reset values. + +@endverbatim + * @{ + */ + +#if defined(STM32F446xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + uint32_t plli2sp = 0U; + uint32_t plli2sq = 0U; + uint32_t plli2sr = 0U; + uint32_t pllsaip = 0U; + uint32_t pllsaiq = 0U; + uint32_t plli2sused = 0U; + uint32_t pllsaiused = 0U; + + /* Check the peripheral clock selection parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*------------------------ I2S APB1 configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == (RCC_PERIPHCLK_I2S_APB1)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB1CLKSOURCE(PeriphClkInit->I2sApb1ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB1_CONFIG(PeriphClkInit->I2sApb1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if(PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- I2S APB2 configuration ----------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == (RCC_PERIPHCLK_I2S_APB2)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB2CLKSOURCE(PeriphClkInit->I2sApb2ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB2_CONFIG(PeriphClkInit->I2sApb2ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if(PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*--------------------------- SAI1 configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == (RCC_PERIPHCLK_SAI1)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAI1CLKSOURCE(PeriphClkInit->Sai1ClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*-------------------------- SAI2 configuration ----------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == (RCC_PERIPHCLK_SAI2)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAI2CLKSOURCE(PeriphClkInit->Sai2ClockSelection)); + + /* Configure SAI2 Clock source */ + __HAL_RCC_SAI2_CONFIG(PeriphClkInit->Sai2ClockSelection); + + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- RTC configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + /* Configure Timer Prescaler */ + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- FMPI2C1 Configuration -----------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ CEC Configuration -------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC) + { + /* Check the parameters */ + assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection)); + + /* Configure the CEC clock source */ + __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- CLK48 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the CLK48 clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + + /* Enable the PLLSAI when it's used as clock source for CLK48 */ + if(PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP) + { + pllsaiused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- SDIO Configuration -------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ SPDIFRX Configuration ---------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) + { + /* Check the parameters */ + assert_param(IS_RCC_SPDIFRXCLKSOURCE(PeriphClkInit->SpdifClockSelection)); + + /* Configure the SPDIFRX clock source */ + __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifClockSelection); + /* Enable the PLLI2S when it's used as clock source for SPDIFRX */ + if(PeriphClkInit->SpdifClockSelection == RCC_SPDIFRXCLKSOURCE_PLLI2SP) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- PLLI2S Configuration ------------------------*/ + /* PLLI2S is configured when a peripheral will use it as source clock : SAI1, SAI2, I2S on APB1, + I2S on APB2 or SPDIFRX */ + if((plli2sused == 1U) || (PeriphClkInit->PeriphClockSelection == RCC_PERIPHCLK_PLLI2S)) + { + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* check for common PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /*------ In Case of PLLI2S is selected as source clock for I2S -----------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == RCC_PERIPHCLK_I2S_APB1) && (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == RCC_PERIPHCLK_I2S_APB2) && (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S))) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Read PLLI2SP/PLLI2SQ value from PLLI2SCFGR register (this value is not needed for I2S configuration) */ + plli2sp = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sq = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , plli2sp, plli2sq, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*------- In Case of PLLI2S is selected as source clock for SAI ----------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLI2S))) + { + /* Check for PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + /* Check for PLLI2S/DIVQ parameters */ + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SP/PLLI2SR value from PLLI2SCFGR register (this value is not needed for SAI configuration) */ + plli2sp = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sr = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , plli2sp, PeriphClkInit->PLLI2S.PLLI2SQ, plli2sr); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*------ In Case of PLLI2S is selected as source clock for SPDIFRX -------*/ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX) && (PeriphClkInit->SpdifClockSelection == RCC_SPDIFRXCLKSOURCE_PLLI2SP)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SP_VALUE(PeriphClkInit->PLLI2S.PLLI2SP)); + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + plli2sq = ((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + plli2sr = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* SPDIFRXCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SP */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SP, plli2sq, plli2sr); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SP_VALUE(PeriphClkInit->PLLI2S.PLLI2SP)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SP, PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------- PLLSAI Configuration -----------------------*/ + /* PLLSAI is configured when a peripheral will use it as source clock : SAI1, SAI2, CLK48 or SDIO */ + if(pllsaiused == 1U) + { + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIM_VALUE(PeriphClkInit->PLLSAI.PLLSAIM)); + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /*------ In Case of PLLSAI is selected as source clock for SAI -----------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) && (PeriphClkInit->Sai1ClockSelection == RCC_SAI1CLKSOURCE_PLLSAI)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) && (PeriphClkInit->Sai2ClockSelection == RCC_SAI2CLKSOURCE_PLLSAI))) + { + /* check for PLLSAIQ Parameter */ + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + /* check for PLLSAI/DIVQ Parameter */ + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIM, PeriphClkInit->PLLSAI.PLLSAIN , pllsaip, PeriphClkInit->PLLSAI.PLLSAIQ, 0U); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*------ In Case of PLLSAI is selected as source clock for CLK48 ---------*/ + /* In Case of PLLI2S is selected as source clock for CLK48 */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLSAIP_VALUE(PeriphClkInit->PLLSAI.PLLSAIP)); + /* Read PLLSAIQ value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Configure the PLLSAI division factors */ + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * (PLLI2SN/PLLSAIM) */ + /* 48CLK = f(PLLSAI clock output) = f(VCO clock) / PLLSAIP */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIM, PeriphClkInit->PLLSAI.PLLSAIN , PeriphClkInit->PLLSAI.PLLSAIP, pllsaiq, 0U); + } + + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while(__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + return HAL_OK; +} + +/** + * @brief Get the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 |\ + RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 |\ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC |\ + RCC_PERIPHCLK_CEC | RCC_PERIPHCLK_FMPI2C1 |\ + RCC_PERIPHCLK_CLK48 | RCC_PERIPHCLK_SDIO |\ + RCC_PERIPHCLK_SPDIFRX; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM) >> RCC_PLLI2SCFGR_PLLI2SM_Pos); + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SP = (uint32_t)((((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SP) >> RCC_PLLI2SCFGR_PLLI2SP_Pos) + 1U) << 1U); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Get the PLLSAI Clock configuration --------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIM = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM) >> RCC_PLLSAICFGR_PLLSAIM_Pos); + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIP = (uint32_t)((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors ----------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + + /* Get the SAI1 clock configuration ----------------------------------------*/ + PeriphClkInit->Sai1ClockSelection = __HAL_RCC_GET_SAI1_SOURCE(); + + /* Get the SAI2 clock configuration ----------------------------------------*/ + PeriphClkInit->Sai2ClockSelection = __HAL_RCC_GET_SAI2_SOURCE(); + + /* Get the I2S APB1 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb1ClockSelection = __HAL_RCC_GET_I2S_APB1_SOURCE(); + + /* Get the I2S APB2 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb2ClockSelection = __HAL_RCC_GET_I2S_APB2_SOURCE(); + + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the CEC clock configuration -----------------------------------------*/ + PeriphClkInit->CecClockSelection = __HAL_RCC_GET_CEC_SOURCE(); + + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the CLK48 clock configuration ----------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + /* Get the SPDIFRX clock configuration -------------------------------------*/ + PeriphClkInit->SpdifClockSelection = __HAL_RCC_GET_SPDIFRX_SOURCE(); + + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_SAI1: SAI1 peripheral clock + * @arg RCC_PERIPHCLK_SAI2: SAI2 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB1: I2S APB1 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB2: I2S APB2 peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + uint32_t tmpreg1 = 0U; + /* This variable used to store the SAI clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + /* This variable used to store the SAI clock source */ + uint32_t saiclocksource = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_SAI1: + case RCC_PERIPHCLK_SAI2: + { + saiclocksource = RCC->DCKCFGR; + saiclocksource &= (RCC_DCKCFGR_SAI1SRC | RCC_DCKCFGR_SAI2SRC); + switch (saiclocksource) + { + case 0U: /* PLLSAI is the clock source for SAI*/ + { + /* Configure the PLLSAI division factor */ + /* PLLSAI_VCO Input = PLL_SOURCE/PLLSAIM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIM))); + } + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + tmpreg1 = (RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> 24U; + frequency = (vcoinput * ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> 6U))/(tmpreg1); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + tmpreg1 = (((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> 8U) + 1U); + frequency = frequency/(tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC_0: /* PLLI2S is the clock source for SAI*/ + case RCC_DCKCFGR_SAI2SRC_0: /* PLLI2S is the clock source for SAI*/ + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM))); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + tmpreg1 = (RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> 24U; + frequency = (vcoinput * ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U))/(tmpreg1); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + tmpreg1 = ((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) + 1U); + frequency = frequency/(tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC_1: /* PLLR is the clock source for SAI*/ + case RCC_DCKCFGR_SAI2SRC_1: /* PLLR is the clock source for SAI*/ + { + /* Configure the PLLI2S division factor */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + vcoinput = (HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + vcoinput = ((HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM))); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + /* SAI_CLK_x = PLL_VCO Output/PLLR */ + tmpreg1 = (RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U; + frequency = (vcoinput * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U))/(tmpreg1); + break; + } + case RCC_DCKCFGR_SAI1SRC: /* External clock is the clock source for SAI*/ + { + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + case RCC_DCKCFGR_SAI2SRC: /* PLLSRC(HSE or HSI) is the clock source for SAI*/ + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSI) + { + /* In Case the PLL Source is HSI (Internal Clock) */ + frequency = (uint32_t)(HSI_VALUE); + } + else + { + /* In Case the PLL Source is HSE (External Clock) */ + frequency = (uint32_t)(HSE_VALUE); + } + break; + } + default : + { + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB1: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB1_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB1CLKSOURCE_PLLSRC: + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB2: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB2_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB2CLKSOURCE_PLLSRC: + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F446xx */ + +#if defined(STM32F469xx) || defined(STM32F479xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC, RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + uint32_t pllsaip = 0U; + uint32_t pllsaiq = 0U; + uint32_t pllsair = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*--------------------------- CLK48 Configuration --------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the CLK48 clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------ SDIO Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/I2S Configuration (PLLI2S) -------------------*/ + /*------------------- Common configuration SAI/I2S -------------------------*/ + /* In Case of SAI or I2S Clock Configuration through PLLI2S, PLLI2SN division + factor is common parameters for both peripherals */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == RCC_PERIPHCLK_SAI_PLLI2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------- I2S configuration -------------------------------*/ + /* In Case of I2S Clock Configuration through PLLI2S, PLLI2SR must be added + only for I2S configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) x (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLI2S, PLLI2SQ and PLLI2S_DIVQ must + be added only for SAI configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == (RCC_PERIPHCLK_SAI_PLLI2S)) + { + /* Check the PLLI2S division factors */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SQ , tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Configure the PLLI2S multiplication and division factors */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/LTDC Configuration (PLLSAI) ------------------*/ + /*----------------------- Common configuration SAI/LTDC --------------------*/ + /* In Case of SAI, LTDC or CLK48 Clock Configuration through PLLSAI, PLLSAIN division + factor is common parameters for these peripherals */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == RCC_PERIPHCLK_SAI_PLLSAI) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && + (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP))) + { + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLSAI, PLLSAIQ and PLLSAI_DIVQ must + be added only for SAI configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == (RCC_PERIPHCLK_SAI_PLLSAI)) + { + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsair = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, pllsaip, PeriphClkInit->PLLSAI.PLLSAIQ, pllsair); + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*---------------------------- LTDC configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == (RCC_PERIPHCLK_LTDC)) + { + assert_param(IS_RCC_PLLSAIR_VALUE(PeriphClkInit->PLLSAI.PLLSAIR)); + assert_param(IS_RCC_PLLSAI_DIVR_VALUE(PeriphClkInit->PLLSAIDivR)); + + /* Read PLLSAIP value from PLLSAICFGR register (this value is not needed for SAI configuration) */ + pllsaip = ((((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIP) >> RCC_PLLSAICFGR_PLLSAIP_Pos) + 1U) << 1U); + /* Read PLLSAIQ value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* LTDC_CLK(first level) = PLLSAI_VCO Output/PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, pllsaip, pllsaiq, PeriphClkInit->PLLSAI.PLLSAIR); + /* LTDC_CLK = LTDC_CLK(first level)/PLLSAIDIVR */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLSAIDivR); + } + + /*---------------------------- CLK48 configuration ------------------------*/ + /* Configure the PLLSAI when it is used as clock source for CLK48 */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == (RCC_PERIPHCLK_CLK48)) && + (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLSAIP)) + { + assert_param(IS_RCC_PLLSAIP_VALUE(PeriphClkInit->PLLSAI.PLLSAIP)); + + /* Read PLLSAIQ value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsaiq = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + pllsair = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* CLK48_CLK(first level) = PLLSAI_VCO Output/PLLSAIP */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN, PeriphClkInit->PLLSAI.PLLSAIP, pllsaiq, pllsair); + } + + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while(__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + + /*--------------------------------------------------------------------------*/ + + /*---------------------------- RTC configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + return HAL_OK; +} + +/** + * @brief Configures the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_SAI_PLLSAI |\ + RCC_PERIPHCLK_SAI_PLLI2S | RCC_PERIPHCLK_LTDC |\ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC |\ + RCC_PERIPHCLK_CLK48 | RCC_PERIPHCLK_SDIO; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Get the PLLSAI Clock configuration --------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIR = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors ----------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + PeriphClkInit->PLLSAIDivR = (uint32_t)(RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVR); + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the CLK48 clock configuration -------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F469xx || STM32F479xx */ + +#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; +#if defined(STM32F413xx) || defined(STM32F423xx) + uint32_t plli2sq = 0U; +#endif /* STM32F413xx || STM32F423xx */ + uint32_t plli2sused = 0U; + + /* Check the peripheral clock selection parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*----------------------------------- I2S APB1 configuration ---------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == (RCC_PERIPHCLK_I2S_APB1)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB1CLKSOURCE(PeriphClkInit->I2sApb1ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB1_CONFIG(PeriphClkInit->I2sApb1ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if(PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------------------- I2S APB2 configuration ---------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == (RCC_PERIPHCLK_I2S_APB2)) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPB2CLKSOURCE(PeriphClkInit->I2sApb2ClockSelection)); + + /* Configure I2S Clock source */ + __HAL_RCC_I2S_APB2_CONFIG(PeriphClkInit->I2sApb2ClockSelection); + /* Enable the PLLI2S when it's used as clock source for I2S */ + if(PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*----------------------- SAI1 Block A configuration -----------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIA) == (RCC_PERIPHCLK_SAIA)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAIACLKSOURCE(PeriphClkInit->SaiAClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI_BLOCKACLKSOURCE_CONFIG(PeriphClkInit->SaiAClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLI2SR) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLR) + { + /* Check for PLL/DIVR parameters */ + assert_param(IS_RCC_PLL_DIVR_VALUE(PeriphClkInit->PLLDivR)); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLDIVR */ + __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLDivR); + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------- SAI1 Block B configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIB) == (RCC_PERIPHCLK_SAIB)) + { + /* Check the parameters */ + assert_param(IS_RCC_SAIBCLKSOURCE(PeriphClkInit->SaiBClockSelection)); + + /* Configure SAI1 Clock source */ + __HAL_RCC_SAI_BLOCKBCLKSOURCE_CONFIG(PeriphClkInit->SaiBClockSelection); + /* Enable the PLLI2S when it's used as clock source for SAI */ + if(PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLI2SR) + { + plli2sused = 1U; + } + /* Enable the PLLSAI when it's used as clock source for SAI */ + if(PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLR) + { + /* Check for PLL/DIVR parameters */ + assert_param(IS_RCC_PLL_DIVR_VALUE(PeriphClkInit->PLLDivR)); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLDIVR */ + __HAL_RCC_PLL_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLDivR); + } + } + /*--------------------------------------------------------------------------*/ +#endif /* STM32F413xx || STM32F423xx */ + + /*------------------------------------ RTC configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------ TIM configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + /* Configure Timer Prescaler */ + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- FMPI2C1 Configuration --------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- CLK48 Configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) + { + /* Check the parameters */ + assert_param(IS_RCC_CLK48CLKSOURCE(PeriphClkInit->Clk48ClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_CLK48_CONFIG(PeriphClkInit->Clk48ClockSelection); + + /* Enable the PLLI2S when it's used as clock source for CLK48 */ + if(PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ) + { + plli2sused = 1U; + } + } + /*--------------------------------------------------------------------------*/ + + /*------------------------------------- SDIO Configuration -----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_SDIOCLKSOURCE(PeriphClkInit->SdioClockSelection)); + + /* Configure the SDIO clock source */ + __HAL_RCC_SDIO_CONFIG(PeriphClkInit->SdioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------------------------- PLLI2S Configuration --------------*/ + /* PLLI2S is configured when a peripheral will use it as source clock : I2S on APB1 or + I2S on APB2*/ + if((plli2sused == 1U) || (PeriphClkInit->PeriphClockSelection == RCC_PERIPHCLK_PLLI2S)) + { + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* check for common PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SCLKSOURCE(PeriphClkInit->PLLI2SSelection)); + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + /*-------------------- Set the PLL I2S clock -----------------------------*/ + __HAL_RCC_PLL_I2S_CONFIG(PeriphClkInit->PLLI2SSelection); + + /*------- In Case of PLLI2S is selected as source clock for I2S ----------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB1) == RCC_PERIPHCLK_I2S_APB1) && (PeriphClkInit->I2sApb1ClockSelection == RCC_I2SAPB1CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S_APB2) == RCC_PERIPHCLK_I2S_APB2) && (PeriphClkInit->I2sApb2ClockSelection == RCC_I2SAPB2CLKSOURCE_PLLI2S)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CLK48) == RCC_PERIPHCLK_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDIO) == RCC_PERIPHCLK_SDIO) && (PeriphClkInit->SdioClockSelection == RCC_SDIOCLKSOURCE_CLK48) && (PeriphClkInit->Clk48ClockSelection == RCC_CLK48CLKSOURCE_PLLI2SQ))) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*------- In Case of PLLI2S is selected as source clock for SAI ----------*/ + if(((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIA) == RCC_PERIPHCLK_SAIA) && (PeriphClkInit->SaiAClockSelection == RCC_SAIACLKSOURCE_PLLI2SR)) || + ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAIB) == RCC_PERIPHCLK_SAIB) && (PeriphClkInit->SaiBClockSelection == RCC_SAIBCLKSOURCE_PLLI2SR))) + { + /* Check for PLLI2S Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Check for PLLI2S/DIVR parameters */ + assert_param(IS_RCC_PLLI2S_DIVR_VALUE(PeriphClkInit->PLLI2SDivR)); + + /* Read PLLI2SQ value from PLLI2SCFGR register (this value is not needed for SAI configuration) */ + plli2sq = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, plli2sq, PeriphClkInit->PLLI2S.PLLI2SR); + + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVR */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLI2SDivR); + } +#endif /* STM32F413xx || STM32F423xx */ + + /*----------------- In Case of PLLI2S is just selected ------------------*/ + if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* SPDIFRXCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SP */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM1 clock source configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection)); + + /* Configure the DFSDM1 interface clock source */ + __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM1 Audio clock source configuration -------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1_AUDIO) == RCC_PERIPHCLK_DFSDM1_AUDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM1AUDIOCLKSOURCE(PeriphClkInit->Dfsdm1AudioClockSelection)); + + /* Configure the DFSDM1 Audio interface clock source */ + __HAL_RCC_DFSDM1AUDIO_CONFIG(PeriphClkInit->Dfsdm1AudioClockSelection); + } + /*--------------------------------------------------------------------------*/ + +#if defined(STM32F413xx) || defined(STM32F423xx) + /*-------------------- DFSDM2 clock source configuration -------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM2) == RCC_PERIPHCLK_DFSDM2) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM2CLKSOURCE(PeriphClkInit->Dfsdm2ClockSelection)); + + /* Configure the DFSDM1 interface clock source */ + __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*-------------------- DFSDM2 Audio clock source configuration -------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM2_AUDIO) == RCC_PERIPHCLK_DFSDM2_AUDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM2AUDIOCLKSOURCE(PeriphClkInit->Dfsdm2AudioClockSelection)); + + /* Configure the DFSDM1 Audio interface clock source */ + __HAL_RCC_DFSDM2AUDIO_CONFIG(PeriphClkInit->Dfsdm2AudioClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- LPTIM1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_LPTIM1CLKSOURCE(PeriphClkInit->Lptim1ClockSelection)); + + /* Configure the LPTIM1 clock source */ + __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection); + } + /*--------------------------------------------------------------------------*/ +#endif /* STM32F413xx || STM32F423xx */ + + return HAL_OK; +} + +/** + * @brief Get the RCC_PeriphCLKInitTypeDef according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ +#if defined(STM32F413xx) || defined(STM32F423xx) + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 |\ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC |\ + RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_CLK48 |\ + RCC_PERIPHCLK_SDIO | RCC_PERIPHCLK_DFSDM1 |\ + RCC_PERIPHCLK_DFSDM1_AUDIO | RCC_PERIPHCLK_DFSDM2 |\ + RCC_PERIPHCLK_DFSDM2_AUDIO | RCC_PERIPHCLK_LPTIM1 |\ + RCC_PERIPHCLK_SAIA | RCC_PERIPHCLK_SAIB; +#else /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S_APB1 | RCC_PERIPHCLK_I2S_APB2 |\ + RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC |\ + RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_CLK48 |\ + RCC_PERIPHCLK_SDIO | RCC_PERIPHCLK_DFSDM1 |\ + RCC_PERIPHCLK_DFSDM1_AUDIO; +#endif /* STM32F413xx || STM32F423xx */ + + + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM) >> RCC_PLLI2SCFGR_PLLI2SM_Pos); + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); +#if defined(STM32F413xx) || defined(STM32F423xx) + /* Get the PLL/PLLI2S division factors -------------------------------------*/ + PeriphClkInit->PLLI2SDivR = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVR) >> RCC_DCKCFGR_PLLI2SDIVR_Pos); + PeriphClkInit->PLLDivR = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLDIVR) >> RCC_DCKCFGR_PLLDIVR_Pos); +#endif /* STM32F413xx || STM32F423xx */ + + /* Get the I2S APB1 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb1ClockSelection = __HAL_RCC_GET_I2S_APB1_SOURCE(); + + /* Get the I2S APB2 clock configuration ------------------------------------*/ + PeriphClkInit->I2sApb2ClockSelection = __HAL_RCC_GET_I2S_APB2_SOURCE(); + + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the CLK48 clock configuration ---------------------------------------*/ + PeriphClkInit->Clk48ClockSelection = __HAL_RCC_GET_CLK48_SOURCE(); + + /* Get the SDIO clock configuration ----------------------------------------*/ + PeriphClkInit->SdioClockSelection = __HAL_RCC_GET_SDIO_SOURCE(); + + /* Get the DFSDM1 clock configuration --------------------------------------*/ + PeriphClkInit->Dfsdm1ClockSelection = __HAL_RCC_GET_DFSDM1_SOURCE(); + + /* Get the DFSDM1 Audio clock configuration --------------------------------*/ + PeriphClkInit->Dfsdm1AudioClockSelection = __HAL_RCC_GET_DFSDM1AUDIO_SOURCE(); + +#if defined(STM32F413xx) || defined(STM32F423xx) + /* Get the DFSDM2 clock configuration --------------------------------------*/ + PeriphClkInit->Dfsdm2ClockSelection = __HAL_RCC_GET_DFSDM2_SOURCE(); + + /* Get the DFSDM2 Audio clock configuration --------------------------------*/ + PeriphClkInit->Dfsdm2AudioClockSelection = __HAL_RCC_GET_DFSDM2AUDIO_SOURCE(); + + /* Get the LPTIM1 clock configuration --------------------------------------*/ + PeriphClkInit->Lptim1ClockSelection = __HAL_RCC_GET_LPTIM1_SOURCE(); + + /* Get the SAI1 Block Aclock configuration ---------------------------------*/ + PeriphClkInit->SaiAClockSelection = __HAL_RCC_GET_SAI_BLOCKA_SOURCE(); + + /* Get the SAI1 Block B clock configuration --------------------------------*/ + PeriphClkInit->SaiBClockSelection = __HAL_RCC_GET_SAI_BLOCKB_SOURCE(); +#endif /* STM32F413xx || STM32F423xx */ + + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(I2S..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S_APB1: I2S APB1 peripheral clock + * @arg RCC_PERIPHCLK_I2S_APB2: I2S APB2 peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S_APB1: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB1_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLI2S: + { + if((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SSRC) == RCC_PLLI2SCFGR_PLLI2SSRC) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(EXTERNAL_CLOCK_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + } + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB1CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB1CLKSOURCE_PLLSRC: + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + case RCC_PERIPHCLK_I2S_APB2: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_APB2_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLI2S: + { + if((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SSRC) == RCC_PLLI2SCFGR_PLLI2SSRC) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(EXTERNAL_CLOCK_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + } + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPB2CLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPB2CLKSOURCE_PLLSRC: + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the + * RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks(I2S and RTC clocks). + * + * @note A caution to be taken when HAL_RCCEx_PeriphCLKConfig() is used to select RTC clock selection, in this case + * the Reset of Backup domain will be applied in order to modify the RTC Clock source as consequence all backup + * domain (RTC and RCC_BDCR register expect BKPSRAM) will be reset + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- RTC configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- FMPI2C1 Configuration -----------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMPI2C1) == RCC_PERIPHCLK_FMPI2C1) + { + /* Check the parameters */ + assert_param(IS_RCC_FMPI2C1CLKSOURCE(PeriphClkInit->Fmpi2c1ClockSelection)); + + /* Configure the FMPI2C1 clock source */ + __HAL_RCC_FMPI2C1_CONFIG(PeriphClkInit->Fmpi2c1ClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- LPTIM1 Configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) + { + /* Check the parameters */ + assert_param(IS_RCC_LPTIM1CLKSOURCE(PeriphClkInit->Lptim1ClockSelection)); + + /* Configure the LPTIM1 clock source */ + __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection); + } + + /*---------------------------- I2S Configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) + { + /* Check the parameters */ + assert_param(IS_RCC_I2SAPBCLKSOURCE(PeriphClkInit->I2SClockSelection)); + + /* Configure the I2S clock source */ + __HAL_RCC_I2S_CONFIG(PeriphClkInit->I2SClockSelection); + } + + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_FMPI2C1 | RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC; + + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } + /* Get the FMPI2C1 clock configuration -------------------------------------*/ + PeriphClkInit->Fmpi2c1ClockSelection = __HAL_RCC_GET_FMPI2C1_SOURCE(); + + /* Get the I2S clock configuration -----------------------------------------*/ + PeriphClkInit->I2SClockSelection = __HAL_RCC_GET_I2S_SOURCE(); + + +} +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SAPBCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLL VCO Output divided by PLLR used as I2S clock */ + case RCC_I2SAPBCLKSOURCE_PLLR: + { + /* Configure the PLL division factor R */ + /* PLL_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLL_VCO Output = PLL_VCO Input * PLLN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6U) & (RCC_PLLCFGR_PLLN >> 6U))); + /* I2S_CLK = PLL_VCO Output/PLLR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 28U) & (RCC_PLLCFGR_PLLR >> 28U))); + break; + } + /* Check if I2S clock selection is HSI or HSE depending from PLL source Clock */ + case RCC_I2SAPBCLKSOURCE_PLLSRC: + { + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + frequency = HSE_VALUE; + } + else + { + frequency = HSI_VALUE; + } + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ + +#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified + * parameters in the RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals + * clocks(I2S, SAI, LTDC RTC and TIM). + * + * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select + * the RTC clock source; in this case the Backup domain will be reset in + * order to modify the RTC Clock source, as consequence RTC registers (including + * the backup registers) and RCC_BDCR register are set to their reset values. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*----------------------- SAI/I2S Configuration (PLLI2S) -------------------*/ + /*----------------------- Common configuration SAI/I2S ---------------------*/ + /* In Case of SAI or I2S Clock Configuration through PLLI2S, PLLI2SN division + factor is common parameters for both peripherals */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == RCC_PERIPHCLK_SAI_PLLI2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- I2S configuration -------------------------*/ + /* In Case of I2S Clock Configuration through PLLI2S, PLLI2SR must be added + only for I2S configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == (RCC_PERIPHCLK_I2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SR); + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLI2S, PLLI2SQ and PLLI2S_DIVQ must + be added only for SAI configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLI2S) == (RCC_PERIPHCLK_SAI_PLLI2S)) + { + /* Check the PLLI2S division factors */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2S_DIVQ_VALUE(PeriphClkInit->PLLI2SDivQ)); + + /* Read PLLI2SR value from PLLI2SCFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + /* SAI_CLK(first level) = PLLI2S_VCO Output/PLLI2SQ */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SQ , tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLI2SDIVQ */ + __HAL_RCC_PLLI2S_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLI2SDivQ); + } + + /*----------------- In Case of PLLI2S is just selected -----------------*/ + if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S) + { + /* Check for Parameters */ + assert_param(IS_RCC_PLLI2SQ_VALUE(PeriphClkInit->PLLI2S.PLLI2SQ)); + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + + /* Configure the PLLI2S multiplication and division factors */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SQ, PeriphClkInit->PLLI2S.PLLI2SR); + } + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*----------------------- SAI/LTDC Configuration (PLLSAI) ------------------*/ + /*----------------------- Common configuration SAI/LTDC --------------------*/ + /* In Case of SAI or LTDC Clock Configuration through PLLSAI, PLLSAIN division + factor is common parameters for both peripherals */ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == RCC_PERIPHCLK_SAI_PLLSAI) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC)) + { + /* Check the PLLSAI division factors */ + assert_param(IS_RCC_PLLSAIN_VALUE(PeriphClkInit->PLLSAI.PLLSAIN)); + + /* Disable PLLSAI Clock */ + __HAL_RCC_PLLSAI_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is disabled */ + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /*---------------------------- SAI configuration -------------------------*/ + /* In Case of SAI Clock Configuration through PLLSAI, PLLSAIQ and PLLSAI_DIVQ must + be added only for SAI configuration */ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI_PLLSAI) == (RCC_PERIPHCLK_SAI_PLLSAI)) + { + assert_param(IS_RCC_PLLSAIQ_VALUE(PeriphClkInit->PLLSAI.PLLSAIQ)); + assert_param(IS_RCC_PLLSAI_DIVQ_VALUE(PeriphClkInit->PLLSAIDivQ)); + + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* SAI_CLK(first level) = PLLSAI_VCO Output/PLLSAIQ */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN , PeriphClkInit->PLLSAI.PLLSAIQ, tmpreg1); + /* SAI_CLK_x = SAI_CLK(first level)/PLLSAIDIVQ */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVQ_CONFIG(PeriphClkInit->PLLSAIDivQ); + } + + /*---------------------------- LTDC configuration ------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == (RCC_PERIPHCLK_LTDC)) + { + assert_param(IS_RCC_PLLSAIR_VALUE(PeriphClkInit->PLLSAI.PLLSAIR)); + assert_param(IS_RCC_PLLSAI_DIVR_VALUE(PeriphClkInit->PLLSAIDivR)); + + /* Read PLLSAIR value from PLLSAICFGR register (this value is not need for SAI configuration) */ + tmpreg1 = ((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* PLLSAI_VCO Input = PLL_SOURCE/PLLM */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN */ + /* LTDC_CLK(first level) = PLLSAI_VCO Output/PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PeriphClkInit->PLLSAI.PLLSAIN , tmpreg1, PeriphClkInit->PLLSAI.PLLSAIR); + /* LTDC_CLK = LTDC_CLK(first level)/PLLSAIDIVR */ + __HAL_RCC_PLLSAI_PLLSAICLKDIVR_CONFIG(PeriphClkInit->PLLSAIDivR); + } + /* Enable PLLSAI Clock */ + __HAL_RCC_PLLSAI_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLSAI is ready */ + while(__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- RTC configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } + /*--------------------------------------------------------------------------*/ + + /*---------------------------- TIM configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } + return HAL_OK; +} + +/** + * @brief Configures the PeriphClkInit according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_SAI_PLLSAI | RCC_PERIPHCLK_SAI_PLLI2S | RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_TIM | RCC_PERIPHCLK_RTC; + + /* Get the PLLI2S Clock configuration -----------------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); + PeriphClkInit->PLLI2S.PLLI2SQ = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SQ) >> RCC_PLLI2SCFGR_PLLI2SQ_Pos); + /* Get the PLLSAI Clock configuration -----------------------------------------------*/ + PeriphClkInit->PLLSAI.PLLSAIN = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIN) >> RCC_PLLSAICFGR_PLLSAIN_Pos); + PeriphClkInit->PLLSAI.PLLSAIR = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIR) >> RCC_PLLSAICFGR_PLLSAIR_Pos); + PeriphClkInit->PLLSAI.PLLSAIQ = (uint32_t)((RCC->PLLSAICFGR & RCC_PLLSAICFGR_PLLSAIQ) >> RCC_PLLSAICFGR_PLLSAIQ_Pos); + /* Get the PLLSAI/PLLI2S division factors -----------------------------------------------*/ + PeriphClkInit->PLLI2SDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLI2SDIVQ) >> RCC_DCKCFGR_PLLI2SDIVQ_Pos); + PeriphClkInit->PLLSAIDivQ = (uint32_t)((RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVQ) >> RCC_DCKCFGR_PLLSAIDIVQ_Pos); + PeriphClkInit->PLLSAIDivR = (uint32_t)(RCC->DCKCFGR & RCC_DCKCFGR_PLLSAIDIVR); + /* Get the RTC Clock configuration -----------------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ + +#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) ||\ + defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) +/** + * @brief Initializes the RCC extended peripherals clocks according to the specified parameters in the + * RCC_PeriphCLKInitTypeDef. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * contains the configuration information for the Extended Peripherals clocks(I2S and RTC clocks). + * + * @note A caution to be taken when HAL_RCCEx_PeriphCLKConfig() is used to select RTC clock selection, in this case + * the Reset of Backup domain will be applied in order to modify the RTC Clock source as consequence all backup + * domain (RTC and RCC_BDCR register expect BKPSRAM) will be reset + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tickstart = 0U; + uint32_t tmpreg1 = 0U; + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*---------------------------- I2S configuration ---------------------------*/ + if((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S) == RCC_PERIPHCLK_I2S) || + (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLLI2S) == RCC_PERIPHCLK_PLLI2S)) + { + /* check for Parameters */ + assert_param(IS_RCC_PLLI2SR_VALUE(PeriphClkInit->PLLI2S.PLLI2SR)); + assert_param(IS_RCC_PLLI2SN_VALUE(PeriphClkInit->PLLI2S.PLLI2SN)); +#if defined(STM32F411xE) + assert_param(IS_RCC_PLLI2SM_VALUE(PeriphClkInit->PLLI2S.PLLI2SM)); +#endif /* STM32F411xE */ + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + +#if defined(STM32F411xE) + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_I2SCLK_CONFIG(PeriphClkInit->PLLI2S.PLLI2SM, PeriphClkInit->PLLI2S.PLLI2SN, PeriphClkInit->PLLI2S.PLLI2SR); +#else + /* Configure the PLLI2S division factors */ + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLM) */ + /* I2SCLK = f(PLLI2S clock output) = f(VCO clock) / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SN , PeriphClkInit->PLLI2S.PLLI2SR); +#endif /* STM32F411xE */ + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + /* Get tick */ + tickstart = HAL_GetTick(); + /* Wait till PLLI2S is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + } + + /*---------------------------- RTC configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == (RCC_PERIPHCLK_RTC)) + { + /* Check for RTC Parameters used to output RTCCLK */ + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* Enable Power Clock*/ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* Enable write access to Backup domain */ + PWR->CR |= PWR_CR_DBP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + while((PWR->CR & PWR_CR_DBP) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + tmpreg1 = (RCC->BDCR & RCC_BDCR_RTCSEL); + if((tmpreg1 != 0x00000000U) && ((tmpreg1) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + { + /* Store the content of BDCR register before the reset of Backup Domain */ + tmpreg1 = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + __HAL_RCC_BACKUPRESET_RELEASE(); + /* Restore the Content of BDCR register */ + RCC->BDCR = tmpreg1; + + /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */ + if(HAL_IS_BIT_SET(RCC->BDCR, RCC_BDCR_LSEON)) + { + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + } +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + /*---------------------------- TIM configuration ---------------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == (RCC_PERIPHCLK_TIM)) + { + __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection); + } +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that + * will be configured. + * @retval None + */ +void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + uint32_t tempreg; + + /* Set all possible values for the extended clock type parameter------------*/ + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_I2S | RCC_PERIPHCLK_RTC; + + /* Get the PLLI2S Clock configuration --------------------------------------*/ + PeriphClkInit->PLLI2S.PLLI2SN = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> RCC_PLLI2SCFGR_PLLI2SN_Pos); + PeriphClkInit->PLLI2S.PLLI2SR = (uint32_t)((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> RCC_PLLI2SCFGR_PLLI2SR_Pos); +#if defined(STM32F411xE) + PeriphClkInit->PLLI2S.PLLI2SM = (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM); +#endif /* STM32F411xE */ + /* Get the RTC Clock configuration -----------------------------------------*/ + tempreg = (RCC->CFGR & RCC_CFGR_RTCPRE); + PeriphClkInit->RTCClockSelection = (uint32_t)((tempreg) | (RCC->BDCR & RCC_BDCR_RTCSEL)); + +#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) + /* Get the TIM Prescaler configuration -------------------------------------*/ + if ((RCC->DCKCFGR & RCC_DCKCFGR_TIMPRE) == RESET) + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_DESACTIVATED; + } + else + { + PeriphClkInit->TIMPresSelection = RCC_TIMPRES_ACTIVATED; + } +#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ +} + +/** + * @brief Return the peripheral clock frequency for a given peripheral(SAI..) + * @note Return 0 if peripheral clock identifier not managed by this API + * @param PeriphClk Peripheral clock identifier + * This parameter can be one of the following values: + * @arg RCC_PERIPHCLK_I2S: I2S peripheral clock + * @retval Frequency in KHz + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + /* This variable used to store the I2S clock frequency (value in Hz) */ + uint32_t frequency = 0U; + /* This variable used to store the VCO Input (value in Hz) */ + uint32_t vcoinput = 0U; + uint32_t srcclk = 0U; + /* This variable used to store the VCO Output (value in Hz) */ + uint32_t vcooutput = 0U; + switch (PeriphClk) + { + case RCC_PERIPHCLK_I2S: + { + /* Get the current I2S source */ + srcclk = __HAL_RCC_GET_I2S_SOURCE(); + switch (srcclk) + { + /* Check if I2S clock selection is External clock mapped on the I2S_CKIN pin used as I2S clock */ + case RCC_I2SCLKSOURCE_EXT: + { + /* Set the I2S clock to the external clock value */ + frequency = EXTERNAL_CLOCK_VALUE; + break; + } + /* Check if I2S clock selection is PLLI2S VCO output clock divided by PLLI2SR used as I2S clock */ + case RCC_I2SCLKSOURCE_PLLI2S: + { +#if defined(STM32F411xE) + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLI2SM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SM)); + } +#else + /* Configure the PLLI2S division factor */ + /* PLLI2S_VCO Input = PLL_SOURCE/PLLM */ + if((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLSOURCE_HSE) + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSE_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } + else + { + /* Get the I2S source clock value */ + vcoinput = (uint32_t)(HSI_VALUE / (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM)); + } +#endif /* STM32F411xE */ + /* PLLI2S_VCO Output = PLLI2S_VCO Input * PLLI2SN */ + vcooutput = (uint32_t)(vcoinput * (((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN) >> 6U) & (RCC_PLLI2SCFGR_PLLI2SN >> 6U))); + /* I2S_CLK = PLLI2S_VCO Output/PLLI2SR */ + frequency = (uint32_t)(vcooutput /(((RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR) >> 28U) & (RCC_PLLI2SCFGR_PLLI2SR >> 28U))); + break; + } + /* Clock not enabled for I2S*/ + default: + { + frequency = 0U; + break; + } + } + break; + } + } + return frequency; +} +#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE */ + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Select LSE mode + * + * @note This mode is only available for STM32F410xx/STM32F411xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices. + * + * @param Mode specifies the LSE mode. + * This parameter can be one of the following values: + * @arg RCC_LSE_LOWPOWER_MODE: LSE oscillator in low power mode selection + * @arg RCC_LSE_HIGHDRIVE_MODE: LSE oscillator in High Drive mode selection + * @retval None + */ +void HAL_RCCEx_SelectLSEMode(uint8_t Mode) +{ + /* Check the parameters */ + assert_param(IS_RCC_LSE_MODE(Mode)); + if(Mode == RCC_LSE_HIGHDRIVE_MODE) + { + SET_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); + } + else + { + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEMOD); + } +} + +#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +/** @defgroup RCCEx_Exported_Functions_Group2 Extended Clock management functions + * @brief Extended Clock management functions + * +@verbatim + =============================================================================== + ##### Extended clock management functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to control the + activation or deactivation of PLLI2S, PLLSAI. +@endverbatim + * @{ + */ + +#if defined(RCC_PLLI2S_SUPPORT) +/** + * @brief Enable PLLI2S. + * @param PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that + * contains the configuration information for the PLLI2S + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) +{ + uint32_t tickstart; + + /* Check for parameters */ + assert_param(IS_RCC_PLLI2SN_VALUE(PLLI2SInit->PLLI2SN)); + assert_param(IS_RCC_PLLI2SR_VALUE(PLLI2SInit->PLLI2SR)); +#if defined(RCC_PLLI2SCFGR_PLLI2SM) + assert_param(IS_RCC_PLLI2SM_VALUE(PLLI2SInit->PLLI2SM)); +#endif /* RCC_PLLI2SCFGR_PLLI2SM */ +#if defined(RCC_PLLI2SCFGR_PLLI2SP) + assert_param(IS_RCC_PLLI2SP_VALUE(PLLI2SInit->PLLI2SP)); +#endif /* RCC_PLLI2SCFGR_PLLI2SP */ +#if defined(RCC_PLLI2SCFGR_PLLI2SQ) + assert_param(IS_RCC_PLLI2SQ_VALUE(PLLI2SInit->PLLI2SQ)); +#endif /* RCC_PLLI2SCFGR_PLLI2SQ */ + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Wait till PLLI2S is disabled */ + tickstart = HAL_GetTick(); + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Configure the PLLI2S division factors */ +#if defined(STM32F446xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SPCLK = PLLI2S_VCO / PLLI2SP */ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, \ + PLLI2SInit->PLLI2SP, PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\ + defined(STM32F413xx) || defined(STM32F423xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM)*/ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, \ + PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ + defined(STM32F469xx) || defined(STM32F479xx) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * PLLI2SN */ + /* I2SQCLK = PLLI2S_VCO / PLLI2SQ */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_SAICLK_CONFIG(PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SQ, PLLI2SInit->PLLI2SR); +#elif defined(STM32F411xE) + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) * (PLLI2SN/PLLI2SM) */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_I2SCLK_CONFIG(PLLI2SInit->PLLI2SM, PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SR); +#else + /* PLLI2S_VCO = f(VCO clock) = f(PLLI2S clock input) x PLLI2SN */ + /* I2SRCLK = PLLI2S_VCO / PLLI2SR */ + __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SN, PLLI2SInit->PLLI2SR); +#endif /* STM32F446xx */ + + /* Enable the PLLI2S */ + __HAL_RCC_PLLI2S_ENABLE(); + + /* Wait till PLLI2S is ready */ + tickstart = HAL_GetTick(); + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Disable PLLI2S. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) +{ + uint32_t tickstart; + + /* Disable the PLLI2S */ + __HAL_RCC_PLLI2S_DISABLE(); + + /* Wait till PLLI2S is disabled */ + tickstart = HAL_GetTick(); + while(READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) != RESET) + { + if((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) +/** + * @brief Enable PLLSAI. + * @param PLLSAIInit pointer to an RCC_PLLSAIInitTypeDef structure that + * contains the configuration information for the PLLSAI + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI(RCC_PLLSAIInitTypeDef *PLLSAIInit) +{ + uint32_t tickstart; + + /* Check for parameters */ + assert_param(IS_RCC_PLLSAIN_VALUE(PLLSAIInit->PLLSAIN)); + assert_param(IS_RCC_PLLSAIQ_VALUE(PLLSAIInit->PLLSAIQ)); +#if defined(RCC_PLLSAICFGR_PLLSAIM) + assert_param(IS_RCC_PLLSAIM_VALUE(PLLSAIInit->PLLSAIM)); +#endif /* RCC_PLLSAICFGR_PLLSAIM */ +#if defined(RCC_PLLSAICFGR_PLLSAIP) + assert_param(IS_RCC_PLLSAIP_VALUE(PLLSAIInit->PLLSAIP)); +#endif /* RCC_PLLSAICFGR_PLLSAIP */ +#if defined(RCC_PLLSAICFGR_PLLSAIR) + assert_param(IS_RCC_PLLSAIR_VALUE(PLLSAIInit->PLLSAIR)); +#endif /* RCC_PLLSAICFGR_PLLSAIR */ + + /* Disable the PLLSAI */ + __HAL_RCC_PLLSAI_DISABLE(); + + /* Wait till PLLSAI is disabled */ + tickstart = HAL_GetTick(); + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + /* Configure the PLLSAI division factors */ +#if defined(STM32F446xx) + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * (PLLSAIN/PLLSAIM) */ + /* SAIPCLK = PLLSAI_VCO / PLLSAIP */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIM, PLLSAIInit->PLLSAIN, \ + PLLSAIInit->PLLSAIP, PLLSAIInit->PLLSAIQ, 0U); +#elif defined(STM32F469xx) || defined(STM32F479xx) + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) * PLLSAIN */ + /* SAIPCLK = PLLSAI_VCO / PLLSAIP */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIN, PLLSAIInit->PLLSAIP, \ + PLLSAIInit->PLLSAIQ, PLLSAIInit->PLLSAIR); +#else + /* PLLSAI_VCO = f(VCO clock) = f(PLLSAI clock input) x PLLSAIN */ + /* SAIQCLK = PLLSAI_VCO / PLLSAIQ */ + /* SAIRCLK = PLLSAI_VCO / PLLSAIR */ + __HAL_RCC_PLLSAI_CONFIG(PLLSAIInit->PLLSAIN, PLLSAIInit->PLLSAIQ, PLLSAIInit->PLLSAIR); +#endif /* STM32F446xx */ + + /* Enable the PLLSAI */ + __HAL_RCC_PLLSAI_ENABLE(); + + /* Wait till PLLSAI is ready */ + tickstart = HAL_GetTick(); + while(__HAL_RCC_PLLSAI_GET_FLAG() == RESET) + { + if((HAL_GetTick() - tickstart ) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +/** + * @brief Disable PLLSAI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI(void) +{ + uint32_t tickstart; + + /* Disable the PLLSAI */ + __HAL_RCC_PLLSAI_DISABLE(); + + /* Wait till PLLSAI is disabled */ + tickstart = HAL_GetTick(); + while(__HAL_RCC_PLLSAI_GET_FLAG() != RESET) + { + if((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + /* return in case of Timeout detected */ + return HAL_TIMEOUT; + } + } + + return HAL_OK; +} + +#endif /* RCC_PLLSAI_SUPPORT */ + +/** + * @} + */ + +#if defined(STM32F446xx) +/** + * @brief Returns the SYSCLK frequency + * + * @note This function implementation is valid only for STM32F446xx devices. + * @note This function add the PLL/PLLR System clock source + * + * @note The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * @note If SYSCLK source is HSI, function returns values based on HSI_VALUE(*) + * @note If SYSCLK source is HSE, function returns values based on HSE_VALUE(**) + * @note If SYSCLK source is PLL or PLLR, function returns values based on HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * @note (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * @note (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * @note The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @note This function can be used by the user application to compute the + * baudrate for the communication peripherals or configure other parameters. + * + * @note Each time SYSCLK changes, this function must be called to update the + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ + uint32_t pllm = 0U; + uint32_t pllvco = 0U; + uint32_t pllp = 0U; + uint32_t pllr = 0U; + uint32_t sysclockfreq = 0U; + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (RCC->CFGR & RCC_CFGR_SWS) + { + case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ + { + sysclockfreq = HSI_VALUE; + break; + } + case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ + { + sysclockfreq = HSE_VALUE; + break; + } + case RCC_CFGR_SWS_PLL: /* PLL/PLLP used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLP */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) *2U); + + sysclockfreq = pllvco/pllp; + break; + } + case RCC_CFGR_SWS_PLLR: /* PLL/PLLR used as system clock source */ + { + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR */ + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) + { + /* HSE used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); + } + pllr = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos); + + sysclockfreq = pllvco/pllr; + break; + } + default: + { + sysclockfreq = HSI_VALUE; + break; + } + } + return sysclockfreq; +} +#endif /* STM32F446xx */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @brief Resets the RCC clock configuration to the default reset state. + * @note The default reset state of the clock configuration is given below: + * - HSI ON and used as system clock source + * - HSE, PLL, PLLI2S and PLLSAI OFF + * - AHB, APB1 and APB2 prescaler set to 1. + * - CSS, MCO1 and MCO2 OFF + * - All interrupts disabled + * @note This function doesn't modify the configuration of the + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + uint32_t tickstart; + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Set HSION bit to the reset value */ + SET_BIT(RCC->CR, RCC_CR_HSION); + + /* Wait till HSI is ready */ + while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set HSITRIM[4:0] bits to the reset value */ + SET_BIT(RCC->CR, RCC_CR_HSITRIM_4); + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + + /* Wait till clock switch is ready */ + while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Clear HSEON, HSEBYP and CSSON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_CSSON); + + /* Wait till HSE is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Clear PLLON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON); + + /* Wait till PLL is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + +#if defined(RCC_PLLI2S_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset PLLI2SON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLI2SON); + + /* Wait till PLLI2S is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLI2SRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_PLLSAI_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + + /* Reset PLLSAI bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLSAION); + + /* Wait till PLLSAI is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLSAIRDY) != RESET) + { + if ((HAL_GetTick() - tickstart) > PLLSAI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } +#endif /* RCC_PLLSAI_SUPPORT */ + + /* Once PLL, PLLI2S and PLLSAI are OFF, reset PLLCFGR register to default value */ +#if defined(STM32F412Cx) || defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || \ + defined(STM32F423xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLCFGR = RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLR_1; +#elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) + RCC->PLLCFGR = RCC_PLLCFGR_PLLR_0 | RCC_PLLCFGR_PLLR_1 | RCC_PLLCFGR_PLLR_2 | RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_0 | RCC_PLLCFGR_PLLQ_1 | RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLQ_3; +#else + RCC->PLLCFGR = RCC_PLLCFGR_PLLM_4 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_7 | RCC_PLLCFGR_PLLQ_2; +#endif /* STM32F412Cx || STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx || STM32F446xx || STM32F469xx || STM32F479xx */ + + /* Reset PLLI2SCFGR register to default value */ +#if defined(STM32F412Cx) || defined(STM32F412Rx) || defined(STM32F412Vx) || defined(STM32F412Zx) || defined(STM32F413xx) || \ + defined(STM32F423xx) || defined(STM32F446xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SQ_2 | RCC_PLLI2SCFGR_PLLI2SR_1; +#elif defined(STM32F411xE) + RCC->PLLI2SCFGR = RCC_PLLI2SCFGR_PLLI2SM_4 | RCC_PLLI2SCFGR_PLLI2SN_6 | RCC_PLLI2SCFGR_PLLI2SN_7 | RCC_PLLI2SCFGR_PLLI2SR_1; +#endif /* STM32F412Cx || STM32F412Rx || STM32F412Vx || STM32F412Zx || STM32F413xx || STM32F423xx || STM32F446xx */ + + /* Reset PLLSAICFGR register */ +#if defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) + RCC->PLLSAICFGR = RCC_PLLSAICFGR_PLLSAIN_6 | RCC_PLLSAICFGR_PLLSAIN_7 | RCC_PLLSAICFGR_PLLSAIQ_2 | RCC_PLLSAICFGR_PLLSAIR_1; +#elif defined(STM32F446xx) + RCC->PLLSAICFGR = RCC_PLLSAICFGR_PLLSAIM_4 | RCC_PLLSAICFGR_PLLSAIN_6 | RCC_PLLSAICFGR_PLLSAIN_7 | RCC_PLLSAICFGR_PLLSAIQ_2; +#endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F469xx || STM32F479xx */ + + /* Disable all interrupts */ + CLEAR_BIT(RCC->CIR, RCC_CIR_LSIRDYIE | RCC_CIR_LSERDYIE | RCC_CIR_HSIRDYIE | RCC_CIR_HSERDYIE | RCC_CIR_PLLRDYIE); + +#if defined(RCC_CIR_PLLI2SRDYIE) + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYIE); +#endif /* RCC_CIR_PLLI2SRDYIE */ + +#if defined(RCC_CIR_PLLSAIRDYIE) + CLEAR_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYIE); +#endif /* RCC_CIR_PLLSAIRDYIE */ + + /* Clear all interrupt flags */ + SET_BIT(RCC->CIR, RCC_CIR_LSIRDYC | RCC_CIR_LSERDYC | RCC_CIR_HSIRDYC | RCC_CIR_HSERDYC | RCC_CIR_PLLRDYC | RCC_CIR_CSSC); + +#if defined(RCC_CIR_PLLI2SRDYC) + SET_BIT(RCC->CIR, RCC_CIR_PLLI2SRDYC); +#endif /* RCC_CIR_PLLI2SRDYC */ + +#if defined(RCC_CIR_PLLSAIRDYC) + SET_BIT(RCC->CIR, RCC_CIR_PLLSAIRDYC); +#endif /* RCC_CIR_PLLSAIRDYC */ + + /* Clear LSION bit */ + CLEAR_BIT(RCC->CSR, RCC_CSR_LSION); + + /* Reset all CSR flags */ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HSI_VALUE; + + /* Adapt Systick interrupt period */ + if(HAL_InitTick(uwTickPrio) != HAL_OK) + { + return HAL_ERROR; + } + else + { + return HAL_OK; + } +} + +#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ + defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) +/** + * @brief Initializes the RCC Oscillators according to the specified parameters in the + * RCC_OscInitTypeDef. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that + * contains the configuration information for the RCC Oscillators. + * @note The PLL is not disabled when used as system clock. + * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not + * supported by this API. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. + * @note Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not + * supported by this API. User should request a transition to HSE Off + * first and then HSE On or HSE Bypass. + * @note This function add the PLL/PLLR factor management during PLL configuration this feature + * is only available in STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + uint32_t tickstart, pll_config; + + /* Check Null pointer */ + if(RCC_OscInitStruct == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + /*------------------------------- HSE Configuration ------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + { + /* Check the parameters */ + assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); + /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */ +#if defined(STM32F446xx) + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLLR) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) +#else + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) +#endif /* STM32F446xx */ + { + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + { + return HAL_ERROR; + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + + /* Check the HSE State */ + if((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSE is bypassed or disabled */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + { + /* Check the parameters */ + assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); + assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); + + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ +#if defined(STM32F446xx) + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLLR) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) +#else + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ + ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) +#endif /* STM32F446xx */ + { + /* When HSI is used as system clock it will not disabled */ + if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + { + return HAL_ERROR; + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + } + else + { + /* Check the HSI State */ + if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF) + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till HSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF) + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSI is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + { + FlagStatus pwrclkchanged = RESET; + + /* Check the parameters */ + assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); + + /* Update LSE configuration in Backup Domain control register */ + /* Requires to enable write access to Backup Domain of necessary */ + if(__HAL_RCC_PWR_IS_CLK_DISABLED()) + { + __HAL_RCC_PWR_CLK_ENABLE(); + pwrclkchanged = SET; + } + + if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + + while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + { + if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + /* Check the LSE State */ + if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till LSE is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + + /* Restore clock configuration if changed */ + if(pwrclkchanged == SET) + { + __HAL_RCC_PWR_CLK_DISABLE(); + } + } + /*-------------------------------- PLL Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); + if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) + { + /* Check if the PLL is used as system clock or not */ + if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) + { + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + { + /* Check the parameters */ + assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource)); + assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM)); + assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); + assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); + assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); + assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR)); + + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Configure the main PLL clock source, multiplication and division factors. */ + WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ + RCC_OscInitStruct->PLL.PLLM | \ + (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ + (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ + (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos) | \ + (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLL is ready */ + while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + { + if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + { + return HAL_ERROR; + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->PLLCFGR; +#if defined (RCC_PLLCFGR_PLLR) + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos))) +#else + if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != (RCC_OscInitStruct->PLL.PLLM) << RCC_PLLCFGR_PLLM_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN) << RCC_PLLCFGR_PLLN_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U)) << RCC_PLLCFGR_PLLP_Pos) || + (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))) +#endif + { + return HAL_ERROR; + } + } + } + } + return HAL_OK; +} + +/** + * @brief Configures the RCC_OscInitStruct according to the internal + * RCC configuration registers. + * @param RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that will be configured. + * + * @note This function is only available in case of STM32F410xx/STM32F446xx/STM32F469xx/STM32F479xx/STM32F412Zx/STM32F412Vx/STM32F412Rx/STM32F412Cx devices. + * @note This function add the PLL/PLLR factor management + * @retval None + */ +void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) +{ + /* Set all possible values for the Oscillator type parameter ---------------*/ + RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI; + + /* Get the HSE configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + { + RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; + } + else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON) + { + RCC_OscInitStruct->HSEState = RCC_HSE_ON; + } + else + { + RCC_OscInitStruct->HSEState = RCC_HSE_OFF; + } + + /* Get the HSI configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION) + { + RCC_OscInitStruct->HSIState = RCC_HSI_ON; + } + else + { + RCC_OscInitStruct->HSIState = RCC_HSI_OFF; + } + + RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos); + + /* Get the LSE configuration -----------------------------------------------*/ + if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + { + RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; + } + else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + { + RCC_OscInitStruct->LSEState = RCC_LSE_ON; + } + else + { + RCC_OscInitStruct->LSEState = RCC_LSE_OFF; + } + + /* Get the LSI configuration -----------------------------------------------*/ + if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION) + { + RCC_OscInitStruct->LSIState = RCC_LSI_ON; + } + else + { + RCC_OscInitStruct->LSIState = RCC_LSI_OFF; + } + + /* Get the PLL configuration -----------------------------------------------*/ + if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON) + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; + } + else + { + RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; + } + RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLM = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLM); + RCC_OscInitStruct->PLL.PLLN = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + RCC_OscInitStruct->PLL.PLLP = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) + RCC_PLLCFGR_PLLP_0) << 1U) >> RCC_PLLCFGR_PLLP_Pos); + RCC_OscInitStruct->PLL.PLLQ = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos); + RCC_OscInitStruct->PLL.PLLR = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos); +} +#endif /* STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */ + +#endif /* HAL_RCC_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c new file mode 100644 index 0000000..1ca1781 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c @@ -0,0 +1,7621 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer (TIM) peripheral: + * + TIM Time Base Initialization + * + TIM Time Base Start + * + TIM Time Base Start Interruption + * + TIM Time Base Start DMA + * + TIM Output Compare/PWM Initialization + * + TIM Output Compare/PWM Channel Configuration + * + TIM Output Compare/PWM Start + * + TIM Output Compare/PWM Start Interruption + * + TIM Output Compare/PWM Start DMA + * + TIM Input Capture Initialization + * + TIM Input Capture Channel Configuration + * + TIM Input Capture Start + * + TIM Input Capture Start Interruption + * + TIM Input Capture Start DMA + * + TIM One Pulse Initialization + * + TIM One Pulse Channel Configuration + * + TIM One Pulse Start + * + TIM Encoder Interface Initialization + * + TIM Encoder Interface Start + * + TIM Encoder Interface Start Interruption + * + TIM Encoder Interface Start DMA + * + Commutation Event configuration with Interruption and DMA + * + TIM OCRef clear configuration + * + TIM External Clock configuration + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### TIMER Generic features ##### + ============================================================================== + [..] The Timer features include: + (#) 16-bit up, down, up/down auto-reload counter. + (#) 16-bit programmable prescaler allowing dividing (also on the fly) the + counter clock frequency either by any factor between 1 and 65536. + (#) Up to 4 independent channels for: + (++) Input Capture + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to interconnect + several timers together. + (#) Supports incremental encoder for positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Time Base : HAL_TIM_Base_MspInit() + (++) Input Capture : HAL_TIM_IC_MspInit() + (++) Output Compare : HAL_TIM_OC_MspInit() + (++) PWM generation : HAL_TIM_PWM_MspInit() + (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit() + (++) Encoder mode output : HAL_TIM_Encoder_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + Initialization function of this driver: + (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base + (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an + Output Compare signal. + (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a + PWM signal. + (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an + external signal. + (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer + in One Pulse Mode. + (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface. + + (#) Activate the TIM peripheral using one of the start functions depending from the feature used: + (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT() + (++) Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT() + (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT() + (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT() + (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT() + (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT(). + + (#) The DMA Burst is managed with the two following functions: + HAL_TIM_DMABurst_WriteStart() + HAL_TIM_DMABurst_ReadStart() + + *** Callback registration *** + ============================================= + + [..] + The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + [..] + Use Function HAL_TIM_RegisterCallback() to register a callback. + HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle, + the Callback ID and a pointer to the user callback function. + + [..] + Use function HAL_TIM_UnRegisterCallback() to reset a callback to the default + weak function. + HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle, + and the Callback ID. + + [..] + These functions allow to register/unregister following callbacks: + (+) Base_MspInitCallback : TIM Base Msp Init Callback. + (+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback. + (+) IC_MspInitCallback : TIM IC Msp Init Callback. + (+) IC_MspDeInitCallback : TIM IC Msp DeInit Callback. + (+) OC_MspInitCallback : TIM OC Msp Init Callback. + (+) OC_MspDeInitCallback : TIM OC Msp DeInit Callback. + (+) PWM_MspInitCallback : TIM PWM Msp Init Callback. + (+) PWM_MspDeInitCallback : TIM PWM Msp DeInit Callback. + (+) OnePulse_MspInitCallback : TIM One Pulse Msp Init Callback. + (+) OnePulse_MspDeInitCallback : TIM One Pulse Msp DeInit Callback. + (+) Encoder_MspInitCallback : TIM Encoder Msp Init Callback. + (+) Encoder_MspDeInitCallback : TIM Encoder Msp DeInit Callback. + (+) HallSensor_MspInitCallback : TIM Hall Sensor Msp Init Callback. + (+) HallSensor_MspDeInitCallback : TIM Hall Sensor Msp DeInit Callback. + (+) PeriodElapsedCallback : TIM Period Elapsed Callback. + (+) PeriodElapsedHalfCpltCallback : TIM Period Elapsed half complete Callback. + (+) TriggerCallback : TIM Trigger Callback. + (+) TriggerHalfCpltCallback : TIM Trigger half complete Callback. + (+) IC_CaptureCallback : TIM Input Capture Callback. + (+) IC_CaptureHalfCpltCallback : TIM Input Capture half complete Callback. + (+) OC_DelayElapsedCallback : TIM Output Compare Delay Elapsed Callback. + (+) PWM_PulseFinishedCallback : TIM PWM Pulse Finished Callback. + (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback. + (+) ErrorCallback : TIM Error Callback. + (+) CommutationCallback : TIM Commutation Callback. + (+) CommutationHalfCpltCallback : TIM Commutation half complete Callback. + (+) BreakCallback : TIM Break Callback. + + [..] +By default, after the Init and when the state is HAL_TIM_STATE_RESET +all interrupt callbacks are set to the corresponding weak functions: + examples HAL_TIM_TriggerCallback(), HAL_TIM_ErrorCallback(). + + [..] + Exception done for MspInit and MspDeInit functions that are reset to the legacy weak + functionalities in the Init / DeInit only when these callbacks are null + (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit + keep and use the user MspInit / MspDeInit callbacks(registered beforehand) + + [..] + Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only. + Exception done MspInit / MspDeInit that can be registered / unregistered + in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state, + thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_TIM_RegisterCallback() before calling DeInit or Init function. + + [..] + When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available and all callbacks + are set to the corresponding weak functions. + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup TIM TIM + * @brief TIM HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup TIM_Private_Functions + * @{ + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config); +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter); +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter); +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource); +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig); +/** + * @} + */ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup TIM_Exported_Functions TIM Exported Functions + * @{ + */ + +/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions + * @brief Time Base functions + * +@verbatim + ============================================================================== + ##### Time Base functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM base. + (+) De-initialize the TIM base. + (+) Start the Time Base. + (+) Stop the Time Base. + (+) Start the Time Base and enable interrupt. + (+) Stop the Time Base and disable interrupt. + (+) Start the Time Base and enable DMA transfer. + (+) Stop the Time Base and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Time base Unit according to the specified + * parameters in the TIM_HandleTypeDef and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Base_MspInitCallback == NULL) + { + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Base_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the Time Base configuration */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Base peripheral + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Base_MspDeInitCallback == NULL) + { + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Base_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Base MSP. + * @param htim TIM Base handle + * @retval None + */ +__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Base_MspDeInit could be implemented in the user file + */ +} + + +/** + * @brief Starts the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Check the TIM state */ + if (htim->State != HAL_TIM_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Enable the TIM Update interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in interrupt mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + /* Disable the TIM Update interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Set the TIM state */ + if (htim->State == HAL_TIM_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->State == HAL_TIM_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + htim->State = HAL_TIM_STATE_BUSY; + } + } + else + { + return HAL_ERROR; + } + + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Update DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Base generation in DMA mode. + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMA_INSTANCE(htim->Instance)); + + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions + * @brief TIM Output Compare functions + * +@verbatim + ============================================================================== + ##### TIM Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Output Compare. + (+) De-initialize the TIM Output Compare. + (+) Start the TIM Output Compare. + (+) Stop the TIM Output Compare. + (+) Start the TIM Output Compare and enable interrupt. + (+) Stop the TIM Output Compare and disable interrupt. + (+) Start the TIM Output Compare and enable DMA transfer. + (+) Stop the TIM Output Compare and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Output Compare according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OC_MspInitCallback == NULL) + { + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the Output Compare */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OC_MspDeInitCallback == NULL) + { + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions + * @brief TIM PWM functions + * +@verbatim + ============================================================================== + ##### TIM PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM PWM. + (+) De-initialize the TIM PWM. + (+) Start the TIM PWM. + (+) Stop the TIM PWM. + (+) Start the TIM PWM and enable interrupt. + (+) Stop the TIM PWM and disable interrupt. + (+) Start the TIM PWM and enable DMA transfer. + (+) Stop the TIM PWM and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM PWM Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->PWM_MspInitCallback == NULL) + { + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->PWM_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the PWM */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->PWM_MspDeInitCallback == NULL) + { + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + } + /* DeInit the low level hardware */ + htim->PWM_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the PWM signal generation. + * @param htim TIM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Capture/Compare 3 request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode. + * @param htim TIM PWM handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions + * @brief TIM Input Capture functions + * +@verbatim + ============================================================================== + ##### TIM Input Capture functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Input Capture. + (+) De-initialize the TIM Input Capture. + (+) Start the TIM Input Capture. + (+) Stop the TIM Input Capture. + (+) Start the TIM Input Capture and enable interrupt. + (+) Stop the TIM Input Capture and disable interrupt. + (+) Start the TIM Input Capture and enable DMA transfer. + (+) Stop the TIM Input Capture and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Input Capture Time base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init() + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->IC_MspInitCallback == NULL) + { + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->IC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Init the base time for the input capture */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM peripheral + * @param htim TIM Input Capture handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->IC_MspDeInitCallback == NULL) + { + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + } + /* DeInit the low level hardware */ + htim->IC_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_IC_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Input Capture MSP. + * @param htim TIM Input Capture handle + * @retval None + */ +__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Input Capture MSP. + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Input Capture measurement. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in interrupt mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel); + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + case TIM_CHANNEL_4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); + break; + } + + default: + status = HAL_ERROR; + break; + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + case TIM_CHANNEL_4: + { + /* Disable the TIM Capture/Compare 4 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions + * @brief TIM One Pulse functions + * +@verbatim + ============================================================================== + ##### TIM One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM One Pulse. + (+) De-initialize the TIM One Pulse. + (+) Start the TIM One Pulse. + (+) Stop the TIM One Pulse. + (+) Start the TIM One Pulse and enable interrupt. + (+) Stop the TIM One Pulse and disable interrupt. + (+) Start the TIM One Pulse and enable DMA transfer. + (+) Stop the TIM One Pulse and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM One Pulse Time Base according to the specified + * parameters in the TIM_HandleTypeDef and initializes the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init() + * @note When the timer instance is initialized in One Pulse mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM One Pulse handle + * @param OnePulseMode Select the One pulse mode. + * This parameter can be one of the following values: + * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. + * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) +{ + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_OPM_MODE(OnePulseMode)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->OnePulse_MspInitCallback == NULL) + { + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OnePulse_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OnePulse_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the One Pulse Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Reset the OPM Bit */ + htim->Instance->CR1 &= ~TIM_CR1_OPM; + + /* Configure the OPM Mode */ + htim->Instance->CR1 |= OnePulseMode; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM One Pulse + * @param htim TIM One Pulse handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->OnePulse_MspDeInitCallback == NULL) + { + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + } + /* DeInit the low level hardware */ + htim->OnePulse_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_OnePulse_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM One Pulse MSP. + * @param htim TIM One Pulse handle + * @retval None + */ +__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together + + No need to enable the counter, it's enabled automatically by hardware + (the counter starts in response to a stimulus and generate a pulse */ + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode. + * @note Though OutputChannel parameter is deprecated and ignored by the function + * it has been kept to avoid HAL_TIM API compatibility break. + * @note The pulse output channel is determined when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel See note above + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(OutputChannel); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the Capture compare and the Input Capture channels + (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) + if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and + if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output + whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + { + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions + * @brief TIM Encoder functions + * +@verbatim + ============================================================================== + ##### TIM Encoder functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure the TIM Encoder. + (+) De-initialize the TIM Encoder. + (+) Start the TIM Encoder. + (+) Stop the TIM Encoder. + (+) Start the TIM Encoder and enable interrupt. + (+) Stop the TIM Encoder and disable interrupt. + (+) Start the TIM Encoder and enable DMA transfer. + (+) Stop the TIM Encoder and disable DMA transfer. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Encoder Interface and initialize the associated handle. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init() + * @note Encoder mode and External clock mode 2 are not compatible and must not be selected together + * Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource + * using TIM_CLOCKSOURCE_ETRMODE2 and vice versa + * @note When the timer instance is initialized in Encoder mode, timer + * channels 1 and channel 2 are reserved and cannot be used for other + * purpose. + * @param htim TIM Encoder Interface handle + * @param sConfig TIM Encoder Interface configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig) +{ + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); + assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy weak callbacks */ + TIM_ResetCallback(htim); + + if (htim->Encoder_MspInitCallback == NULL) + { + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Encoder_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_Encoder_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Reset the SMS and ECE bits */ + htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE); + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Get the TIMx CCMR1 register value */ + tmpccmr1 = htim->Instance->CCMR1; + + /* Get the TIMx CCER register value */ + tmpccer = htim->Instance->CCER; + + /* Set the encoder Mode */ + tmpsmcr |= sConfig->EncoderMode; + + /* Select the Capture Compare 1 and the Capture Compare 2 as input */ + tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S); + tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U)); + + /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */ + tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC); + tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F); + tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U); + tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U); + + /* Set the TI1 and the TI2 Polarities */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); + tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP); + tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U); + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Write to TIMx CCMR1 */ + htim->Instance->CCMR1 = tmpccmr1; + + /* Write to TIMx CCER */ + htim->Instance->CCER = tmpccer; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + + +/** + * @brief DeInitializes the TIM Encoder interface + * @param htim TIM Encoder Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->Encoder_MspDeInitCallback == NULL) + { + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + } + /* DeInit the low level hardware */ + htim->Encoder_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIM_Encoder_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Encoder Interface MSP. + * @param htim TIM Encoder Interface handle + * @retval None + */ +__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_Encoder_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + break; + } + } + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + break; + } + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + + /* Enable the encoder interface channels */ + /* Enable the capture compare Interrupts 1 and/or 2 */ + switch (Channel) + { + case TIM_CHANNEL_1: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + default : + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + } + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in interrupt mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts 1 and 2 */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @param pData1 The destination Buffer address for IC1. + * @param pData2 The destination Buffer address for IC2. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, + uint32_t *pData2, uint16_t Length) +{ + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel(s) state */ + if (Channel == TIM_CHANNEL_1) + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData1 == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else if (Channel == TIM_CHANNEL_2) + { + if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData2 == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + else + { + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError; + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + + default: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + /* Enable the TIM Input Capture DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); + + /* Enable the Peripheral */ + __HAL_TIM_ENABLE(htim); + + break; + } + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Encoder Interface in DMA mode. + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1 and 2 + (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ + if (Channel == TIM_CHANNEL_1) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + } + else if (Channel == TIM_CHANNEL_2) + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + else + { + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); + + /* Disable the capture compare DMA Request 1 and 2 */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + } + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel(s) state */ + if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) + { + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ +/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management + * @brief TIM IRQ handler management + * +@verbatim + ============================================================================== + ##### IRQ handler management ##### + ============================================================================== + [..] + This section provides Timer IRQ handler function. + +@endverbatim + * @{ + */ +/** + * @brief This function handles TIM interrupts requests. + * @param htim TIM handle + * @retval None + */ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) +{ + /* Capture compare 1 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) + { + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + } + /* Capture compare 2 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 3 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* Capture compare 4 event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + /* Output compare event */ + else + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + } + } + /* TIM Update event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Break input event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->BreakCallback(htim); +#else + HAL_TIMEx_BreakCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Trigger detection event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM commutation event */ + if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) + { + if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) + { + __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions + * @brief TIM Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode. + (+) Configure External Clock source. + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master and the Slave synchronization. + (+) Configure the DMA Burst Mode. + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the TIM Output Compare Channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM Output Compare handle + * @param sConfig TIM Output Compare configuration structure + * @param Channel TIM Channels to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, + TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 1 in Output Compare */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 2 in Output Compare */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 3 in Output Compare */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 4 in Output Compare */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + break; + } + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM Input Capture Channels according to the specified + * parameters in the TIM_IC_InitTypeDef. + * @param htim TIM IC handle + * @param sConfig TIM Input Capture configuration structure + * @param Channel TIM Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity)); + assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter)); + + /* Process Locked */ + __HAL_LOCK(htim); + + if (Channel == TIM_CHANNEL_1) + { + /* TI1 Configuration */ + TIM_TI1_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_2) + { + /* TI2 Configuration */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Set the IC2PSC value */ + htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U); + } + else if (Channel == TIM_CHANNEL_3) + { + /* TI3 Configuration */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + TIM_TI3_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC3PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC; + + /* Set the IC3PSC value */ + htim->Instance->CCMR2 |= sConfig->ICPrescaler; + } + else if (Channel == TIM_CHANNEL_4) + { + /* TI4 Configuration */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + TIM_TI4_SetConfig(htim->Instance, + sConfig->ICPolarity, + sConfig->ICSelection, + sConfig->ICFilter); + + /* Reset the IC4PSC Bits */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC; + + /* Set the IC4PSC value */ + htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U); + } + else + { + status = HAL_ERROR; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM PWM channels according to the specified + * parameters in the TIM_OC_InitTypeDef. + * @param htim TIM PWM handle + * @param sConfig TIM PWM configuration structure + * @param Channel TIM Channels to be configured + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, + TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); + + /* Process Locked */ + __HAL_LOCK(htim); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the Channel 1 in PWM mode */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the Channel 2 in PWM mode */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the Channel 3 in PWM mode */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode; + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the Channel 4 in PWM mode */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + + /* Set the Preload enable bit for channel4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + break; + } + + default: + status = HAL_ERROR; + break; + } + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Initializes the TIM One Pulse Channels according to the specified + * parameters in the TIM_OnePulse_InitTypeDef. + * @param htim TIM One Pulse handle + * @param sConfig TIM One Pulse configuration structure + * @param OutputChannel TIM output channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @param InputChannel TIM input Channel to configure + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @note To output a waveform with a minimum delay user can enable the fast + * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx + * output is forced in response to the edge detection on TIx input, + * without taking in account the comparison. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, + uint32_t OutputChannel, uint32_t InputChannel) +{ + HAL_StatusTypeDef status = HAL_OK; + TIM_OC_InitTypeDef temp1; + + /* Check the parameters */ + assert_param(IS_TIM_OPM_CHANNELS(OutputChannel)); + assert_param(IS_TIM_OPM_CHANNELS(InputChannel)); + + if (OutputChannel != InputChannel) + { + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Extract the Output compare configuration from sConfig structure */ + temp1.OCMode = sConfig->OCMode; + temp1.Pulse = sConfig->Pulse; + temp1.OCPolarity = sConfig->OCPolarity; + temp1.OCNPolarity = sConfig->OCNPolarity; + temp1.OCIdleState = sConfig->OCIdleState; + temp1.OCNIdleState = sConfig->OCNIdleState; + + switch (OutputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_OC1_SetConfig(htim->Instance, &temp1); + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_OC2_SetConfig(htim->Instance, &temp1); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (InputChannel) + { + case TIM_CHANNEL_1: + { + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1FP1; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + case TIM_CHANNEL_2: + { + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); + + /* Reset the IC2PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; + + /* Select the Trigger source */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI2FP2; + + /* Select the Slave Mode */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + break; + } + + default: + status = HAL_ERROR; + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * 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_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one 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 BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) +{ + HAL_StatusTypeDef status; + + status = HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + + + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data write + * 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_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one 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 BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, + (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM DMA Burst mode + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA stream) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * 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_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one 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 BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @note This function should be used only when BurstLength is equal to DMA data transfer length. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) +{ + HAL_StatusTypeDef status; + + status = HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, + ((BurstLength) >> 8U) + 1U); + + + return status; +} + +/** + * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from where the DMA will start the Data read + * 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_RCR + * @arg TIM_DMABASE_CCR1 + * @arg TIM_DMABASE_CCR2 + * @arg TIM_DMABASE_CCR3 + * @arg TIM_DMABASE_CCR4 + * @arg TIM_DMABASE_BDTR + * @param BurstRequestSrc TIM DMA Request sources + * This parameter can be one 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 BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value + * between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS. + * @param DataLength Data length. This parameter can be one value + * between 1 and 0xFFFF. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, + uint32_t BurstRequestSrc, uint32_t *BurstBuffer, + uint32_t BurstLength, uint32_t DataLength) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + assert_param(IS_TIM_DMA_BASE(BurstBaseAddress)); + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + assert_param(IS_TIM_DMA_LENGTH(BurstLength)); + assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength)); + + if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) + { + return HAL_BUSY; + } + else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) + { + if ((BurstBuffer == NULL) && (BurstLength > 0U)) + { + return HAL_ERROR; + } + else + { + htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY; + } + } + else + { + /* nothing to do */ + } + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + /* Set the DMA Period elapsed callbacks */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback = TIM_DMAPeriodElapsedCplt; + htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC1: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC2: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC3: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_CC4: + { + /* Set the DMA capture callbacks */ + htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_COM: + { + /* Set the DMA commutation callbacks */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + case TIM_DMA_TRIGGER: + { + /* Set the DMA trigger callbacks */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback = TIM_DMATriggerCplt; + htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, + DataLength) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Configure the DMA Burst Mode */ + htim->Instance->DCR = (BurstBaseAddress | BurstLength); + + /* Enable the TIM DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc); + } + + /* Return function status */ + return status; +} + +/** + * @brief Stop the DMA burst reading + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc)); + + /* Abort the DMA transfer (at least disable the DMA stream) */ + switch (BurstRequestSrc) + { + case TIM_DMA_UPDATE: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]); + break; + } + case TIM_DMA_CC1: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + case TIM_DMA_CC2: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + case TIM_DMA_CC3: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + case TIM_DMA_CC4: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]); + break; + } + case TIM_DMA_COM: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]); + break; + } + case TIM_DMA_TRIGGER: + { + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]); + break; + } + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the TIM Update DMA request */ + __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc); + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + } + + /* Return function status */ + return status; +} + +/** + * @brief Generate a software event + * @param htim TIM handle + * @param EventSource specifies the event source. + * This parameter can be one 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 Basic timers can only generate an update event. + * @note TIM_EVENTSOURCE_COM is relevant only with advanced timer instances. + * @note TIM_EVENTSOURCE_BREAK are relevant only for timer instances + * supporting a break input. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + assert_param(IS_TIM_EVENT_SOURCE(EventSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Set the event sources */ + htim->Instance->EGR = EventSource; + + /* Change the TIM state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Configures the OCRef clear feature + * @param htim TIM handle + * @param sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that + * contains the OCREF clear feature and parameters for the TIM peripheral. + * @param 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 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, + TIM_ClearInputConfigTypeDef *sClearInputConfig, + uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource)); + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + switch (sClearInputConfig->ClearInputSource) + { + case TIM_CLEARINPUTSOURCE_NONE: + { + /* Clear the OCREF clear selection bit and the the ETR Bits */ + CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP)); + break; + } + + case TIM_CLEARINPUTSOURCE_ETR: + { + /* Check the parameters */ + assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity)); + assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler)); + assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter)); + + /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */ + if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + TIM_ETR_SetConfig(htim->Instance, + sClearInputConfig->ClearInputPrescaler, + sClearInputConfig->ClearInputPolarity, + sClearInputConfig->ClearInputFilter); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + switch (Channel) + { + case TIM_CHANNEL_1: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 1 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + else + { + /* Disable the OCREF clear feature for Channel 1 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE); + } + break; + } + case TIM_CHANNEL_2: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 2 */ + SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + else + { + /* Disable the OCREF clear feature for Channel 2 */ + CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE); + } + break; + } + case TIM_CHANNEL_3: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 3 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + else + { + /* Disable the OCREF clear feature for Channel 3 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE); + } + break; + } + case TIM_CHANNEL_4: + { + if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) + { + /* Enable the OCREF clear feature for Channel 4 */ + SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + else + { + /* Disable the OCREF clear feature for Channel 4 */ + CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE); + } + break; + } + default: + break; + } + } + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Configures the clock source to be used + * @param htim TIM handle + * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that + * contains the clock source information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Process Locked */ + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); + + /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + htim->Instance->SMCR = tmpsmcr; + + switch (sClockSourceConfig->ClockSource) + { + case TIM_CLOCKSOURCE_INTERNAL: + { + assert_param(IS_TIM_INSTANCE(htim->Instance)); + break; + } + + case TIM_CLOCKSOURCE_ETRMODE1: + { + /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + + /* Select the External clock mode1 and the ETRF trigger */ + tmpsmcr = htim->Instance->SMCR; + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + break; + } + + case TIM_CLOCKSOURCE_ETRMODE2: + { + /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance)); + + /* Check ETR input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + sClockSourceConfig->ClockPrescaler, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + /* Enable the External clock mode2 */ + htim->Instance->SMCR |= TIM_SMCR_ECE; + break; + } + + case TIM_CLOCKSOURCE_TI1: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); + break; + } + + case TIM_CLOCKSOURCE_TI2: + { + /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI2 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI2_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); + break; + } + + case TIM_CLOCKSOURCE_TI1ED: + { + /* Check whether or not the timer instance supports external clock mode 1 */ + assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + sClockSourceConfig->ClockPolarity, + sClockSourceConfig->ClockFilter); + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); + break; + } + + case TIM_CLOCKSOURCE_ITR0: + case TIM_CLOCKSOURCE_ITR1: + case TIM_CLOCKSOURCE_ITR2: + case TIM_CLOCKSOURCE_ITR3: + { + /* Check whether or not the timer instance supports internal trigger input */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); + break; + } + + default: + status = HAL_ERROR; + break; + } + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Selects the signal connected to the TI1 input: direct from CH1_input + * or a XOR combination between CH1_input, CH2_input & CH3_input + * @param htim TIM handle. + * @param TI1_Selection Indicate whether or not channel 1 is connected to the + * output of a XOR gate. + * This parameter can be one of the following values: + * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input + * @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3 + * pins are connected to the TI1 input (XOR combination) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) +{ + uint32_t tmpcr2; + + /* Check the parameters */ + assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TI1SELECTION(TI1_Selection)); + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Reset the TI1 selection */ + tmpcr2 &= ~TIM_CR2_TI1S; + + /* Set the TI1 selection */ + tmpcr2 |= TI1_Selection; + + /* Write to TIMxCR2 */ + htim->Instance->CR2 = tmpcr2; + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Disable Trigger Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in Slave mode in interrupt mode + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that + * contains the selected trigger (internal trigger input, filtered + * timer input or external trigger input) and the Slave mode + * (Disable, Reset, Gated, Trigger, External clock mode 1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + /* Check the parameters */ + assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); + assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); + + __HAL_LOCK(htim); + + htim->State = HAL_TIM_STATE_BUSY; + + if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) + { + htim->State = HAL_TIM_STATE_READY; + __HAL_UNLOCK(htim); + return HAL_ERROR; + } + + /* Enable Trigger Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER); + + /* Disable Trigger DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER); + + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Read the captured value from Capture Compare unit + * @param htim TIM handle. + * @param Channel TIM Channels to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval Captured value + */ +uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpreg = 0U; + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Return the capture 1 value */ + tmpreg = htim->Instance->CCR1; + + break; + } + case TIM_CHANNEL_2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Return the capture 2 value */ + tmpreg = htim->Instance->CCR2; + + break; + } + + case TIM_CHANNEL_3: + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Return the capture 3 value */ + tmpreg = htim->Instance->CCR3; + + break; + } + + case TIM_CHANNEL_4: + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Return the capture 4 value */ + tmpreg = htim->Instance->CCR4; + + break; + } + + default: + break; + } + + return tmpreg; +} + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions + * @brief TIM Callbacks functions + * +@verbatim + ============================================================================== + ##### TIM Callbacks functions ##### + ============================================================================== + [..] + This section provides TIM callback functions: + (+) TIM Period elapsed callback + (+) TIM Output Compare callback + (+) TIM Input capture callback + (+) TIM Trigger callback + (+) TIM Error callback + +@endverbatim + * @{ + */ + +/** + * @brief Period elapsed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Period elapsed half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Output Compare callback in non-blocking mode + * @param htim TIM OC handle + * @retval None + */ +__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureCallback could be implemented in the user file + */ +} + +/** + * @brief Input Capture half complete callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file + */ +} + +/** + * @brief PWM Pulse finished half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Trigger detection half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Timer error callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_ErrorCallback could be implemented in the user file + */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User TIM callback to be used instead of the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID + * @param pCallback pointer to the callback function + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, + pTIM_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(htim); + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + htim->PeriodElapsedCallback = pCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + htim->PeriodElapsedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + htim->TriggerCallback = pCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + htim->TriggerHalfCpltCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + htim->IC_CaptureCallback = pCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + htim->IC_CaptureHalfCpltCallback = pCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + htim->OC_DelayElapsedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + htim->PWM_PulseFinishedCallback = pCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + htim->PWM_PulseFinishedHalfCpltCallback = pCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + htim->ErrorCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + htim->CommutationCallback = pCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + htim->CommutationHalfCpltCallback = pCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + htim->BreakCallback = pCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + htim->Base_MspInitCallback = pCallback; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + htim->Base_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + htim->IC_MspInitCallback = pCallback; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + htim->IC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + htim->OC_MspInitCallback = pCallback; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + htim->OC_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + htim->PWM_MspInitCallback = pCallback; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + htim->PWM_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + htim->OnePulse_MspInitCallback = pCallback; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + htim->OnePulse_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + htim->Encoder_MspInitCallback = pCallback; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + htim->Encoder_MspDeInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + htim->HallSensor_MspInitCallback = pCallback; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + htim->HallSensor_MspDeInitCallback = pCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return status; +} + +/** + * @brief Unregister a TIM callback + * TIM callback is redirected to the weak predefined callback + * @param htim tim handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID + * @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID + * @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID + * @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID + * @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID + * @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID + * @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID + * @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID + * @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID + * @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID + * @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID + * @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID + * @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID + * @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID + * @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID + * @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID + * @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID + * @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID + * @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID + * @retval status + */ +HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(htim); + + if (htim->State == HAL_TIM_STATE_READY) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + case HAL_TIM_PERIOD_ELAPSED_CB_ID : + /* Legacy weak Period Elapsed Callback */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + break; + + case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID : + /* Legacy weak Period Elapsed half complete Callback */ + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + break; + + case HAL_TIM_TRIGGER_CB_ID : + /* Legacy weak Trigger Callback */ + htim->TriggerCallback = HAL_TIM_TriggerCallback; + break; + + case HAL_TIM_TRIGGER_HALF_CB_ID : + /* Legacy weak Trigger half complete Callback */ + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + break; + + case HAL_TIM_IC_CAPTURE_CB_ID : + /* Legacy weak IC Capture Callback */ + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + break; + + case HAL_TIM_IC_CAPTURE_HALF_CB_ID : + /* Legacy weak IC Capture half complete Callback */ + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + break; + + case HAL_TIM_OC_DELAY_ELAPSED_CB_ID : + /* Legacy weak OC Delay Elapsed Callback */ + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_CB_ID : + /* Legacy weak PWM Pulse Finished Callback */ + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + break; + + case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID : + /* Legacy weak PWM Pulse Finished half complete Callback */ + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + break; + + case HAL_TIM_ERROR_CB_ID : + /* Legacy weak Error Callback */ + htim->ErrorCallback = HAL_TIM_ErrorCallback; + break; + + case HAL_TIM_COMMUTATION_CB_ID : + /* Legacy weak Commutation Callback */ + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + break; + + case HAL_TIM_COMMUTATION_HALF_CB_ID : + /* Legacy weak Commutation half complete Callback */ + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + break; + + case HAL_TIM_BREAK_CB_ID : + /* Legacy weak Break Callback */ + htim->BreakCallback = HAL_TIMEx_BreakCallback; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (htim->State == HAL_TIM_STATE_RESET) + { + switch (CallbackID) + { + case HAL_TIM_BASE_MSPINIT_CB_ID : + /* Legacy weak Base MspInit Callback */ + htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; + break; + + case HAL_TIM_BASE_MSPDEINIT_CB_ID : + /* Legacy weak Base Msp DeInit Callback */ + htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; + break; + + case HAL_TIM_IC_MSPINIT_CB_ID : + /* Legacy weak IC Msp Init Callback */ + htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; + break; + + case HAL_TIM_IC_MSPDEINIT_CB_ID : + /* Legacy weak IC Msp DeInit Callback */ + htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; + break; + + case HAL_TIM_OC_MSPINIT_CB_ID : + /* Legacy weak OC Msp Init Callback */ + htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; + break; + + case HAL_TIM_OC_MSPDEINIT_CB_ID : + /* Legacy weak OC Msp DeInit Callback */ + htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; + break; + + case HAL_TIM_PWM_MSPINIT_CB_ID : + /* Legacy weak PWM Msp Init Callback */ + htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; + break; + + case HAL_TIM_PWM_MSPDEINIT_CB_ID : + /* Legacy weak PWM Msp DeInit Callback */ + htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; + break; + + case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID : + /* Legacy weak One Pulse Msp Init Callback */ + htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; + break; + + case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID : + /* Legacy weak One Pulse Msp DeInit Callback */ + htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; + break; + + case HAL_TIM_ENCODER_MSPINIT_CB_ID : + /* Legacy weak Encoder Msp Init Callback */ + htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; + break; + + case HAL_TIM_ENCODER_MSPDEINIT_CB_ID : + /* Legacy weak Encoder Msp DeInit Callback */ + htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID : + /* Legacy weak Hall Sensor Msp Init Callback */ + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + break; + + case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID : + /* Legacy weak Hall Sensor Msp DeInit Callback */ + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + break; + + default : + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return status; +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions + * @brief TIM Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Base handle state. + * @param htim TIM Base handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM OC handle state. + * @param htim TIM Output Compare handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM PWM handle state. + * @param htim TIM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Input Capture handle state. + * @param htim TIM IC handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM One Pulse Mode handle state. + * @param htim TIM OPM handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM Encoder Interface handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return the TIM Encoder Mode handle state. + * @param htim TIM handle + * @retval Active channel + */ +HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim) +{ + return htim->Channel; +} + +/** + * @brief Return actual state of the TIM channel. + * @param htim TIM handle + * @param Channel 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 + * @arg TIM_CHANNEL_5: TIM Channel 5 + * @arg TIM_CHANNEL_6: TIM Channel 6 + * @retval TIM Channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + channel_state = TIM_CHANNEL_STATE_GET(htim, Channel); + + return channel_state; +} + +/** + * @brief Return actual state of a DMA burst operation. + * @param htim TIM handle + * @retval DMA burst state + */ +HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance)); + + return htim->DMABurstState; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup TIM_Private_Functions TIM Private Functions + * @{ + */ + +/** + * @brief TIM DMA error callback + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMAError(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Delay Pulse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedHalfCpltCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Capture half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureHalfCpltCallback(htim); +#else + HAL_TIM_IC_CaptureHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA Period Elapse complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Period Elapse half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedHalfCpltCallback(htim); +#else + HAL_TIM_PeriodElapsedHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) + { + htim->State = HAL_TIM_STATE_READY; + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Trigger half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerHalfCpltCallback(htim); +#else + HAL_TIM_TriggerHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief Time Base configuration + * @param TIMx TIM peripheral + * @param Structure TIM Base configuration structure + * @retval None + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) +{ + uint32_t tmpcr1; + tmpcr1 = TIMx->CR1; + + /* Set TIM Time Base Unit parameters ---------------------------------------*/ + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + { + /* Select the Counter Mode */ + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + tmpcr1 |= Structure->CounterMode; + } + + if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + { + /* Set the clock division */ + tmpcr1 &= ~TIM_CR1_CKD; + tmpcr1 |= (uint32_t)Structure->ClockDivision; + } + + /* Set the auto-reload preload */ + MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); + + TIMx->CR1 = tmpcr1; + + /* Set the Autoreload value */ + TIMx->ARR = (uint32_t)Structure->Period ; + + /* Set the Prescaler value */ + TIMx->PSC = Structure->Prescaler; + + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + { + /* Set the Repetition Counter value */ + TIMx->RCR = Structure->RepetitionCounter; + } + + /* Generate an update event to reload the Prescaler + and the repetition counter (only for advanced timer) value immediately */ + TIMx->EGR = TIM_EGR_UG; +} + +/** + * @brief Timer Output Compare 1 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~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 &= ~TIM_CCMR1_OC1M; + tmpccmrx &= ~TIM_CCMR1_CC1S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + tmpcr2 &= ~TIM_CR2_OIS1N; + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 2 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~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 &= ~TIM_CCMR1_OC2M; + tmpccmrx &= ~TIM_CCMR1_CC2S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC2P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 4U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC2NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 4U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC2NE; + + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS2; + tmpcr2 &= ~TIM_CR2_OIS2N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 2U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 2U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 3 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~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 &= ~TIM_CCMR2_OC3M; + tmpccmrx &= ~TIM_CCMR2_CC3S; + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8U); + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8U); + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + tmpcr2 &= ~TIM_CR2_OIS3N; + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4U); + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Timer Output Compare 4 configuration + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) +{ + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~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 &= ~TIM_CCMR2_OC4M; + tmpccmrx &= ~TIM_CCMR2_CC4S; + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12U); + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + { + /* Check parameters */ + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6U); + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; +} + +/** + * @brief Slave Timer configuration function + * @param htim TIM handle + * @param sSlaveConfig Slave timer configuration + * @retval None + */ +static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, + TIM_SlaveConfigTypeDef *sSlaveConfig) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the Trigger Selection Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source */ + tmpsmcr |= sSlaveConfig->InputTrigger; + + /* Reset the slave mode Bits */ + tmpsmcr &= ~TIM_SMCR_SMS; + /* Set the slave mode */ + tmpsmcr |= sSlaveConfig->SlaveMode; + + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + + /* Configure the trigger prescaler, filter, and polarity */ + switch (sSlaveConfig->InputTrigger) + { + case TIM_TS_ETRF: + { + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + /* Configure the ETR Trigger source */ + TIM_ETR_SetConfig(htim->Instance, + sSlaveConfig->TriggerPrescaler, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI1F_ED: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) + { + return HAL_ERROR; + } + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = htim->Instance->CCER; + htim->Instance->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = htim->Instance->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + htim->Instance->CCMR1 = tmpccmr1; + htim->Instance->CCER = tmpccer; + break; + } + + case TIM_TS_TI1FP1: + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI1 Filter and Polarity */ + TIM_TI1_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_TI2FP2: + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); + assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); + + /* Configure TI2 Filter and Polarity */ + TIM_TI2_ConfigInputStage(htim->Instance, + sSlaveConfig->TriggerPolarity, + sSlaveConfig->TriggerFilter); + break; + } + + case TIM_TS_ITR0: + case TIM_TS_ITR1: + case TIM_TS_ITR2: + case TIM_TS_ITR3: + { + /* Check the parameter */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + break; + } + + default: + status = HAL_ERROR; + break; + } + + return status; +} + +/** + * @brief Configure the TI1 as Input. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @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 + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 + * (on channel2 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) + { + tmpccmr1 &= ~TIM_CCMR1_CC1S; + tmpccmr1 |= TIM_ICSelection; + } + else + { + tmpccmr1 |= TIM_CCMR1_CC1S_0; + } + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI1. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + TIMx->CCER &= ~TIM_CCER_CC1E; + tmpccmr1 = TIMx->CCMR1; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + tmpccmr1 |= (TIM_ICFilter << 4U); + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + tmpccer |= TIM_ICPolarity; + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI2 as Input. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @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 + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 + * (on channel1 path) is used as the input signal. Therefore CCMR1 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr1 &= ~TIM_CCMR1_CC2S; + tmpccmr1 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP)); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the Polarity and Filter for TI2. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + tmpccmr1 = TIMx->CCMR1; + tmpccer = TIMx->CCER; + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + tmpccmr1 |= (TIM_ICFilter << 12U); + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + tmpccer |= (TIM_ICPolarity << 4U); + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI3 as Input. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @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 + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + */ +static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 3: Reset the CC3E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC3S; + tmpccmr2 |= TIM_ICSelection; + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC3F; + tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F); + + /* Select the Polarity and set the CC3E Bit */ + tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP); + tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/** + * @brief Configure the TI4 as Input. + * @param TIMx 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 + * @arg TIM_ICPOLARITY_BOTHEDGE + * @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. + * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 + * (on channel1 path) is used as the input signal. Therefore CCMR2 must be + * protected against un-initialized filter and polarity values. + * @retval None + */ +static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, + uint32_t TIM_ICFilter) +{ + uint32_t tmpccmr2; + uint32_t tmpccer; + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + tmpccmr2 = TIMx->CCMR2; + tmpccer = TIMx->CCER; + + /* Select the Input */ + tmpccmr2 &= ~TIM_CCMR2_CC4S; + tmpccmr2 |= (TIM_ICSelection << 8U); + + /* Set the filter */ + tmpccmr2 &= ~TIM_CCMR2_IC4F; + tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F); + + /* Select the Polarity and set the CC4E Bit */ + tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP); + tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP)); + + /* Write to TIMx CCMR2 and CCER registers */ + TIMx->CCMR2 = tmpccmr2; + TIMx->CCER = tmpccer ; +} + +/** + * @brief Selects the Input Trigger source + * @param TIMx to select the TIM peripheral + * @param 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 + */ +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) +{ + uint32_t tmpsmcr; + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + /* Reset the TS Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + /* Set the Input Trigger source and the slave mode*/ + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} +/** + * @brief Configures the TIMx External Trigger (ETR). + * @param TIMx to select the TIM peripheral + * @param TIM_ExtTRGPrescaler The external Trigger Prescaler. + * This parameter can be one of the following values: + * @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF. + * @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2. + * @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4. + * @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8. + * @param TIM_ExtTRGPolarity The external Trigger Polarity. + * This parameter can be one of the following values: + * @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active. + * @arg TIM_ETRPOLARITY_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_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) +{ + uint32_t tmpsmcr; + + tmpsmcr = TIMx->SMCR; + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel x. + * @param TIMx to select the TIM peripheral + * @param 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 ChannelState specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. + * @retval None + */ +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) +{ + uint32_t tmp; + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ +} + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) +/** + * @brief Reset interrupt callbacks to the legacy weak callbacks. + * @param htim pointer to a TIM_HandleTypeDef structure that contains + * the configuration information for TIM module. + * @retval None + */ +void TIM_ResetCallback(TIM_HandleTypeDef *htim) +{ + /* Reset the TIM callback to the legacy weak callbacks */ + htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; + htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; + htim->TriggerCallback = HAL_TIM_TriggerCallback; + htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; + htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; + htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; + htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; + htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; + htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; + htim->ErrorCallback = HAL_TIM_ErrorCallback; + htim->CommutationCallback = HAL_TIMEx_CommutCallback; + htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; + htim->BreakCallback = HAL_TIMEx_BreakCallback; +} +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c new file mode 100644 index 0000000..092175f --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c @@ -0,0 +1,2428 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_tim_ex.c + * @author MCD Application Team + * @brief TIM HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Timer Extended peripheral: + * + Time Hall Sensor Interface Initialization + * + Time Hall Sensor Interface Start + * + Time Complementary signal break and dead time configuration + * + Time Master and Slave synchronization configuration + * + Timer remapping capabilities configuration + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### TIMER Extended features ##### + ============================================================================== + [..] + The Timer Extended features include: + (#) Complementary outputs with programmable dead-time for : + (++) Output Compare + (++) PWM generation (Edge and Center-aligned Mode) + (++) One-pulse mode output + (#) Synchronization circuit to control the timer with external signals and to + interconnect several timers together. + (#) Break input to put the timer output signals in reset state or in a known state. + (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for + positioning purposes + + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Initialize the TIM low level resources by implementing the following functions + depending on the selected feature: + (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() + + (#) Initialize the TIM low level resources : + (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); + (##) TIM pins configuration + (+++) Enable the clock for the TIM GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); + + (#) The external Clock can be configured, if needed (the default clock is the + internal clock from the APBx), using the following function: + HAL_TIM_ConfigClockSource, the clock configuration should be done before + any start function. + + (#) Configure the TIM in the desired functioning mode using one of the + initialization function of this driver: + (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the + Timer Hall Sensor Interface and the commutation event with the corresponding + Interrupt and DMA request if needed (Note that One Timer is used to interface + with the Hall sensor Interface and another Timer should be used to use + the commutation event). + + (#) Activate the TIM peripheral using one of the start functions: + (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), + HAL_TIMEx_OCN_Start_IT() + (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), + HAL_TIMEx_PWMN_Start_IT() + (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() + (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), + HAL_TIMEx_HallSensor_Start_IT(). + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup TIMEx TIMEx + * @brief TIM Extended HAL module driver + * @{ + */ + +#ifdef HAL_TIM_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma); +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma); +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState); + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions + * @{ + */ + +/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions + * @brief Timer Hall Sensor functions + * +@verbatim + ============================================================================== + ##### Timer Hall Sensor functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Initialize and configure TIM HAL Sensor. + (+) De-initialize TIM HAL Sensor. + (+) Start the Hall Sensor Interface. + (+) Stop the Hall Sensor Interface. + (+) Start the Hall Sensor Interface and enable interrupts. + (+) Stop the Hall Sensor Interface and disable interrupts. + (+) Start the Hall Sensor Interface and enable DMA transfers. + (+) Stop the Hall Sensor Interface and disable DMA transfers. + +@endverbatim + * @{ + */ +/** + * @brief Initializes the TIM Hall Sensor Interface and initialize the associated handle. + * @note When the timer instance is initialized in Hall Sensor Interface mode, + * timer channels 1 and channel 2 are reserved and cannot be used for + * other purpose. + * @param htim TIM Hall Sensor Interface handle + * @param sConfig TIM Hall Sensor configuration structure + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig) +{ + TIM_OC_InitTypeDef OC_Config; + + /* Check the TIM handle allocation */ + if (htim == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); + assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); + assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); + + if (htim->State == HAL_TIM_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + /* Reset interrupt callbacks to legacy week callbacks */ + TIM_ResetCallback(htim); + + if (htim->HallSensor_MspInitCallback == NULL) + { + htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->HallSensor_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIMEx_HallSensor_MspInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Configure the Time base in the Encoder Mode */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + + /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ + TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); + + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + /* Set the IC1PSC value */ + htim->Instance->CCMR1 |= sConfig->IC1Prescaler; + + /* Enable the Hall sensor interface (XOR function of the three inputs) */ + htim->Instance->CR2 |= TIM_CR2_TI1S; + + /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= TIM_TS_TI1F_ED; + + /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ + htim->Instance->SMCR &= ~TIM_SMCR_SMS; + htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; + + /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ + OC_Config.OCFastMode = TIM_OCFAST_DISABLE; + OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; + OC_Config.OCMode = TIM_OCMODE_PWM2; + OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; + OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; + OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; + OC_Config.Pulse = sConfig->Commutation_Delay; + + TIM_OC2_SetConfig(htim->Instance, &OC_Config); + + /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 + register to 101 */ + htim->Instance->CR2 &= ~TIM_CR2_MMS; + htim->Instance->CR2 |= TIM_TRGO_OC2REF; + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the TIM Hall Sensor interface + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_INSTANCE(htim->Instance)); + + htim->State = HAL_TIM_STATE_BUSY; + + /* Disable the TIM Peripheral Clock */ + __HAL_TIM_DISABLE(htim); + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + if (htim->HallSensor_MspDeInitCallback == NULL) + { + htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; + } + /* DeInit the low level hardware */ + htim->HallSensor_MspDeInitCallback(htim); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ + HAL_TIMEx_HallSensor_MspDeInit(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + /* Change the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_RESET; + + /* Change the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET); + + /* Change TIM state */ + htim->State = HAL_TIM_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Initializes the TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes TIM Hall Sensor MSP. + * @param htim TIM Hall Sensor Interface handle + * @retval None + */ +__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file + */ +} + +/** + * @brief Starts the TIM Hall Sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall sensor Interface. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channels 1, 2 and 3 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the capture compare Interrupts 1 event */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in interrupt mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + /* Disable the capture compare Interrupts event */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) +{ + uint32_t tmpsmcr; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Set the TIM channel state */ + if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) + || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) + { + return HAL_BUSY; + } + else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) + && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); + + /* Set the DMA Input Capture 1 Callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; + + /* Enable the DMA stream for Capture 1*/ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the capture compare 1 Interrupt */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Hall Sensor Interface in DMA mode. + * @param htim TIM Hall Sensor Interface handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) +{ + /* Check the parameters */ + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); + + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, + TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); + + + /* Disable the capture compare Interrupts 1 event */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions + * @brief Timer Complementary Output Compare functions + * +@verbatim + ============================================================================== + ##### Timer Complementary Output Compare functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary Output Compare/PWM. + (+) Stop the Complementary Output Compare/PWM. + (+) Start the Complementary Output Compare/PWM and enable interrupts. + (+) Stop the Complementary Output Compare/PWM and disable interrupts. + (+) Start the Complementary Output Compare/PWM and enable DMA transfers. + (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM Output Compare signal generation on the complementary + * output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM OC handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Output Compare interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in interrupt mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Output Compare DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM Output Compare signal generation in DMA mode + * on the complementary output. + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Output Compare DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the Capture compare channel N */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions + * @brief Timer Complementary PWM functions + * +@verbatim + ============================================================================== + ##### Timer Complementary PWM functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary PWM. + (+) Stop the Complementary PWM. + (+) Start the Complementary PWM and enable interrupts. + (+) Stop the Complementary PWM and disable interrupts. + (+) Start the Complementary PWM and enable DMA transfers. + (+) Stop the Complementary PWM and disable DMA transfers. + (+) Start the Complementary Input Capture measurement. + (+) Stop the Complementary Input Capture. + (+) Start the Complementary Input Capture and enable interrupts. + (+) Stop the Complementary Input Capture and disable interrupts. + (+) Start the Complementary Input Capture and enable DMA transfers. + (+) Stop the Complementary Input Capture and disable DMA transfers. + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the PWM signal generation on the complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + { + return HAL_ERROR; + } + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the TIM Break interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); + + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the PWM signal generation in interrupt mode on the + * complementary output. + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpccer; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the TIM Break interrupt (only if no more channel is active) */ + tmpccer = htim->Instance->CCER; + if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) + { + __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); + } + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @brief Starts the TIM PWM signal generation in DMA mode on the + * complementary output + * @param htim TIM handle + * @param Channel TIM Channel to be enabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + /* Set the TIM complementary channel state */ + if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) + { + return HAL_BUSY; + } + else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) + { + if ((pData == NULL) && (Length > 0U)) + { + return HAL_ERROR; + } + else + { + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + } + } + else + { + return HAL_ERROR; + } + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); + break; + } + + case TIM_CHANNEL_2: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); + break; + } + + case TIM_CHANNEL_3: + { + /* Set the DMA compare callbacks */ + htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt; + htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt; + + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ; + + /* Enable the DMA stream */ + if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, + Length) != HAL_OK) + { + /* Return error status */ + return HAL_ERROR; + } + /* Enable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Enable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + { + __HAL_TIM_ENABLE(htim); + } + } + else + { + __HAL_TIM_ENABLE(htim); + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Stops the TIM PWM signal generation in DMA mode on the complementary + * output + * @param htim TIM handle + * @param Channel TIM Channel to be disabled + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); + + switch (Channel) + { + case TIM_CHANNEL_1: + { + /* Disable the TIM Capture/Compare 1 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]); + break; + } + + case TIM_CHANNEL_2: + { + /* Disable the TIM Capture/Compare 2 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]); + break; + } + + case TIM_CHANNEL_3: + { + /* Disable the TIM Capture/Compare 3 DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); + (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]); + break; + } + + default: + status = HAL_ERROR; + break; + } + + if (status == HAL_OK) + { + /* Disable the complementary PWM output */ + TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM complementary channel state */ + TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY); + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions + * @brief Timer Complementary One Pulse functions + * +@verbatim + ============================================================================== + ##### Timer Complementary One Pulse functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Start the Complementary One Pulse generation. + (+) Stop the Complementary One Pulse. + (+) Start the Complementary One Pulse and enable interrupts. + (+) Stop the Complementary One Pulse and disable interrupts. + +@endverbatim + * @{ + */ + +/** + * @brief Starts the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation on the complementary + * output. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Starts the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to enable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2); + HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1); + HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2); + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Check the TIM channels state */ + if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) + || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) + { + return HAL_ERROR; + } + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY); + + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + + /* Enable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE); + + /* Enable the Main Output */ + __HAL_TIM_MOE_ENABLE(htim); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Stops the TIM One Pulse signal generation in interrupt mode on the + * complementary channel. + * @note OutputChannel must match the pulse output channel chosen when calling + * @ref HAL_TIM_OnePulse_ConfigChannel(). + * @param htim TIM One Pulse handle + * @param OutputChannel pulse output channel to disable + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) +{ + uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); + + /* Disable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); + + /* Disable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); + + /* Disable the complementary One Pulse output channel and the Input Capture channel */ + TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); + TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE); + + /* Disable the Main Output */ + __HAL_TIM_MOE_DISABLE(htim); + + /* Disable the Peripheral */ + __HAL_TIM_DISABLE(htim); + + /* Set the TIM channels state */ + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + + /* Return function status */ + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This section provides functions allowing to: + (+) Configure the commutation event in case of use of the Hall sensor interface. + (+) Configure Output channels for OC and PWM mode. + + (+) Configure Complementary channels, break features and dead time. + (+) Configure Master synchronization. + (+) Configure timer remapping capabilities. + +@endverbatim + * @{ + */ + +/** + * @brief Configure the TIM commutation event sequence. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with interrupt. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Disable Commutation DMA request */ + __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM); + + /* Enable the Commutation Interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configure the TIM commutation event sequence with DMA. + * @note This function is mandatory to use the commutation event in order to + * update the configuration at each commutation detection on the TRGI input of the Timer, + * the typical use of this feature is with the use of another Timer(interface Timer) + * configured in Hall sensor interface, this interface Timer will generate the + * commutation at its TRGO output (connected to Timer used in this function) each time + * the TI1 of the Interface Timer detect a commutation at its input TI1. + * @note The user should configure the DMA in his own software, in This function only the COMDE bit is set + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * This parameter can be one of the following values: + * @arg TIM_TS_ITR0: Internal trigger 0 selected + * @arg TIM_TS_ITR1: Internal trigger 1 selected + * @arg TIM_TS_ITR2: Internal trigger 2 selected + * @arg TIM_TS_ITR3: Internal trigger 3 selected + * @arg TIM_TS_NONE: No trigger is needed + * @param CommutationSource the Commutation Event source + * This parameter can be one of the following values: + * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer + * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, + uint32_t CommutationSource) +{ + /* Check the parameters */ + assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); + assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); + + __HAL_LOCK(htim); + + if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || + (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) + { + /* Select the Input trigger */ + htim->Instance->SMCR &= ~TIM_SMCR_TS; + htim->Instance->SMCR |= InputTrigger; + } + + /* Select the Capture Compare preload feature */ + htim->Instance->CR2 |= TIM_CR2_CCPC; + /* Select the Commutation event source */ + htim->Instance->CR2 &= ~TIM_CR2_CCUS; + htim->Instance->CR2 |= CommutationSource; + + /* Enable the Commutation DMA Request */ + /* Set the DMA Commutation Callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt; + /* Set the DMA error callback */ + htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; + + /* Disable Commutation Interrupt */ + __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM); + + /* Enable the Commutation DMA Request */ + __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIM in master mode. + * @param htim TIM handle. + * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that + * contains the selected trigger output (TRGO) and the Master/Slave + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + TIM_MasterConfigTypeDef *sMasterConfig) +{ + uint32_t tmpcr2; + uint32_t tmpsmcr; + + /* Check the parameters */ + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Change the handler state */ + htim->State = HAL_TIM_STATE_BUSY; + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + + /* Reset the MMS Bits */ + tmpcr2 &= ~TIM_CR2_MMS; + /* Select the TRGO source */ + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + + /* Update TIMx CR2 */ + htim->Instance->CR2 = tmpcr2; + + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + { + /* Reset the MSM Bit */ + tmpsmcr &= ~TIM_SMCR_MSM; + /* Set master mode */ + tmpsmcr |= sMasterConfig->MasterSlaveMode; + + /* Update TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + } + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State + * and the AOE(automatic output enable). + * @param htim TIM handle + * @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that + * contains the BDTR Register configuration information for the TIM peripheral. + * @note Interrupts can be generated when an active level is detected on the + * break input, the break 2 input or the system break input. Break + * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, + TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) +{ + /* Keep this variable initialized to 0 as it is used to configure BDTR register */ + uint32_t tmpbdtr = 0U; + + /* Check the parameters */ + assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); + assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); + assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); + assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); + assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); + assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); + assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); + assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); + + /* Check input state */ + __HAL_LOCK(htim); + + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + + /* Set the BDTR bits */ + MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); + MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState); + MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity); + MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); + + + /* Set TIMx_BDTR */ + htim->Instance->BDTR = tmpbdtr; + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @brief Configures the TIMx Remapping input capabilities. + * @param htim TIM handle. + * @param Remap specifies the TIM remapping source. + * For TIM1, the parameter can have the following values: (**) + * @arg TIM_TIM1_TIM3_TRGO: TIM1 ITR2 is connected to TIM3 TRGO + * @arg TIM_TIM1_LPTIM: TIM1 ITR2 is connected to LPTIM1 output + * + * For TIM2, the parameter can have the following values: (**) + * @arg TIM_TIM2_TIM8_TRGO: TIM2 ITR1 is connected to TIM8 TRGO (*) + * @arg TIM_TIM2_ETH_PTP: TIM2 ITR1 is connected to PTP trigger output (*) + * @arg TIM_TIM2_USBFS_SOF: TIM2 ITR1 is connected to OTG FS SOF + * @arg TIM_TIM2_USBHS_SOF: TIM2 ITR1 is connected to OTG FS SOF + * + * For TIM5, the parameter can have the following values: + * @arg TIM_TIM5_GPIO: TIM5 TI4 is connected to GPIO + * @arg TIM_TIM5_LSI: TIM5 TI4 is connected to LSI + * @arg TIM_TIM5_LSE: TIM5 TI4 is connected to LSE + * @arg TIM_TIM5_RTC: TIM5 TI4 is connected to the RTC wakeup interrupt + * @arg TIM_TIM5_TIM3_TRGO: TIM5 ITR1 is connected to TIM3 TRGO (*) + * @arg TIM_TIM5_LPTIM: TIM5 ITR1 is connected to LPTIM1 output (*) + * + * For TIM9, the parameter can have the following values: (**) + * @arg TIM_TIM9_TIM3_TRGO: TIM9 ITR1 is connected to TIM3 TRGO + * @arg TIM_TIM9_LPTIM: TIM9 ITR1 is connected to LPTIM1 output + * + * For TIM11, the parameter can have the following values: + * @arg TIM_TIM11_GPIO: TIM11 TI1 is connected to GPIO + * @arg TIM_TIM11_HSE: TIM11 TI1 is connected to HSE_RTC clock + * @arg TIM_TIM11_SPDIFRX: TIM11 TI1 is connected to SPDIFRX_FRAME_SYNC (*) + * + * (*) Value not defined in all devices. \n + * (**) Register not available in all devices. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) +{ + + /* Check parameters */ + assert_param(IS_TIM_REMAP(htim->Instance, Remap)); + + __HAL_LOCK(htim); + +#if defined(LPTIM_OR_TIM1_ITR2_RMP) && defined(LPTIM_OR_TIM5_ITR1_RMP) && defined(LPTIM_OR_TIM9_ITR1_RMP) + if ((Remap & LPTIM_REMAP_MASK) == LPTIM_REMAP_MASK) + { + /* Connect TIMx internal trigger to LPTIM1 output */ + __HAL_RCC_LPTIM1_CLK_ENABLE(); + MODIFY_REG(LPTIM1->OR, + (LPTIM_OR_TIM1_ITR2_RMP | LPTIM_OR_TIM5_ITR1_RMP | LPTIM_OR_TIM9_ITR1_RMP), + Remap & ~(LPTIM_REMAP_MASK)); + } + else + { + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); + } +#else + /* Set the Timer remapping configuration */ + WRITE_REG(htim->Instance->OR, Remap); +#endif /* LPTIM_OR_TIM1_ITR2_RMP && LPTIM_OR_TIM5_ITR1_RMP && LPTIM_OR_TIM9_ITR1_RMP */ + + __HAL_UNLOCK(htim); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions + * @brief Extended Callbacks functions + * +@verbatim + ============================================================================== + ##### Extended Callbacks functions ##### + ============================================================================== + [..] + This section provides Extended TIM callback functions: + (+) Timer Commutation callback + (+) Timer Break callback + +@endverbatim + * @{ + */ + +/** + * @brief Hall commutation changed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutCallback could be implemented in the user file + */ +} +/** + * @brief Hall commutation changed half complete callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Hall Break detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_BreakCallback could be implemented in the user file + */ +} +/** + * @} + */ + +/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions + * @brief Extended Peripheral State functions + * +@verbatim + ============================================================================== + ##### Extended Peripheral State functions ##### + ============================================================================== + [..] + This subsection permits to get in run-time the status of the peripheral + and the data flow. + +@endverbatim + * @{ + */ + +/** + * @brief Return the TIM Hall Sensor interface handle state. + * @param htim TIM Hall Sensor handle + * @retval HAL state + */ +HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) +{ + return htim->State; +} + +/** + * @brief Return actual state of the TIM complementary channel. + * @param htim TIM handle + * @param ChannelN TIM Complementary 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 + * @retval TIM Complementary channel state + */ +HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN) +{ + HAL_TIM_ChannelStateTypeDef channel_state; + + /* Check the parameters */ + assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN)); + + channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN); + + return channel_state; +} +/** + * @} + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions + * @{ + */ + +/** + * @brief TIM DMA Commutation callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + +/** + * @brief TIM DMA Commutation half complete callback. + * @param hdma pointer to DMA handle. + * @retval None + */ +void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationHalfCpltCallback(htim); +#else + HAL_TIMEx_CommutHalfCpltCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ +} + + +/** + * @brief TIM DMA Delay Pulse complete callback (complementary channel). + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + + if (hdma->Init.Mode == DMA_NORMAL) + { + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY); + } + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_PWM_PulseFinishedCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief TIM DMA error callback (complementary channel) + * @param hdma pointer to DMA handle. + * @retval None + */ +static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) +{ + TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + if (hdma == htim->hdma[TIM_DMA_ID_CC1]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY); + } + else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) + { + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY); + } + else + { + /* nothing to do */ + } + +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->ErrorCallback(htim); +#else + HAL_TIM_ErrorCallback(htim); +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; +} + +/** + * @brief Enables or disables the TIM Capture Compare Channel xN. + * @param TIMx to select the TIM peripheral + * @param 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 + * @param ChannelNState specifies the TIM Channel CCxNE bit new state. + * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. + * @retval None + */ +static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) +{ + uint32_t tmp; + + tmp = TIM_CCER_CC1NE << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + + /* Reset the CCxNE Bit */ + TIMx->CCER &= ~tmp; + + /* Set or reset the CCxNE Bit */ + TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ +} +/** + * @} + */ + +#endif /* HAL_TIM_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ diff --git a/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c new file mode 100644 index 0000000..36b7317 --- /dev/null +++ b/access_control_stm32/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c @@ -0,0 +1,3751 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_uart.c + * @author MCD Application Team + * @brief UART HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Errors functions + * + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The UART HAL driver can be used as follows: + + (#) Declare a UART_HandleTypeDef handle structure (eg. UART_HandleTypeDef huart). + (#) Initialize the UART low level resources by implementing the HAL_UART_MspInit() API: + (##) Enable the USARTx interface clock. + (##) UART pins configuration: + (+++) Enable the clock for the UART GPIOs. + (+++) Configure the UART TX/RX pins as alternate function pull-up. + (##) NVIC configuration if you need to use interrupt process (HAL_UART_Transmit_IT() + and HAL_UART_Receive_IT() APIs): + (+++) Configure the USARTx interrupt priority. + (+++) Enable the NVIC USART IRQ handle. + (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() + and HAL_UART_Receive_DMA() APIs): + (+++) Declare a DMA handle structure for the Tx/Rx stream. + (+++) Enable the DMAx interface clock. + (+++) Configure the declared DMA handle structure with the required + Tx/Rx parameters. + (+++) Configure the DMA Tx/Rx stream. + (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle. + (+++) Configure the priority and enable the NVIC for the transfer complete + interrupt on the DMA Tx/Rx stream. + (+++) Configure the USARTx interrupt priority and enable the NVIC USART IRQ handle + (used for last byte sending completion detection in DMA non circular mode) + + (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware + flow control and Mode(Receiver/Transmitter) in the huart Init structure. + + (#) For the UART asynchronous mode, initialize the UART registers by calling + the HAL_UART_Init() API. + + (#) For the UART Half duplex mode, initialize the UART registers by calling + the HAL_HalfDuplex_Init() API. + + (#) For the LIN mode, initialize the UART registers by calling the HAL_LIN_Init() API. + + (#) For the Multi-Processor mode, initialize the UART registers by calling + the HAL_MultiProcessor_Init() API. + + [..] + (@) The specific UART interrupts (Transmission complete interrupt, + RXNE interrupt and Error Interrupts) will be managed using the macros + __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit + and receive process. + + [..] + (@) These APIs (HAL_UART_Init() and HAL_HalfDuplex_Init()) configure also the + low level Hardware GPIO, CLOCK, CORTEX...etc) by calling the customized + HAL_UART_MspInit() API. + + ##### Callback registration ##### + ================================== + + [..] + The compilation define USE_HAL_UART_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + [..] + Use Function HAL_UART_RegisterCallback() to register a user callback. + Function HAL_UART_RegisterCallback() allows to register following callbacks: + (+) TxHalfCpltCallback : Tx Half Complete Callback. + (+) TxCpltCallback : Tx Complete Callback. + (+) RxHalfCpltCallback : Rx Half Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) AbortCpltCallback : Abort Complete Callback. + (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. + (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. + (+) MspInitCallback : UART MspInit. + (+) MspDeInitCallback : UART MspDeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + + [..] + Use function HAL_UART_UnRegisterCallback() to reset a callback to the default + weak (surcharged) function. + HAL_UART_UnRegisterCallback() takes as parameters the HAL peripheral handle, + and the Callback ID. + This function allows to reset following callbacks: + (+) TxHalfCpltCallback : Tx Half Complete Callback. + (+) TxCpltCallback : Tx Complete Callback. + (+) RxHalfCpltCallback : Rx Half Complete Callback. + (+) RxCpltCallback : Rx Complete Callback. + (+) ErrorCallback : Error Callback. + (+) AbortCpltCallback : Abort Complete Callback. + (+) AbortTransmitCpltCallback : Abort Transmit Complete Callback. + (+) AbortReceiveCpltCallback : Abort Receive Complete Callback. + (+) MspInitCallback : UART MspInit. + (+) MspDeInitCallback : UART MspDeInit. + + [..] + For specific callback RxEventCallback, use dedicated registration/reset functions: + respectively HAL_UART_RegisterRxEventCallback() , HAL_UART_UnRegisterRxEventCallback(). + + [..] + By default, after the HAL_UART_Init() and when the state is HAL_UART_STATE_RESET + all callbacks are set to the corresponding weak (surcharged) functions: + examples HAL_UART_TxCpltCallback(), HAL_UART_RxHalfCpltCallback(). + Exception done for MspInit and MspDeInit functions that are respectively + reset to the legacy weak (surcharged) functions in the HAL_UART_Init() + and HAL_UART_DeInit() only when these callbacks are null (not registered beforehand). + If not, MspInit or MspDeInit are not null, the HAL_UART_Init() and HAL_UART_DeInit() + keep and use the user MspInit/MspDeInit callbacks (registered beforehand). + + [..] + Callbacks can be registered/unregistered in HAL_UART_STATE_READY state only. + Exception done MspInit/MspDeInit that can be registered/unregistered + in HAL_UART_STATE_READY or HAL_UART_STATE_RESET state, thus registered (user) + MspInit/DeInit callbacks can be used during the Init/DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_UART_RegisterCallback() before calling HAL_UART_DeInit() + or HAL_UART_Init() function. + + [..] + When The compilation define USE_HAL_UART_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registration feature is not available + and weak (surcharged) callbacks are used. + + [..] + Three operation modes are available within this driver : + + *** Polling mode IO operation *** + ================================= + [..] + (+) Send an amount of data in blocking mode using HAL_UART_Transmit() + (+) Receive an amount of data in blocking mode using HAL_UART_Receive() + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT() + (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxCpltCallback + (+) Receive an amount of data in non blocking mode using HAL_UART_Receive_IT() + (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxCpltCallback + (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_UART_ErrorCallback + + *** DMA mode IO operation *** + ============================== + [..] + (+) Send an amount of data in non blocking mode (DMA) using HAL_UART_Transmit_DMA() + (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback + (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_TxCpltCallback + (+) Receive an amount of data in non blocking mode (DMA) using HAL_UART_Receive_DMA() + (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback + (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can + add his own code by customization of function pointer HAL_UART_RxCpltCallback + (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_UART_ErrorCallback + (+) Pause the DMA Transfer using HAL_UART_DMAPause() + (+) Resume the DMA Transfer using HAL_UART_DMAResume() + (+) Stop the DMA Transfer using HAL_UART_DMAStop() + + + [..] This subsection also provides a set of additional functions providing enhanced reception + services to user. (For example, these functions allow application to handle use cases + where number of data to be received is unknown). + + (#) Compared to standard reception services which only consider number of received + data elements as reception completion criteria, these functions also consider additional events + as triggers for updating reception status to caller : + (+) Detection of inactivity period (RX line has not been active for a given period). + (++) RX inactivity detected by IDLE event, i.e. RX line has been in idle state (normally high state) + for 1 frame time, after last received byte. + + (#) There are two mode of transfer: + (+) Blocking mode: The reception is performed in polling mode, until either expected number of data is received, + or till IDLE event occurs. Reception is handled only during function execution. + When function exits, no data reception could occur. HAL status and number of actually received data elements, + are returned by function after finishing transfer. + (+) Non-Blocking mode: The reception is performed using Interrupts or DMA. + These API's return the HAL status. + The end of the data processing will be indicated through the + dedicated UART IRQ when using Interrupt mode or the DMA IRQ when using DMA mode. + The HAL_UARTEx_RxEventCallback() user callback will be executed during Receive process + The HAL_UART_ErrorCallback()user callback will be executed when a reception error is detected. + + (#) Blocking mode API: + (+) HAL_UARTEx_ReceiveToIdle() + + (#) Non-Blocking mode API with Interrupt: + (+) HAL_UARTEx_ReceiveToIdle_IT() + + (#) Non-Blocking mode API with DMA: + (+) HAL_UARTEx_ReceiveToIdle_DMA() + + + *** UART HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in UART HAL driver. + + (+) __HAL_UART_ENABLE: Enable the UART peripheral + (+) __HAL_UART_DISABLE: Disable the UART peripheral + (+) __HAL_UART_GET_FLAG : Check whether the specified UART flag is set or not + (+) __HAL_UART_CLEAR_FLAG : Clear the specified UART pending flag + (+) __HAL_UART_ENABLE_IT: Enable the specified UART interrupt + (+) __HAL_UART_DISABLE_IT: Disable the specified UART interrupt + (+) __HAL_UART_GET_IT_SOURCE: Check whether the specified UART interrupt has occurred or not + + [..] + (@) You can refer to the UART HAL driver header file for more useful macros + + @endverbatim + [..] + (@) Additional remark: If the parity is enabled, then the MSB bit of the data written + in the data register is transmitted but is changed by the parity bit. + Depending on the frame length defined by the M bit (8-bits or 9-bits), + the possible UART frame formats are as listed in the following table: + +-------------------------------------------------------------+ + | M bit | PCE bit | UART frame | + |---------------------|---------------------------------------| + | 0 | 0 | | SB | 8 bit data | STB | | + |---------|-----------|---------------------------------------| + | 0 | 1 | | SB | 7 bit data | PB | STB | | + |---------|-----------|---------------------------------------| + | 1 | 0 | | SB | 9 bit data | STB | | + |---------|-----------|---------------------------------------| + | 1 | 1 | | SB | 8 bit data | PB | STB | | + +-------------------------------------------------------------+ + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + +/** @addtogroup STM32F4xx_HAL_Driver + * @{ + */ + +/** @defgroup UART UART + * @brief HAL UART module driver + * @{ + */ +#ifdef HAL_UART_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @addtogroup UART_Private_Constants + * @{ + */ +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @addtogroup UART_Private_Functions UART Private Functions + * @{ + */ + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +static void UART_EndTxTransfer(UART_HandleTypeDef *huart); +static void UART_EndRxTransfer(UART_HandleTypeDef *huart); +static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma); +static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma); +static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma); +static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma); +static void UART_DMAError(DMA_HandleTypeDef *hdma); +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma); +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); +static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart); +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout); +static void UART_SetConfig(UART_HandleTypeDef *huart); + +/** + * @} + */ + +/* Exported functions ---------------------------------------------------------*/ +/** @defgroup UART_Exported_Functions UART Exported Functions + * @{ + */ + +/** @defgroup UART_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to initialize the USARTx or the UARTy + in asynchronous mode. + (+) For the asynchronous mode only these parameters can be configured: + (++) Baud Rate + (++) Word Length + (++) Stop Bit + (++) Parity: If the parity is enabled, then the MSB bit of the data written + in the data register is transmitted but is changed by the parity bit. + Depending on the frame length defined by the M bit (8-bits or 9-bits), + please refer to Reference manual for possible UART frame formats. + (++) Hardware flow control + (++) Receiver/transmitter modes + (++) Over Sampling Method + [..] + The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init() and HAL_MultiProcessor_Init() APIs + follow respectively the UART asynchronous, UART Half duplex, LIN and Multi-Processor configuration + procedures (details for the procedures are available in reference manual + (RM0430 for STM32F4X3xx MCUs and RM0402 for STM32F412xx MCUs + RM0383 for STM32F411xC/E MCUs and RM0401 for STM32F410xx MCUs + RM0090 for STM32F4X5xx/STM32F4X7xx/STM32F429xx/STM32F439xx MCUs + RM0390 for STM32F446xx MCUs and RM0386 for STM32F469xx/STM32F479xx MCUs)). + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the UART mode according to the specified parameters in + * the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) + { + /* The hardware flow control is available only for USART1, USART2, USART3 and USART6. + Except for STM32F446xx devices, that is available for USART1, USART2, USART3, USART6, UART4 and UART5. + */ + assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance)); + assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); + } + else + { + assert_param(IS_UART_INSTANCE(huart->Instance)); + } + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief Initializes the half-duplex mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance)); + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In half-duplex mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN)); + + /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ + SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state*/ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief Initializes the LIN mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param BreakDetectLength Specifies the LIN break detection length. + * This parameter can be one of the following values: + * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection + * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the LIN UART instance */ + assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); + + /* Check the Break detection length parameter */ + assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength)); + assert_param(IS_UART_LIN_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_LIN_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In LIN mode, the following bits must be kept cleared: + - CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN)); + + /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ + SET_BIT(huart->Instance->CR2, USART_CR2_LINEN); + + /* Set the USART LIN Break detection length. */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_LBDL); + SET_BIT(huart->Instance->CR2, BreakDetectLength); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state*/ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief Initializes the Multi-Processor mode according to the specified + * parameters in the UART_InitTypeDef and create the associated handle. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param Address USART address + * @param WakeUpMethod specifies the USART wake-up method. + * This parameter can be one of the following values: + * @arg UART_WAKEUPMETHOD_IDLELINE: Wake-up by an idle line detection + * @arg UART_WAKEUPMETHOD_ADDRESSMARK: Wake-up by an address mark + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Check the Address & wake up method parameters */ + assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod)); + assert_param(IS_UART_ADDRESS(Address)); + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); + + if (huart->gState == HAL_UART_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + UART_InitCallbacksToDefault(huart); + + if (huart->MspInitCallback == NULL) + { + huart->MspInitCallback = HAL_UART_MspInit; + } + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + + /* In Multi-Processor mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register */ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Set the USART address node */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_ADD); + SET_BIT(huart->Instance->CR2, Address); + + /* Set the wake up method by setting the WAKE bit in the CR1 register */ + CLEAR_BIT(huart->Instance->CR1, USART_CR1_WAKE); + SET_BIT(huart->Instance->CR1, WakeUpMethod); + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief DeInitializes the UART peripheral. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart) +{ + /* Check the UART handle allocation */ + if (huart == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the Peripheral */ + __HAL_UART_DISABLE(huart); + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + if (huart->MspDeInitCallback == NULL) + { + huart->MspDeInitCallback = HAL_UART_MspDeInit; + } + /* DeInit the low level hardware */ + huart->MspDeInitCallback(huart); +#else + /* DeInit the low level hardware */ + HAL_UART_MspDeInit(huart); +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_RESET; + huart->RxState = HAL_UART_STATE_RESET; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Process Unlock */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief UART MSP Init. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_MspInit could be implemented in the user file + */ +} + +/** + * @brief UART MSP DeInit. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_MspDeInit could be implemented in the user file + */ +} + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User UART Callback + * To be used instead of the weak predefined callback + * @param huart uart handle + * @param CallbackID ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID + * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID + * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID + * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID + * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID + * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID + * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID + * @param pCallback pointer to the Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, + pUART_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + /* Process locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_READY) + { + switch (CallbackID) + { + case HAL_UART_TX_HALFCOMPLETE_CB_ID : + huart->TxHalfCpltCallback = pCallback; + break; + + case HAL_UART_TX_COMPLETE_CB_ID : + huart->TxCpltCallback = pCallback; + break; + + case HAL_UART_RX_HALFCOMPLETE_CB_ID : + huart->RxHalfCpltCallback = pCallback; + break; + + case HAL_UART_RX_COMPLETE_CB_ID : + huart->RxCpltCallback = pCallback; + break; + + case HAL_UART_ERROR_CB_ID : + huart->ErrorCallback = pCallback; + break; + + case HAL_UART_ABORT_COMPLETE_CB_ID : + huart->AbortCpltCallback = pCallback; + break; + + case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : + huart->AbortTransmitCpltCallback = pCallback; + break; + + case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : + huart->AbortReceiveCpltCallback = pCallback; + break; + + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = pCallback; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (huart->gState == HAL_UART_STATE_RESET) + { + switch (CallbackID) + { + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = pCallback; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = pCallback; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + + return status; +} + +/** + * @brief Unregister an UART Callback + * UART callaback is redirected to the weak predefined callback + * @param huart uart handle + * @param CallbackID ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_UART_TX_HALFCOMPLETE_CB_ID Tx Half Complete Callback ID + * @arg @ref HAL_UART_TX_COMPLETE_CB_ID Tx Complete Callback ID + * @arg @ref HAL_UART_RX_HALFCOMPLETE_CB_ID Rx Half Complete Callback ID + * @arg @ref HAL_UART_RX_COMPLETE_CB_ID Rx Complete Callback ID + * @arg @ref HAL_UART_ERROR_CB_ID Error Callback ID + * @arg @ref HAL_UART_ABORT_COMPLETE_CB_ID Abort Complete Callback ID + * @arg @ref HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID Abort Transmit Complete Callback ID + * @arg @ref HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID Abort Receive Complete Callback ID + * @arg @ref HAL_UART_MSPINIT_CB_ID MspInit Callback ID + * @arg @ref HAL_UART_MSPDEINIT_CB_ID MspDeInit Callback ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(huart); + + if (HAL_UART_STATE_READY == huart->gState) + { + switch (CallbackID) + { + case HAL_UART_TX_HALFCOMPLETE_CB_ID : + huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + break; + + case HAL_UART_TX_COMPLETE_CB_ID : + huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ + break; + + case HAL_UART_RX_HALFCOMPLETE_CB_ID : + huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + break; + + case HAL_UART_RX_COMPLETE_CB_ID : + huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ + break; + + case HAL_UART_ERROR_CB_ID : + huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ + break; + + case HAL_UART_ABORT_COMPLETE_CB_ID : + huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + break; + + case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID : + huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ + break; + + case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID : + huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ + break; + + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */ + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = HAL_UART_MspDeInit; /* Legacy weak MspDeInitCallback */ + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else if (HAL_UART_STATE_RESET == huart->gState) + { + switch (CallbackID) + { + case HAL_UART_MSPINIT_CB_ID : + huart->MspInitCallback = HAL_UART_MspInit; + break; + + case HAL_UART_MSPDEINIT_CB_ID : + huart->MspDeInitCallback = HAL_UART_MspDeInit; + break; + + default : + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + /* Return error status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + + return status; +} + +/** + * @brief Register a User UART Rx Event Callback + * To be used instead of the weak predefined callback + * @param huart Uart handle + * @param pCallback Pointer to the Rx Event Callback function + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if (pCallback == NULL) + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_READY) + { + huart->RxEventCallback = pCallback; + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + + return status; +} + +/** + * @brief UnRegister the UART Rx Event Callback + * UART Rx Event Callback is redirected to the weak HAL_UARTEx_RxEventCallback() predefined callback + * @param huart Uart handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_READY) + { + huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak UART Rx Event Callback */ + } + else + { + huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK; + + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(huart); + return status; +} +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group2 IO operation functions + * @brief UART Transmit and Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of functions allowing to manage the UART asynchronous + and Half duplex data transfers. + + (#) There are two modes of transfer: + (+) Blocking mode: The communication is performed in polling mode. + The HAL status of all data processing is returned by the same function + after finishing transfer. + (+) Non-Blocking mode: The communication is performed using Interrupts + or DMA, these API's return the HAL status. + The end of the data processing will be indicated through the + dedicated UART IRQ when using Interrupt mode or the DMA IRQ when + using DMA mode. + The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks + will be executed respectively at the end of the transmit or receive process + The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected. + + (#) Blocking mode API's are : + (+) HAL_UART_Transmit() + (+) HAL_UART_Receive() + + (#) Non-Blocking mode API's with Interrupt are : + (+) HAL_UART_Transmit_IT() + (+) HAL_UART_Receive_IT() + (+) HAL_UART_IRQHandler() + + (#) Non-Blocking mode API's with DMA are : + (+) HAL_UART_Transmit_DMA() + (+) HAL_UART_Receive_DMA() + (+) HAL_UART_DMAPause() + (+) HAL_UART_DMAResume() + (+) HAL_UART_DMAStop() + + (#) A set of Transfer Complete Callbacks are provided in Non_Blocking mode: + (+) HAL_UART_TxHalfCpltCallback() + (+) HAL_UART_TxCpltCallback() + (+) HAL_UART_RxHalfCpltCallback() + (+) HAL_UART_RxCpltCallback() + (+) HAL_UART_ErrorCallback() + + (#) Non-Blocking mode transfers could be aborted using Abort API's : + (+) HAL_UART_Abort() + (+) HAL_UART_AbortTransmit() + (+) HAL_UART_AbortReceive() + (+) HAL_UART_Abort_IT() + (+) HAL_UART_AbortTransmit_IT() + (+) HAL_UART_AbortReceive_IT() + + (#) For Abort services based on interrupts (HAL_UART_Abortxxx_IT), a set of Abort Complete Callbacks are provided: + (+) HAL_UART_AbortCpltCallback() + (+) HAL_UART_AbortTransmitCpltCallback() + (+) HAL_UART_AbortReceiveCpltCallback() + + (#) A Rx Event Reception Callback (Rx event notification) is available for Non_Blocking modes of enhanced reception services: + (+) HAL_UARTEx_RxEventCallback() + + (#) In Non-Blocking mode transfers, possible errors are split into 2 categories. + Errors are handled as follows : + (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is + to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error in Interrupt mode reception . + Received character is then retrieved and stored in Rx buffer, Error code is set to allow user to identify error type, + and HAL_UART_ErrorCallback() user callback is executed. Transfer is kept ongoing on UART side. + If user wants to abort it, Abort services should be called by user. + (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted. + This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode. + Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback() user callback is executed. + + -@- In the Half duplex communication, it is forbidden to run the transmit + and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX can't be useful. + +@endverbatim + * @{ + */ + +/** + * @brief Sends an amount of data in blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + const uint8_t *pdata8bits; + const uint16_t *pdata16bits; + uint32_t tickstart = 0U; + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (const uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + while (huart->TxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); + pdata16bits++; + } + else + { + huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); + pdata8bits++; + } + huart->TxXferCount--; + } + + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + + /* At end of Tx process, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + uint8_t *pdata8bits; + uint16_t *pdata16bits; + uint32_t tickstart = 0U; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Check the remain data to be received */ + while (huart->RxXferCount > 0U) + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + if (pdata8bits == NULL) + { + *pdata16bits = (uint16_t)(huart->Instance->DR & 0x01FF); + pdata16bits++; + } + else + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + pdata8bits++; + } + huart->RxXferCount--; + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sends an amount of data in non blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) +{ + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the UART Transmit data register empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in non blocking mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return (UART_Start_Receive_IT(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Sends an amount of data in DMA mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the sent data is handled as a set of u16. In this case, Size must indicate the number + * of u16 provided through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) +{ + const uint32_t *tmp; + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; + huart->TxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->gState = HAL_UART_STATE_BUSY_TX; + + /* Set the UART DMA transfer complete callback */ + huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt; + + /* Set the UART DMA Half transfer complete callback */ + huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt; + + /* Set the DMA error callback */ + huart->hdmatx->XferErrorCallback = UART_DMAError; + + /* Set the DMA abort callback */ + huart->hdmatx->XferAbortCallback = NULL; + + /* Enable the UART transmit DMA stream */ + tmp = (const uint32_t *)&pData; + HAL_DMA_Start_IT(huart->hdmatx, *(const uint32_t *)tmp, (uint32_t)&huart->Instance->DR, Size); + + /* Clear the TC flag in the SR register by writing 0 to it */ + __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_TC); + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the DMA transfer for transmit request by setting the DMAT bit + in the UART CR3 register */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receives an amount of data in DMA mode. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01), + * the received data is handled as a set of u16. In this case, Size must indicate the number + * of u16 available through pData. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @note When the UART parity is enabled (PCE = 1) the received data contains the parity bit. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + /* Process Locked */ + __HAL_LOCK(huart); + + /* Set Reception type to Standard reception */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return (UART_Start_Receive_DMA(huart, pData, Size)); + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Pauses the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) +{ + uint32_t dmarequest = 0x00U; + + /* Process Locked */ + __HAL_LOCK(huart); + + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + /* Disable the UART DMA Tx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + } + + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the UART DMA Rx request */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Resumes the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart) +{ + /* Process Locked */ + __HAL_LOCK(huart); + + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + /* Enable the UART DMA Tx request */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); + } + + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + /* Clear the Overrun flag before resuming the Rx transfer*/ + __HAL_UART_CLEAR_OREFLAG(huart); + + /* Re-enable PE and ERR (Frame error, noise error, overrun error) interrupts */ + if (huart->Init.Parity != UART_PARITY_NONE) + { + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); + } + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Enable the UART DMA Rx request */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Stops the DMA Transfer. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) +{ + uint32_t dmarequest = 0x00U; + /* The Lock is not implemented on this API to allow the user application + to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback(): + when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated + and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback() + */ + + /* Stop UART DMA Tx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream */ + if (huart->hdmatx != NULL) + { + HAL_DMA_Abort(huart->hdmatx); + } + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream */ + if (huart->hdmarx != NULL) + { + HAL_DMA_Abort(huart->hdmarx); + } + UART_EndRxTransfer(huart); + } + + return HAL_OK; +} + +/** + * @brief Receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs. + * @note HAL_OK is returned if reception is completed (expected number of data has been received) + * or if reception is stopped after IDLE event (less than the expected number of data has been received) + * In this case, RxLen output parameter indicates number of data available in reception buffer. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @param RxLen Number of data elements finally received (could be lower than Size, in case reception ends on IDLE event) + * @param Timeout Timeout duration expressed in ms (covers the whole reception sequence). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, + uint32_t Timeout) +{ + uint8_t *pdata8bits; + uint16_t *pdata16bits; + uint32_t tickstart; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + __HAL_LOCK(huart); + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + /* In case of 9bits/No Parity transfer, pRxData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (uint16_t *) pData; + } + else + { + pdata8bits = pData; + pdata16bits = NULL; + } + + __HAL_UNLOCK(huart); + + /* Initialize output number of received elements */ + *RxLen = 0U; + + /* as long as data have to be received */ + while (huart->RxXferCount > 0U) + { + /* Check if IDLE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) + { + /* Clear IDLE flag in ISR */ + __HAL_UART_CLEAR_IDLEFLAG(huart); + + /* If Set, but no data ever received, clear flag without exiting loop */ + /* If Set, and data has already been received, this means Idle Event is valid : End reception */ + if (*RxLen > 0U) + { + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + } + + /* Check if RXNE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) + { + if (pdata8bits == NULL) + { + *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); + pdata16bits++; + } + else + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + + pdata8bits++; + } + /* Increment number of received elements */ + *RxLen += 1U; + huart->RxXferCount--; + } + + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U)) + { + huart->RxState = HAL_UART_STATE_READY; + + return HAL_TIMEOUT; + } + } + } + + /* Set number of received elements in output parameter : RxLen */ + *RxLen = huart->RxXferSize - huart->RxXferCount; + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive an amount of data in interrupt mode till either the expected number of data is received or an IDLE event occurs. + * @note Reception is initiated by this function call. Further progress of reception is achieved thanks + * to UART interrupts raised by RXNE and IDLE events. Callback is called at end of reception indicating + * number of received data elements. + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef status; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + __HAL_LOCK(huart); + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + + status = UART_Start_Receive_IT(huart, pData, Size); + + /* Check Rx process has been successfully started */ + if (status == HAL_OK) + { + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + else + { + /* In case of errors already pending when reception is started, + Interrupts may have already been raised and lead to reception abortion. + (Overrun error for instance). + In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ + status = HAL_ERROR; + } + } + + return status; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Receive an amount of data in DMA mode till either the expected number of data is received or an IDLE event occurs. + * @note Reception is initiated by this function call. Further progress of reception is achieved thanks + * to DMA services, transferring automatically received data elements in user reception buffer and + * calling registered callbacks at half/end of reception. UART IDLE events are also used to consider + * reception phase as ended. In all cases, callback execution will indicate number of received data elements. + * @note When the UART parity is enabled (PCE = 1), the received data contain + * the parity bit (MSB position). + * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M = 01), + * the received data is handled as a set of uint16_t. In this case, Size must indicate the number + * of uint16_t available through pData. + * @param huart UART handle. + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + HAL_StatusTypeDef status; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + { + if ((pData == NULL) || (Size == 0U)) + { + return HAL_ERROR; + } + + __HAL_LOCK(huart); + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + + status = UART_Start_Receive_DMA(huart, pData, Size); + + /* Check Rx process has been successfully started */ + if (status == HAL_OK) + { + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + else + { + /* In case of errors already pending when reception is started, + Interrupts may have already been raised and lead to reception abortion. + (Overrun error for instance). + In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ + status = HAL_ERROR; + } + } + + return status; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Abort ongoing transfers (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx and Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream: use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream: use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->RxState and huart->gState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->gState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return HAL_OK; +} + +/** + * @brief Abort ongoing Transmit transfer (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmatx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmatx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + return HAL_OK; +} + +/** + * @brief Abort ongoing Receive transfer (blocking mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort (in case of transfer in DMA mode) + * - Set handle State to READY + * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback to Null. + No call back execution at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = NULL; + + if (HAL_DMA_Abort(huart->hdmarx) != HAL_OK) + { + if (HAL_DMA_GetError(huart->hdmarx) == HAL_DMA_ERROR_TIMEOUT) + { + /* Set error code to DMA */ + huart->ErrorCode = HAL_UART_ERROR_DMA; + + return HAL_TIMEOUT; + } + } + } + } + + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + return HAL_OK; +} + +/** + * @brief Abort ongoing transfers (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx and Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) +{ + uint32_t AbortCplt = 0x01U; + + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised + before any call to DMA Abort functions */ + /* DMA Tx Handle is valid */ + if (huart->hdmatx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback; + } + else + { + huart->hdmatx->XferAbortCallback = NULL; + } + } + /* DMA Rx Handle is valid */ + if (huart->hdmarx != NULL) + { + /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback; + } + else + { + huart->hdmarx->XferAbortCallback = NULL; + } + } + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + /* Disable DMA Tx at UART level */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use non blocking DMA Abort API (callback) */ + if (huart->hdmatx != NULL) + { + /* UART Tx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) + { + huart->hdmatx->XferAbortCallback = NULL; + } + else + { + AbortCplt = 0x00U; + } + } + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use non blocking DMA Abort API (callback) */ + if (huart->hdmarx != NULL) + { + /* UART Rx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + huart->hdmarx->XferAbortCallback = NULL; + AbortCplt = 0x01U; + } + else + { + AbortCplt = 0x00U; + } + } + } + + /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ + if (AbortCplt == 0x01U) + { + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief Abort ongoing Transmit transfer (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Tx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Abort the UART DMA Tx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmatx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + huart->hdmatx->XferAbortCallback = UART_DMATxOnlyAbortCallback; + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) + { + /* Call Directly huart->hdmatx->XferAbortCallback function in case of error */ + huart->hdmatx->XferAbortCallback(huart->hdmatx); + } + } + else + { + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Reset Tx transfer counter */ + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief Abort ongoing Receive transfer (Interrupt mode). + * @param huart UART handle. + * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. + * This procedure performs following operations : + * - Disable UART Interrupts (Rx) + * - Disable the DMA transfer in the peripheral register (if enabled) + * - Abort DMA transfer by calling HAL_DMA_Abort_IT (in case of transfer in DMA mode) + * - Set handle State to READY + * - At abort completion, call user abort complete callback + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream : use blocking DMA Abort API (no callback) */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = UART_DMARxOnlyAbortCallback; + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */ + huart->hdmarx->XferAbortCallback(huart->hdmarx); + } + } + else + { + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Reset Rx transfer counter */ + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* As no DMA to be aborted, call directly user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; +} + +/** + * @brief This function handles UART interrupt request. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) +{ + uint32_t isrflags = READ_REG(huart->Instance->SR); + uint32_t cr1its = READ_REG(huart->Instance->CR1); + uint32_t cr3its = READ_REG(huart->Instance->CR3); + uint32_t errorflags = 0x00U; + uint32_t dmarequest = 0x00U; + + /* If no error occurs */ + errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE)); + if (errorflags == RESET) + { + /* UART in mode Receiver -------------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + { + UART_Receive_IT(huart); + return; + } + } + + /* If some errors occur */ + if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) + { + /* UART parity error interrupt occurred ----------------------------------*/ + if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_PE; + } + + /* UART noise error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_NE; + } + + /* UART frame error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + { + huart->ErrorCode |= HAL_UART_ERROR_FE; + } + + /* UART Over-Run interrupt occurred --------------------------------------*/ + if (((isrflags & USART_SR_ORE) != RESET) && (((cr1its & USART_CR1_RXNEIE) != RESET) + || ((cr3its & USART_CR3_EIE) != RESET))) + { + huart->ErrorCode |= HAL_UART_ERROR_ORE; + } + + /* Call UART Error Call back function if need be --------------------------*/ + if (huart->ErrorCode != HAL_UART_ERROR_NONE) + { + /* UART in mode Receiver -----------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + { + UART_Receive_IT(huart); + } + + /* If Overrun error occurs, or if any error occurs in DMA mode reception, + consider error as blocking */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest) + { + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ + UART_EndRxTransfer(huart); + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* Abort the UART DMA Rx stream */ + if (huart->hdmarx != NULL) + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + { + /* Call Directly XferAbortCallback function in case of error */ + huart->hdmarx->XferAbortCallback(huart->hdmarx); + } + } + else + { + /* Call user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Call user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + } + else + { + /* Non Blocking error : transfer could go on. + Error is notified to user through user error callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + huart->ErrorCode = HAL_UART_ERROR_NONE; + } + } + return; + } /* End if some error occurs */ + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + && ((isrflags & USART_SR_IDLE) != 0U) + && ((cr1its & USART_SR_IDLE) != 0U)) + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + + /* Check if DMA mode is enabled in UART */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + { + /* DMA mode enabled */ + /* Check received length : If all expected data are received, do nothing, + (DMA cplt callback will be called). + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); + if ((nb_remaining_rx_data > 0U) + && (nb_remaining_rx_data < huart->RxXferSize)) + { + /* Reception is not complete */ + huart->RxXferCount = nb_remaining_rx_data; + + /* In Normal mode, end DMA xfer and HAL UART Rx process*/ + if (huart->hdmarx->Init.Mode != DMA_CIRCULAR) + { + /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the DMA transfer for the receiver request by resetting the DMAR bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Last bytes received, so no need as the abort is immediate */ + (void)HAL_DMA_Abort(huart->hdmarx); + } +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + return; + } + else + { + /* DMA mode not enabled */ + /* Check received length : If all expected data are received, do nothing. + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount; + if ((huart->RxXferCount > 0U) + && (nb_rx_data > 0U)) + { + /* Disable the UART Parity Error Interrupt and RXNE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxEventCallback(huart, nb_rx_data); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, nb_rx_data); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + return; + } + } + + /* UART in mode Transmitter ------------------------------------------------*/ + if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) + { + UART_Transmit_IT(huart); + return; + } + + /* UART in mode Transmitter end --------------------------------------------*/ + if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) + { + UART_EndTransmit_IT(huart); + return; + } +} + +/** + * @brief Tx Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Half Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_TxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Half Transfer completed callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_RxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief UART error callbacks. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief UART Abort Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief UART Abort Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortTransmitCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief UART Abort Receive Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortReceiveCpltCallback can be implemented in the user file. + */ +} + +/** + * @brief Reception Event Callback (Rx event notification called after use of advanced reception service). + * @param huart UART handle + * @param Size Number of data available in application reception buffer (indicates a position in + * reception buffer until which, data are available) + * @retval None + */ +__weak void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + UNUSED(Size); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UARTEx_RxEventCallback can be implemented in the user file. + */ +} + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group3 Peripheral Control functions + * @brief UART control functions + * +@verbatim + ============================================================================== + ##### Peripheral Control functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to control the UART: + (+) HAL_LIN_SendBreak() API can be helpful to transmit the break character. + (+) HAL_MultiProcessor_EnterMuteMode() API can be helpful to enter the UART in mute mode. + (+) HAL_MultiProcessor_ExitMuteMode() API can be helpful to exit the UART mute mode by software. + (+) HAL_HalfDuplex_EnableTransmitter() API to enable the UART transmitter and disables the UART receiver in Half Duplex mode + (+) HAL_HalfDuplex_EnableReceiver() API to enable the UART receiver and disables the UART transmitter in Half Duplex mode + +@endverbatim + * @{ + */ + +/** + * @brief Transmits break characters. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Send break characters */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_SBK); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enters the UART in mute mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Enable the USART mute mode by setting the RWU bit in the CR1 register */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RWU); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Exits the UART mute mode: wake up software. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart) +{ + /* Check the parameters */ + assert_param(IS_UART_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RWU); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enables the UART transmitter and disables the UART receiver. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg = 0x00U; + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /*-------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = huart->Instance->CR1; + + /* Clear TE and RE bits */ + tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */ + tmpreg |= (uint32_t)USART_CR1_TE; + + /* Write to USART CR1 */ + WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Enables the UART receiver and disables the UART transmitter. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg = 0x00U; + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /*-------------------------- USART CR1 Configuration -----------------------*/ + tmpreg = huart->Instance->CR1; + + /* Clear TE and RE bits */ + tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE)); + + /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */ + tmpreg |= (uint32_t)USART_CR1_RE; + + /* Write to USART CR1 */ + WRITE_REG(huart->Instance->CR1, (uint32_t)tmpreg); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Errors functions + * @brief UART State and Errors functions + * +@verbatim + ============================================================================== + ##### Peripheral State and Errors functions ##### + ============================================================================== + [..] + This subsection provides a set of functions allowing to return the State of + UART communication process, return Peripheral Errors occurred during communication + process + (+) HAL_UART_GetState() API can be helpful to check in run-time the state of the UART peripheral. + (+) HAL_UART_GetError() check in run-time errors that could be occurred during communication. + +@endverbatim + * @{ + */ + +/** + * @brief Returns the UART state. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL state + */ +HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart) +{ + uint32_t temp1 = 0x00U, temp2 = 0x00U; + temp1 = huart->gState; + temp2 = huart->RxState; + + return (HAL_UART_StateTypeDef)(temp1 | temp2); +} + +/** + * @brief Return the UART error code + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART. + * @retval UART Error Code + */ +uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart) +{ + return huart->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup UART_Private_Functions UART Private Functions + * @{ + */ + +/** + * @brief Initialize the callbacks to their default values. + * @param huart UART handle. + * @retval none + */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) +void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart) +{ + /* Init the UART Callback settings */ + huart->TxHalfCpltCallback = HAL_UART_TxHalfCpltCallback; /* Legacy weak TxHalfCpltCallback */ + huart->TxCpltCallback = HAL_UART_TxCpltCallback; /* Legacy weak TxCpltCallback */ + huart->RxHalfCpltCallback = HAL_UART_RxHalfCpltCallback; /* Legacy weak RxHalfCpltCallback */ + huart->RxCpltCallback = HAL_UART_RxCpltCallback; /* Legacy weak RxCpltCallback */ + huart->ErrorCallback = HAL_UART_ErrorCallback; /* Legacy weak ErrorCallback */ + huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */ + huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */ + huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */ + huart->RxEventCallback = HAL_UARTEx_RxEventCallback; /* Legacy weak RxEventCallback */ + +} +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + +/** + * @brief DMA UART transmit process complete callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + /* DMA Normal mode*/ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) + { + huart->TxXferCount = 0x00U; + + /* Disable the DMA transfer for transmit request by setting the DMAT bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + + /* Enable the UART Transmit Complete Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + + } + /* DMA Circular mode */ + else + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART transmit process half complete callback + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxHalfCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxHalfCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART receive process complete callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + /* DMA Normal mode*/ + if ((hdma->Instance->CR & DMA_SxCR_CIRC) == 0U) + { + huart->RxXferCount = 0U; + + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Disable the DMA transfer for the receiver request by setting the DMAR bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* If Reception till IDLE event has been selected, Disable IDLE Interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + } + + /* Check current reception Mode : + If Reception till IDLE event has been selected : use Rx Event callback */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* In other cases : use Rx Complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxCpltCallback(huart); +#else + /*Call legacy weak Rx complete callback*/ + HAL_UART_RxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART receive process half complete callback + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Check current reception Mode : + If Reception till IDLE event has been selected : use Rx Event callback */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize / 2U); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize / 2U); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* In other cases : use Rx Half Complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Half complete callback*/ + huart->RxHalfCpltCallback(huart); +#else + /*Call legacy weak Rx Half complete callback*/ + HAL_UART_RxHalfCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } +} + +/** + * @brief DMA UART communication error callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAError(DMA_HandleTypeDef *hdma) +{ + uint32_t dmarequest = 0x00U; + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + /* Stop UART DMA Tx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT); + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && dmarequest) + { + huart->TxXferCount = 0x00U; + UART_EndTxTransfer(huart); + } + + /* Stop UART DMA Rx request if ongoing */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && dmarequest) + { + huart->RxXferCount = 0x00U; + UART_EndRxTransfer(huart); + } + + huart->ErrorCode |= HAL_UART_ERROR_DMA; +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief This function handles UART Communication Timeout. It waits + * until a flag is no longer in the specified status. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @param Flag specifies the UART flag to check. + * @param Status The actual Flag status (SET or RESET). + * @param Tickstart Tick start value + * @param Timeout Timeout duration + * @retval HAL status + */ +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout) +{ + /* Wait until flag is set */ + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) + { + /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_TIMEOUT; + } + } + } + return HAL_OK; +} + +/** + * @brief Start Receive operation in interrupt mode. + * @note This function could be called by all HAL UART API providing reception in Interrupt mode. + * @note When calling this function, parameters validity is considered as already checked, + * i.e. Rx State, buffer address, ... + * UART Handle is assumed as Locked. + * @param huart UART handle. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; + huart->RxXferCount = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + if (huart->Init.Parity != UART_PARITY_NONE) + { + /* Enable the UART Parity Error Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_PE); + } + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_ENABLE_IT(huart, UART_IT_ERR); + + /* Enable the UART Data Register not empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE); + + return HAL_OK; +} + +/** + * @brief Start Receive operation in DMA mode. + * @note This function could be called by all HAL UART API providing reception in DMA mode. + * @note When calling this function, parameters validity is considered as already checked, + * i.e. Rx State, buffer address, ... + * UART Handle is assumed as Locked. + * @param huart UART handle. + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + uint32_t *tmp; + + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; + + huart->ErrorCode = HAL_UART_ERROR_NONE; + huart->RxState = HAL_UART_STATE_BUSY_RX; + + /* Set the UART DMA transfer complete callback */ + huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt; + + /* Set the UART DMA Half transfer complete callback */ + huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt; + + /* Set the DMA error callback */ + huart->hdmarx->XferErrorCallback = UART_DMAError; + + /* Set the DMA abort callback */ + huart->hdmarx->XferAbortCallback = NULL; + + /* Enable the DMA stream */ + tmp = (uint32_t *)&pData; + HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t *)tmp, Size); + + /* Clear the Overrun flag just before enabling the DMA Rx request: can be mandatory for the second transfer */ + __HAL_UART_CLEAR_OREFLAG(huart); + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + if (huart->Init.Parity != UART_PARITY_NONE) + { + /* Enable the UART Parity Error Interrupt */ + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); + } + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Enable the DMA transfer for the receiver request by setting the DMAR bit + in the UART CR3 register */ + ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); + + return HAL_OK; +} + +/** + * @brief End ongoing Tx transfer on UART peripheral (following error detection or Transmit completion). + * @param huart UART handle. + * @retval None + */ +static void UART_EndTxTransfer(UART_HandleTypeDef *huart) +{ + /* Disable TXEIE and TCIE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); + + /* At end of Tx process, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; +} + +/** + * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). + * @param huart UART handle. + * @retval None + */ +static void UART_EndRxTransfer(UART_HandleTypeDef *huart) +{ + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; +} + +/** + * @brief DMA UART communication abort callback, when initiated by HAL services on Error + * (To be called at end of DMA Abort procedure following error occurrence). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + huart->RxXferCount = 0x00U; + huart->TxXferCount = 0x00U; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Tx communication abort callback, when initiated by user + * (To be called at end of DMA Tx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Rx DMA Handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->hdmatx->XferAbortCallback = NULL; + + /* Check if an Abort process is still ongoing */ + if (huart->hdmarx != NULL) + { + if (huart->hdmarx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Rx communication abort callback, when initiated by user + * (To be called at end of DMA Rx Abort procedure following user abort request). + * @note When this callback is executed, User Abort complete call back is called only if no + * Abort still ongoing for Tx DMA Handle. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->hdmarx->XferAbortCallback = NULL; + + /* Check if an Abort process is still ongoing */ + if (huart->hdmatx != NULL) + { + if (huart->hdmatx->XferAbortCallback != NULL) + { + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + huart->RxXferCount = 0x00U; + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Tx communication abort callback, when initiated by user by a call to + * HAL_UART_AbortTransmit_IT API (Abort only Tx transfer) + * (This callback is executed at end of DMA Tx Abort procedure following user abort request, + * and leads to user Tx Abort Complete callback execution). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->TxXferCount = 0x00U; + + /* Restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Transmit Complete Callback */ + huart->AbortTransmitCpltCallback(huart); +#else + /* Call legacy weak Abort Transmit Complete Callback */ + HAL_UART_AbortTransmitCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief DMA UART Rx communication abort callback, when initiated by user by a call to + * HAL_UART_AbortReceive_IT API (Abort only Rx transfer) + * (This callback is executed at end of DMA Rx Abort procedure following user abort request, + * and leads to user Rx Abort Complete callback execution). + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) +{ + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + + huart->RxXferCount = 0x00U; + + /* Restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Call user Abort complete callback */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort Receive Complete Callback */ + huart->AbortReceiveCpltCallback(huart); +#else + /* Call legacy weak Abort Receive Complete Callback */ + HAL_UART_AbortReceiveCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + +/** + * @brief Sends an amount of data in non blocking mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) +{ + const uint16_t *tmp; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + tmp = (const uint16_t *) huart->pTxBuffPtr; + huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF); + huart->pTxBuffPtr += 2U; + } + else + { + huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF); + } + + if (--huart->TxXferCount == 0U) + { + /* Disable the UART Transmit Data Register Empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TXE); + + /* Enable the UART Transmit Complete Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TC); + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Wraps up transmission in non blocking mode. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) +{ + /* Disable the UART Transmit Complete Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TC); + + /* Tx process is ended, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + return HAL_OK; +} + +/** + * @brief Receives an amount of data in non blocking mode + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) +{ + uint8_t *pdata8bits; + uint16_t *pdata16bits; + + /* Check that a Rx process is ongoing */ + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + pdata8bits = NULL; + pdata16bits = (uint16_t *) huart->pRxBuffPtr; + *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); + huart->pRxBuffPtr += 2U; + } + else + { + pdata8bits = (uint8_t *) huart->pRxBuffPtr; + pdata16bits = NULL; + + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + } + huart->pRxBuffPtr += 1U; + } + + if (--huart->RxXferCount == 0U) + { + /* Disable the UART Data Register not empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); + + /* Disable the UART Parity Error Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_PE); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + { + /* Set reception type to Standard */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + + /* Disable IDLE interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + + /* Check if IDLE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) + { + /* Clear IDLE flag in ISR */ + __HAL_UART_CLEAR_IDLEFLAG(huart); + } + +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + else + { + /* Standard reception API called */ +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxCpltCallback(huart); +#else + /*Call legacy weak Rx complete callback*/ + HAL_UART_RxCpltCallback(huart); +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; + } + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Configures the UART peripheral. + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +static void UART_SetConfig(UART_HandleTypeDef *huart) +{ + uint32_t tmpreg; + uint32_t pclk; + + /* Check the parameters */ + assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); + assert_param(IS_UART_STOPBITS(huart->Init.StopBits)); + assert_param(IS_UART_PARITY(huart->Init.Parity)); + assert_param(IS_UART_MODE(huart->Init.Mode)); + + /*-------------------------- USART CR2 Configuration -----------------------*/ + /* Configure the UART Stop Bits: Set STOP[13:12] bits + according to huart->Init.StopBits value */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); + + /*-------------------------- USART CR1 Configuration -----------------------*/ + /* Configure the UART Word Length, Parity and mode: + Set the M bits according to huart->Init.WordLength value + Set PCE and PS bits according to huart->Init.Parity value + Set TE and RE bits according to huart->Init.Mode value + Set OVER8 bit according to huart->Init.OverSampling value */ + + tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; + MODIFY_REG(huart->Instance->CR1, + (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), + tmpreg); + + /*-------------------------- USART CR3 Configuration -----------------------*/ + /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ + MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); + + +#if defined(USART6) && defined(UART9) && defined(UART10) + if ((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#elif defined(USART6) + if ((huart->Instance == USART1) || (huart->Instance == USART6)) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#else + if (huart->Instance == USART1) + { + pclk = HAL_RCC_GetPCLK2Freq(); + } +#endif /* USART6 */ + else + { + pclk = HAL_RCC_GetPCLK1Freq(); + } + /*-------------------------- USART BRR Configuration ---------------------*/ + if (huart->Init.OverSampling == UART_OVERSAMPLING_8) + { + huart->Instance->BRR = UART_BRR_SAMPLING8(pclk, huart->Init.BaudRate); + } + else + { + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + } +} + +/** + * @} + */ + +#endif /* HAL_UART_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/access_control_stm32/STM32F411RETX_FLASH.ld b/access_control_stm32/STM32F411RETX_FLASH.ld new file mode 100644 index 0000000..fe3cdd3 --- /dev/null +++ b/access_control_stm32/STM32F411RETX_FLASH.ld @@ -0,0 +1,185 @@ +/* +****************************************************************************** +** +** @file : LinkerScript.ld +** +** @author : Auto-generated by STM32CubeIDE +** +** Abstract : Linker script for NUCLEO-F411RE Board embedding STM32F411RETx Device from stm32f4 series +** 512KBytes FLASH +** 128KBytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +****************************************************************************** +** @attention +** +** Copyright (c) 2023 STMicroelectronics. +** All rights reserved. +** +** This software is licensed under terms that can be found in the LICENSE file +** in the root directory of this software component. +** If no LICENSE file comes with this software, it is provided AS-IS. +** +****************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ + +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Memories definition */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K +} + +/* Sections */ +SECTIONS +{ + /* The startup code into "FLASH" Rom type memory */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data into "FLASH" Rom type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data into "FLASH" Rom type memory */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { + . = ALIGN(4); + *(.ARM.extab* .gnu.linkonce.armextab.*) + . = ALIGN(4); + } >FLASH + + .ARM : { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + . = ALIGN(4); + } >FLASH + + .preinit_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4); + } >FLASH + + .init_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4); + } >FLASH + + .fini_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4); + } >FLASH + + /* Used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections into "RAM" Ram type memory */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + + } >RAM AT> FLASH + + /* Uninitialized data section into "RAM" Ram type memory */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + /* Remove information from the compiler libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/access_control_stm32/STM32F411RETX_RAM.ld b/access_control_stm32/STM32F411RETX_RAM.ld new file mode 100644 index 0000000..6fa8929 --- /dev/null +++ b/access_control_stm32/STM32F411RETX_RAM.ld @@ -0,0 +1,185 @@ +/* +****************************************************************************** +** +** @file : LinkerScript.ld (debug in RAM dedicated) +** +** @author : Auto-generated by STM32CubeIDE +** +** Abstract : Linker script for NUCLEO-F411RE Board embedding STM32F411RETx Device from stm32f4 series +** 512KBytes FLASH +** 128KBytes RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used +** +** Target : STMicroelectronics STM32 +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +****************************************************************************** +** @attention +** +** Copyright (c) 2023 STMicroelectronics. +** All rights reserved. +** +** This software is licensed under terms that can be found in the LICENSE file +** in the root directory of this software component. +** If no LICENSE file comes with this software, it is provided AS-IS. +** +****************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ + +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Memories definition */ +MEMORY +{ + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K + FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K +} + +/* Sections */ +SECTIONS +{ + /* The startup code into "RAM" Ram type memory */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >RAM + + /* The program code and other data into "RAM" Ram type memory */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + *(.RamFunc) /* .RamFunc sections */ + *(.RamFunc*) /* .RamFunc* sections */ + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >RAM + + /* Constant data into "RAM" Ram type memory */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >RAM + + .ARM.extab : { + . = ALIGN(4); + *(.ARM.extab* .gnu.linkonce.armextab.*) + . = ALIGN(4); + } >RAM + + .ARM : { + . = ALIGN(4); + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + . = ALIGN(4); + } >RAM + + .preinit_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4); + } >RAM + + .init_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4); + } >RAM + + .fini_array : + { + . = ALIGN(4); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4); + } >RAM + + /* Used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections into "RAM" Ram type memory */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + + } >RAM + + /* Uninitialized data section into "RAM" Ram type memory */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + /* Remove information from the compiler libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} diff --git a/access_control_stm32/access_control_stm32 Debug.launch b/access_control_stm32/access_control_stm32 Debug.launch new file mode 100644 index 0000000..07e3614 --- /dev/null +++ b/access_control_stm32/access_control_stm32 Debug.launch @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/access_control_stm32/access_control_stm32.ioc b/access_control_stm32/access_control_stm32.ioc new file mode 100644 index 0000000..8d36cf9 --- /dev/null +++ b/access_control_stm32/access_control_stm32.ioc @@ -0,0 +1,162 @@ +#MicroXplorer Configuration settings - do not modify +CAD.formats= +CAD.pinconfig= +CAD.provider= +File.Version=6 +KeepUserPlacement=false +Mcu.CPN=STM32F411RET6 +Mcu.Family=STM32F4 +Mcu.IP0=NVIC +Mcu.IP1=RCC +Mcu.IP2=SYS +Mcu.IP3=USART2 +Mcu.IPNb=4 +Mcu.Name=STM32F411R(C-E)Tx +Mcu.Package=LQFP64 +Mcu.Pin0=PC13-ANTI_TAMP +Mcu.Pin1=PC14-OSC32_IN +Mcu.Pin10=PB3 +Mcu.Pin11=VP_SYS_VS_Systick +Mcu.Pin2=PC15-OSC32_OUT +Mcu.Pin3=PH0 - OSC_IN +Mcu.Pin4=PH1 - OSC_OUT +Mcu.Pin5=PA2 +Mcu.Pin6=PA3 +Mcu.Pin7=PA5 +Mcu.Pin8=PA13 +Mcu.Pin9=PA14 +Mcu.PinsNb=12 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F411RETx +MxCube.Version=6.9.1 +MxDb.Version=DB.6.0.91 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:false +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=TMS +PA13.Locked=true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=TCK +PA14.Locked=true +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=USART_TX +PA2.Locked=true +PA2.Mode=Asynchronous +PA2.Signal=USART2_TX +PA3.GPIOParameters=GPIO_Label +PA3.GPIO_Label=USART_RX +PA3.Locked=true +PA3.Mode=Asynchronous +PA3.Signal=USART2_RX +PA5.GPIOParameters=GPIO_Label +PA5.GPIO_Label=LD2 [Green Led] +PA5.Locked=true +PA5.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=SWO +PB3.Locked=true +PB3.Signal=SYS_JTDO-SWO +PC13-ANTI_TAMP.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI +PC13-ANTI_TAMP.GPIO_Label=B1 [Blue PushButton] +PC13-ANTI_TAMP.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING +PC13-ANTI_TAMP.Locked=true +PC13-ANTI_TAMP.Signal=GPXTI13 +PC14-OSC32_IN.Locked=true +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Locked=true +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PH0\ -\ OSC_IN.Locked=true +PH0\ -\ OSC_IN.Mode=HSE-External-Clock-Source +PH0\ -\ OSC_IN.Signal=RCC_OSC_IN +PH1\ -\ OSC_OUT.Locked=true +PH1\ -\ OSC_OUT.Mode=HSE-External-Clock-Source +PH1\ -\ OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F411RETx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.27.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=access_control_stm32.ioc +ProjectManager.ProjectName=access_control_stm32 +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true +RCC.48MHZClocksFreq_Value=84000000 +RCC.AHBFreq_Value=84000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV2 +RCC.APB1Freq_Value=42000000 +RCC.APB1TimFreq_Value=84000000 +RCC.APB2Freq_Value=84000000 +RCC.APB2TimFreq_Value=84000000 +RCC.CortexFreq_Value=84000000 +RCC.EthernetFreq_Value=84000000 +RCC.FCLKCortexFreq_Value=84000000 +RCC.FLatency-AdvancedSettings=FLASH_LATENCY_2 +RCC.FamilyName=M +RCC.HCLKFreq_Value=84000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=96000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FLatency-AdvancedSettings,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLN,PLLP,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOInputMFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=84000000 +RCC.PLLCLKFreq_Value=84000000 +RCC.PLLN=336 +RCC.PLLP=RCC_PLLP_DIV4 +RCC.PLLQCLKFreq_Value=84000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=84000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=192000000 +RCC.VCOInputFreq_Value=1000000 +RCC.VCOInputMFreq_Value=1000000 +RCC.VCOOutputFreq_Value=336000000 +RCC.VcooutputI2S=96000000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +USART2.IPParameters=VirtualMode +USART2.VirtualMode=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-F411RE +boardIOC=true +isbadioc=false

    jA^<70;{=ojMn{;vgBpDZ5sNue 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 b5e{|!F~s?bhdHTn$LuYTn4GeJIPU)d2sI&X literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su new file mode 100644 index 0000000..6c24b90 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su @@ -0,0 +1,15 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:170:19:HAL_DMA_Init 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:309:19:HAL_DMA_DeInit 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:407:19:HAL_DMA_Start 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:451:19:HAL_DMA_Start_IT 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:513:19:HAL_DMA_Abort 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:580:19:HAL_DMA_Abort_IT 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:610:19:HAL_DMA_PollForTransfer 48 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:746:6:HAL_DMA_IRQHandler 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:967:19:HAL_DMA_RegisterCallback 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1029:19:HAL_DMA_UnRegisterCallback 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1114:22:HAL_DMA_GetState 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1125:10:HAL_DMA_GetError 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1151:13:DMA_SetConfig 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1185:17:DMA_CalcBaseAndBitshift 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c:1213:26:DMA_CheckFifoParam 24 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo new file mode 100644 index 0000000..8080a4a --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo @@ -0,0 +1,4 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:100:19:HAL_DMAEx_MultiBufferStart 4 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:154:19:HAL_DMAEx_MultiBufferStart_IT 264 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:239:19:HAL_DMAEx_ChangeMemory 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c:276:13:DMA_MultiBufferSetConfig 2 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d new file mode 100644 index 0000000..34ff973 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o new file mode 100644 index 0000000000000000000000000000000000000000..959733355cc79f1b5d4fc9af67d3758c3061910a GIT binary patch literal 720212 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�%($TLRmw-G*L)r}Ge6V$a^V3Mltp)&NM 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%0D(PZGopfA?hzUn$dhI3N1k_?{W_=?Pgz8IXR zqs*y&)Pxy+2%*R8fke?-3b3ufJ2K@EKiq(gF1u3or5f#q3ds7=Law^osE~vQCRbG; zS4_Oj1!K{PZ&}Y_ZGdI)g;M%IodFF!$+`wu&lw>pBd2Pf#P48O6RsDrh=0(~I5+~G z$`688iHK^*f|d|nyjz%Dy0o%_e~Flt2@?bY>U?mAElOPTo!U^4(76q90e9wQAnXRQ zwGm-_1>_4&e&AHMtS||ur*=6N18|O)5i@4&0K^+(?E_kM--V2@2lOh4XhuI>pJ>K2 zBHC=!C4^LQy;aKyh`Ab$!H1CNEFKyUoz@}3$Ev{wR2LP(x+9YHETv+fr6S_`I$F|O zMw=tGgQ3B3o}Ny7aJbk{v75N6VgM>Ddavu#UR)0tO3B6mh!iVvAqu_W`U3VDGLxzA-K`}sa2hK*J)$NB!QPuOp0Pa_#zDj8f&3UN6 zI+9JgzH;t|_U19MIyArW_U;sKZ*QE?5ey(yHgfo>2=XDn#iO9kEmNuF98vV3Dpfsl z*OafGa$LpW`dzSQmDlHiHOq6ra@Sa=VxPQ-N`legPvnvXjcMQ;+tjl$P8Pp;5sJ_7LxC^(C@L5a!K3NvK9j-XHS%!@O|OE|qa zLhhTom_Typ^+w%?92omfRf#q?CcnhxM>IjXcN;25Fq^@Px7{eYHGqti8!*dg=NkAW zCA8s@^c=@Gp*b$%h5(#RZdo=oZP_RSGlpEUz+|QLHfhmM(LcGrVWaewaZQx< z;6_fU2RD*JJ-Cq->cNenvL3us+al}1jjggCTp25Y(G{%!V$6QW_I{ZA@?Ka`hqVt5G#I$L7#iw*pC*WMZ8KjpvP!f=9CbGnb!GYL;^$;%w zGl{xFhve!B#3w_TIspi)E-z!So;3WA6jj!-V`nzF@j}?3Q<{?=#x5UxN%hT?~qQij9>lzK$#jWPsm3sr@l z7_|o5)leyWQ#-MX|MP0-w*6qanLjm7 z%gM&_ZrM{ij`5e2z(h|2cm$IR4+})<6odu z9CzSZ-~_I328CD7vp(*=iaJ%n)a(j&!Jukeyb8jtF7wl246|jp1{;=J6$6uns5($q z6mgIuLy~1a+N>~yok$rQN}N_AY8e?m6xKO>r9Qn1VI_g7J|6o5J`^)q@*`q#oQbB=z8iA*ly93`sq>VMyx14MS27PKLx#DjfJp#xr5v zZWt;Hj69pdDVj9|C4pwyBMQRwOI#ofy2r(`~{?^T=KwR*v7aM7%pA~;hq9Hf>{EruW~-3NZ=hWb6=5xb7uxtP;I|- zsg$PS=B@;;Sh5CCOvPI@tz%hyAV*I{5yrU%#yJGeYf<+SLm)7}G;6FbECyBW@9Bfh zRxGo+Y_J5r&#abu@L8WxKi-AqpuK0wv1Q=VDtisqXRxL`d`fMEPxHiFt#_(5g7I2T zT`B^eI+y|J7~U%MQB`iXr~n!OReC5}=EzI|2@_511t_;Tt#H84mhzxG3NN(LUZ$3! zq3%K%j2Tg=Cj~j?PTvXhrrfVtSPJ@lFE~}|-e_{xBCB{w>6F;=c+#P~a&$>{Ou8_O zTVasob1)0PYw%(SP-%K^4g<-Nu2{`nX;^5TtK}i9>(2r63B?-k2$e&tJ`pwM?ZPmK z0v=5R+E#TR~hdl>U@JzM{F{AM(xvqXK_-^`%3!Eke0~tt8U{%g_CtyHzgSRb1C>W zfGfexJLN>Bge4iugFiSTzr(SqZy@#m>ux90f~OeNR}afNRIIMgZBosw{{TbhXP#f^ zlxu-taK)L8RHu^|9-dq_xpZh^M9h8u{AEiggci_`BH6AY;Hp8_t}IRusMellVZ0mn%%1YQE|wAlLAI%0A-$eS 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%0D{^@l?%)71`Gi4 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 B(pmrj literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su new file mode 100644 index 0000000..be56024 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su @@ -0,0 +1,9 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:142:19:HAL_EXTI_SetConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:237:19:HAL_EXTI_GetConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:316:19:HAL_EXTI_ClearConfigLine 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:369:19:HAL_EXTI_RegisterCallback 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:394:19:HAL_EXTI_GetHandle 16 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:434:6:HAL_EXTI_IRQHandler 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:466:10:HAL_EXTI_GetPending 32 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:495:6:HAL_EXTI_ClearPending 24 static +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c:516:6:HAL_EXTI_GenerateSWI 24 static diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo new file mode 100644 index 0000000..f24ffba --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo @@ -0,0 +1,17 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:154:19:HAL_FLASH_Program 6 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:212:19:HAL_FLASH_Program_IT 5 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:259:6:HAL_FLASH_IRQHandler 9 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:382:13:HAL_FLASH_EndOfOperationCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:399:13:HAL_FLASH_OperationErrorCallback 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:431:19:HAL_FLASH_Unlock 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:455:19:HAL_FLASH_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:467:19:HAL_FLASH_OB_Unlock 2 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:487:19:HAL_FLASH_OB_Lock 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:499:19:HAL_FLASH_OB_Launch 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:536:10:HAL_FLASH_GetError 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:550:19:FLASH_WaitForLastOperation 7 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:610:13:FLASH_Program_DoubleWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:644:13:FLASH_Program_Word 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:669:13:FLASH_Program_HalfWord 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:694:13:FLASH_Program_Byte 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:711:13:FLASH_SetErrorCode 7 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d new file mode 100644 index 0000000..b312b74 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o new file mode 100644 index 0000000000000000000000000000000000000000..6184639e20bbd91f48e054fd512a36a16577ce95 GIT binary patch literal 718624 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 -YS7Y)o@V&;8(egTVT}4jnTCze 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 UG2peR*2a<`VRobuMi;QIZ}I!kMFJL~kk&Rm?V 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

  • $tJ;dO;WOrugmoB@a^ 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 literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Src/system_stm32f4xx.su b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.su new file mode 100644 index 0000000..96f1cd4 --- /dev/null +++ b/access_control_stm32/Debug/Core/Src/system_stm32f4xx.su @@ -0,0 +1,2 @@ +../Core/Src/system_stm32f4xx.c:167:6:SystemInit 4 static +../Core/Src/system_stm32f4xx.c:220:6:SystemCoreClockUpdate 32 static diff --git a/access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.d b/access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.d new file mode 100644 index 0000000..cdfd4f3 --- /dev/null +++ b/access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.d @@ -0,0 +1,2 @@ +Core/Startup/startup_stm32f411retx.o: \ + ../Core/Startup/startup_stm32f411retx.s diff --git a/access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.o b/access_control_stm32/Debug/Core/Startup/startup_stm32f411retx.o new file mode 100644 index 0000000000000000000000000000000000000000..ccb4edb31bf63fc4ff110d9ed9d507421758839c GIT binary patch literal 6220 zcmeHLU2Ggz6+Sy__b0{9U-MI18YfP`C3x3sJ84o{$a*)nH}NK$-L>PifywOd*j{CS z%*;4S0F_Eq2wH>yA&4r3_^D8ZiWH$rPzebhf>c3;idrFfpyUCGf>6arM`*lyFWkm_gC*aan~FTCvI%N&^P|=shh99^VZw%MAzz! z(TPUh{-Z|zU;Q7-z$L`ePkodET8YHX!2!Yo;x&T{l|2>*dqQdVSeva!S>y4I`jsmA za3Zr8WjOjr4S!=}>EyYgOgf$1oJw03x{B=oN(n0go_i=g@4KF#UUAwhPCDPMueIGy z;HPJr!R%Ts?Fa3N@zJGrFk0_6+_Y1#yS{JNyPd%6wrr(M=iS=cGNn@KT-S5cmB8_W zwN>(a*t1!h%w#+_xSaAgl<&cC`YF)|=shj(;u^{bE;ZIC5?g7@uK8Wb!FvY}3~ujN zTHN;IQdvL-qf!bhJ$a9a2r)Jl>ADF2dpVgoH9wTC42`EIj?fMS!E?;zcD|L=-JxL4BXb<0>jijO~Cf05|=qQO6cZc$)w_5=-J~RgxqP#2T(7X|v#) zRQp>((_50FWz@4s()L@Xs3mEe;9CUWL5DTTR>YeNIZwD^sUJa7n%oXvlN;+$lN%XO$u=x8 z(-Z5b6(VC=r%UsC;*cmKU~nTWY&v+~@orMPdh1?Ndv)tRQoCI1J-i=<{(hqO12^p@ zb)wv~k7%6vaBoj(4G}%ec4&W$5$*Gg=y#S8{me0%2Z>sYaJI^Llqg_)i0Cro2Z=t(h`~R>_z2OHj2|NUEaQiX zzRq}z=$i!05ms`X6Jwp|i;NAT zuQ0m3bD)JI6`v0o$3n!^D2^19)koB3+!U^#Eu>C$)>b0?lXW+#Gp4nJ@GT4+h$X1- zHbxxz&_wmKn-TpCgd8pvr<8xC9XK^$;Pr4Ns(EfJg#&d!DYXkp@%AGX2~*}qL>Z>! zc1Bq@eb2t6_B*}S4gTzbO-jc_$8jBB6Fgnt>@0O7y;G}s?j>F8cur^8ML4||_KdvY~mg)Un z1&_vvYFx*XR(6r@8Stx7@SzSscr*;ZFT?K;8nNFya7BJS)V1a`4x5id7L`cXfj}R} zU$*te#{FSg$NfEyI=A6*b9o;9J=LqKJL~xRa)?TZ+hHVpI3k+v3#jXU?+c$*_RG&w zG>&g*ZBV6i=no;rB^t*yNTNC`S7A32TlI3ol;4-S-#Pf@XPEsWm9gKSpw9h8rN)*%2A<+Fc;FtZeUsPkiucHoEs{mEf=x=XCfKh*p(OO}3 t33eCoQ0+pU$HV#K{@Ew`i_0}k>i2koh9&Bc-+Q`UfS}%tjDV5dzW`$BQtbc$ literal 0 HcmV?d00001 diff --git a/access_control_stm32/Debug/Core/Startup/subdir.mk b/access_control_stm32/Debug/Core/Startup/subdir.mk new file mode 100644 index 0000000..6175c91 --- /dev/null +++ b/access_control_stm32/Debug/Core/Startup/subdir.mk @@ -0,0 +1,27 @@ +################################################################################ +# Automatically-generated file. Do not edit! +# Toolchain: GNU Tools for STM32 (11.3.rel1) +################################################################################ + +# Add inputs and outputs from these tool invocations to the build variables +S_SRCS += \ +../Core/Startup/startup_stm32f411retx.s + +OBJS += \ +./Core/Startup/startup_stm32f411retx.o + +S_DEPS += \ +./Core/Startup/startup_stm32f411retx.d + + +# Each subdirectory must supply rules for building sources it contributes +Core/Startup/%.o: ../Core/Startup/%.s Core/Startup/subdir.mk + arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -DDEBUG -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<" + +clean: clean-Core-2f-Startup + +clean-Core-2f-Startup: + -$(RM) ./Core/Startup/startup_stm32f411retx.d ./Core/Startup/startup_stm32f411retx.o + +.PHONY: clean-Core-2f-Startup + diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo new file mode 100644 index 0000000..3ff520f --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo @@ -0,0 +1,27 @@ +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:157:19:HAL_Init 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:190:19:HAL_DeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:219:13:HAL_MspInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:230:13:HAL_MspDeInit 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:253:26:HAL_InitTick 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:312:13:HAL_IncTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323:17:HAL_GetTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:332:10:HAL_GetTickPrio 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:341:19:HAL_SetTickFreq 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:373:21:HAL_GetTickFreq 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:389:13:HAL_Delay 3 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:415:13:HAL_SuspendTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:431:13:HAL_ResumeTick 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:441:10:HAL_GetHalVersion 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:450:10:HAL_GetREVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:459:10:HAL_GetDEVID 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:468:6:HAL_DBGMCU_EnableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:477:6:HAL_DBGMCU_DisableDBGSleepMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:486:6:HAL_DBGMCU_EnableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:495:6:HAL_DBGMCU_DisableDBGStopMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:504:6:HAL_DBGMCU_EnableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:513:6:HAL_DBGMCU_DisableDBGStandbyMode 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:524:6:HAL_EnableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:535:6:HAL_DisableCompensationCell 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:544:10:HAL_GetUIDw0 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:553:10:HAL_GetUIDw1 1 +../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:562:10:HAL_GetUIDw2 1 diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d new file mode 100644 index 0000000..aad36a6 --- /dev/null +++ b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d @@ -0,0 +1,54 @@ +Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o: \ + ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \ + ../Core/Inc/stm32f4xx_hal_conf.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h \ + ../Drivers/CMSIS/Include/core_cm4.h \ + ../Drivers/CMSIS/Include/cmsis_version.h \ + ../Drivers/CMSIS/Include/cmsis_compiler.h \ + ../Drivers/CMSIS/Include/cmsis_gcc.h \ + ../Drivers/CMSIS/Include/mpu_armv7.h \ + ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \ + ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h: +../Core/Inc/stm32f4xx_hal_conf.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f411xe.h: +../Drivers/CMSIS/Include/core_cm4.h: +../Drivers/CMSIS/Include/cmsis_version.h: +../Drivers/CMSIS/Include/cmsis_compiler.h: +../Drivers/CMSIS/Include/cmsis_gcc.h: +../Drivers/CMSIS/Include/mpu_armv7.h: +../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h: +../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h: diff --git a/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/access_control_stm32/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o new file mode 100644 index 0000000000000000000000000000000000000000..97961afe7811d961e260c4f5497025d20b68e5cf GIT binary patch literal 724168 zcma&O2V50bw>La<&Y3=^W7pVwZ?Sh{kKJhO8hh*|8Z{9R5EVoa6h)eXiVa0n6csBd zN>M=Z|F?F#o|A z=KLF(SX>*MKm+CwbI`{B75G^EN3!Ga-}tie1i*=9<4J&%%f?dxr1DsYio(?#p zY&;WiR@rzq;GDAY?|^g5#`6H@myH(yE-V`_0$f}+UIMtZY`hHckFxP{z!hcVKLJ;k zjaLD#E*t*^_;=ZO4WND5*a6V7Y`hlGsch^F=u$Rb2k2ThUJtmTY`hWBt!(TLxT$RH z0l2wr>qHr@j0T{iXs+*&r?2IyNh-VV5ylQLr zMl#_{%-KE@KI>L3?EBxaEyX=qTw2-LS=bt!BdH*Z@xD(>m_94-k2%!6%?WS>Jkx&gIcYqbBq2c}2N zqyO-G{jYq@!0)1CMfRV2Q$_ubUPEWIrGu|a?-cEKoEWBz#|<2ZIC{NiwIlxhTl|Y( z`~ShGIREeZ|95_`*Si0Q{{P0;4rFUp{yuVD{hp=w0`JBDC;i{gm1$*3^?&Z&_xH!{ zf1y_d{k(`pn_+eIxK?U{)wfzwILnN$u4B}H9^o>maA#SD(e$J%Z|NW~i}~*5v4HYt zt8mOR-tt;t{@}6dGpqQESy(9fjD-U8H(&fG&#YlXx4{E@vyQ;9Z0kxoM#Gi_Y8WjW zH=JQ~?4hArhGUz478sr_S-~;_yZVcU5!rI_3?s3QcQ{67+YQn%3cEH^%c$&*rW~VZ zub<=@1Dn^FVT`Qf5tcErQ<`ZRGrMUU$5_}O(>bOB8$N(xDzcgLIi?cpWzsN}+3b}( zQ-$5URA8#IXI^8ztluIH^8-5{t7LVy$7u~ygZ+W$nVM`?Q--O zDVAsIvH`QTOg+|gRmU`7j~!!~hHP3l4bzCNxK+nAXIT@=v}8Nq*D|fx-k-EgYc}De zj%m-Pcj1{1?DiOe>Buha#xkAQ*+m+rGdrNYhUvx1wRKEyc0nA={KQ^uBQSkf>tL4Y z%f>lrnSQKKGQ;#o>* z#dP8?Jq9scVJRkRHXH`;o5s=vk}6|}j?^(+k%o-gtmDZjwazl?ALBSi>R=<=nXYAk zBNf-+nCmtt#$Lmj8#K~MV@GM31R9Ex;V+I!q@l_P6@Nx3Nty$|?5ck4qs6n*14`d) z>Qeh2EK^jfug%sm#WsE8h~Z3$OgwcE)2!#=)m`*c32H40_OcZZ?)Xe*U+5O7e?oL&Wn-|My#+LGGXu|L&YQ~jfbu`OKay)DH zK!6Q2qvylsgi>A$jo)PGO)SOQXpY!Ha#AVQUgJP|lS@5x*1Q;@VKh@pdEGSu^$_RO zQmnV8T?Jsjm3ru>i608dX{EfOngfpDO)tepYN`%~_Zg+w7)=k-n_22%ye4BBc(Y1* zlQq|#VYahNv1yutBsr(l!z|5hR%A54m+}^hz3`)H=9XehHPw(YY37wmuF(8=6E^3U z^6WLA(!g6#iaBXq$>u`V+!FW2RpZnHl8Z`tZj2!%6gOruI~-4qA|%tY7tI+^t*2puAd>K=b>6Nx!m})801xA)w z8&;15h{u#`a~n$m+wQ*z+``cu(@Imyg+N98$L{2oloyzW|ASf+)EfVtsx81{S3v`d z|7dHk;f|{RqAWs*z?M>K*gR+}&*qrVtWB$olAkFsul_}G8YD2!{zbX$qGKNZi!$b; zz@≈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